...

Source file src/github.com/xanzy/go-gitlab/releaselinks.go

Documentation: github.com/xanzy/go-gitlab

     1  //
     2  // Copyright 2021, Sander van Harmelen
     3  //
     4  // Licensed under the Apache License, Version 2.0 (the "License");
     5  // you may not use this file except in compliance with the License.
     6  // You may obtain a copy of the License at
     7  //
     8  //     http://www.apache.org/licenses/LICENSE-2.0
     9  //
    10  // Unless required by applicable law or agreed to in writing, software
    11  // distributed under the License is distributed on an "AS IS" BASIS,
    12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  // See the License for the specific language governing permissions and
    14  // limitations under the License.
    15  //
    16  
    17  package gitlab
    18  
    19  import (
    20  	"fmt"
    21  	"net/http"
    22  )
    23  
    24  // ReleaseLinksService handles communication with the release link methods
    25  // of the GitLab API.
    26  //
    27  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html
    28  type ReleaseLinksService struct {
    29  	client *Client
    30  }
    31  
    32  // ReleaseLink represents a release link.
    33  //
    34  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html
    35  type ReleaseLink struct {
    36  	ID             int           `json:"id"`
    37  	Name           string        `json:"name"`
    38  	URL            string        `json:"url"`
    39  	DirectAssetURL string        `json:"direct_asset_url"`
    40  	External       bool          `json:"external"`
    41  	LinkType       LinkTypeValue `json:"link_type"`
    42  }
    43  
    44  // ListReleaseLinksOptions represents ListReleaseLinks() options.
    45  //
    46  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#list-links-of-a-release
    47  type ListReleaseLinksOptions ListOptions
    48  
    49  // ListReleaseLinks gets assets as links from a Release.
    50  //
    51  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#list-links-of-a-release
    52  func (s *ReleaseLinksService) ListReleaseLinks(pid interface{}, tagName string, opt *ListReleaseLinksOptions, options ...RequestOptionFunc) ([]*ReleaseLink, *Response, error) {
    53  	project, err := parseID(pid)
    54  	if err != nil {
    55  		return nil, nil, err
    56  	}
    57  	u := fmt.Sprintf("projects/%s/releases/%s/assets/links", PathEscape(project), PathEscape(tagName))
    58  
    59  	req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
    60  	if err != nil {
    61  		return nil, nil, err
    62  	}
    63  
    64  	var rls []*ReleaseLink
    65  	resp, err := s.client.Do(req, &rls)
    66  	if err != nil {
    67  		return nil, resp, err
    68  	}
    69  
    70  	return rls, resp, nil
    71  }
    72  
    73  // GetReleaseLink returns a link from release assets.
    74  //
    75  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#get-a-release-link
    76  func (s *ReleaseLinksService) GetReleaseLink(pid interface{}, tagName string, link int, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
    77  	project, err := parseID(pid)
    78  	if err != nil {
    79  		return nil, nil, err
    80  	}
    81  	u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
    82  		PathEscape(project),
    83  		PathEscape(tagName),
    84  		link)
    85  
    86  	req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
    87  	if err != nil {
    88  		return nil, nil, err
    89  	}
    90  
    91  	rl := new(ReleaseLink)
    92  	resp, err := s.client.Do(req, rl)
    93  	if err != nil {
    94  		return nil, resp, err
    95  	}
    96  
    97  	return rl, resp, nil
    98  }
    99  
   100  // CreateReleaseLinkOptions represents CreateReleaseLink() options.
   101  //
   102  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#create-a-release-link
   103  type CreateReleaseLinkOptions struct {
   104  	Name     *string        `url:"name,omitempty" json:"name,omitempty"`
   105  	URL      *string        `url:"url,omitempty" json:"url,omitempty"`
   106  	FilePath *string        `url:"filepath,omitempty" json:"filepath,omitempty"`
   107  	LinkType *LinkTypeValue `url:"link_type,omitempty" json:"link_type,omitempty"`
   108  }
   109  
   110  // CreateReleaseLink creates a link.
   111  //
   112  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#create-a-release-link
   113  func (s *ReleaseLinksService) CreateReleaseLink(pid interface{}, tagName string, opt *CreateReleaseLinkOptions, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
   114  	project, err := parseID(pid)
   115  	if err != nil {
   116  		return nil, nil, err
   117  	}
   118  	u := fmt.Sprintf("projects/%s/releases/%s/assets/links", PathEscape(project), PathEscape(tagName))
   119  
   120  	req, err := s.client.NewRequest(http.MethodPost, u, opt, options)
   121  	if err != nil {
   122  		return nil, nil, err
   123  	}
   124  
   125  	rl := new(ReleaseLink)
   126  	resp, err := s.client.Do(req, rl)
   127  	if err != nil {
   128  		return nil, resp, err
   129  	}
   130  
   131  	return rl, resp, nil
   132  }
   133  
   134  // UpdateReleaseLinkOptions represents UpdateReleaseLink() options.
   135  //
   136  // You have to specify at least one of Name of URL.
   137  //
   138  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#update-a-release-link
   139  type UpdateReleaseLinkOptions struct {
   140  	Name     *string        `url:"name,omitempty" json:"name,omitempty"`
   141  	URL      *string        `url:"url,omitempty" json:"url,omitempty"`
   142  	FilePath *string        `url:"filepath,omitempty" json:"filepath,omitempty"`
   143  	LinkType *LinkTypeValue `url:"link_type,omitempty" json:"link_type,omitempty"`
   144  }
   145  
   146  // UpdateReleaseLink updates an asset link.
   147  //
   148  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#update-a-release-link
   149  func (s *ReleaseLinksService) UpdateReleaseLink(pid interface{}, tagName string, link int, opt *UpdateReleaseLinkOptions, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
   150  	project, err := parseID(pid)
   151  	if err != nil {
   152  		return nil, nil, err
   153  	}
   154  	u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
   155  		PathEscape(project),
   156  		PathEscape(tagName),
   157  		link)
   158  
   159  	req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
   160  	if err != nil {
   161  		return nil, nil, err
   162  	}
   163  
   164  	rl := new(ReleaseLink)
   165  	resp, err := s.client.Do(req, rl)
   166  	if err != nil {
   167  		return nil, resp, err
   168  	}
   169  
   170  	return rl, resp, nil
   171  }
   172  
   173  // DeleteReleaseLink deletes a link from release.
   174  //
   175  // GitLab API docs: https://docs.gitlab.com/ee/api/releases/links.html#delete-a-release-link
   176  func (s *ReleaseLinksService) DeleteReleaseLink(pid interface{}, tagName string, link int, options ...RequestOptionFunc) (*ReleaseLink, *Response, error) {
   177  	project, err := parseID(pid)
   178  	if err != nil {
   179  		return nil, nil, err
   180  	}
   181  	u := fmt.Sprintf("projects/%s/releases/%s/assets/links/%d",
   182  		PathEscape(project),
   183  		PathEscape(tagName),
   184  		link,
   185  	)
   186  
   187  	req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
   188  	if err != nil {
   189  		return nil, nil, err
   190  	}
   191  
   192  	rl := new(ReleaseLink)
   193  	resp, err := s.client.Do(req, rl)
   194  	if err != nil {
   195  		return nil, resp, err
   196  	}
   197  
   198  	return rl, resp, nil
   199  }
   200  

View as plain text