Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
4.9 KiB
168 lines
4.9 KiB
// |
|
// Copyright 2021, Kordian Bruck |
|
// |
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
|
// you may not use this file except in compliance with the License. |
|
// You may obtain a copy of the License at |
|
// |
|
// http://www.apache.org/licenses/LICENSE-2.0 |
|
// |
|
// Unless required by applicable law or agreed to in writing, software |
|
// distributed under the License is distributed on an "AS IS" BASIS, |
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
// See the License for the specific language governing permissions and |
|
// limitations under the License. |
|
// |
|
|
|
package gitlab |
|
|
|
import ( |
|
"fmt" |
|
"net/http" |
|
"time" |
|
) |
|
|
|
// PackagesService handles communication with the packages related methods |
|
// of the GitLab API. |
|
// |
|
// GitLab API docs: https://docs.gitlab.com/ee/api/packages.html |
|
type PackagesService struct { |
|
client *Client |
|
} |
|
|
|
// Package represents a GitLab single package. |
|
// |
|
// GitLab API docs: https://docs.gitlab.com/ee/api/packages.html |
|
type Package struct { |
|
ID int `json:"id"` |
|
Name string `json:"name"` |
|
Version string `json:"version"` |
|
PackageType string `json:"package_type"` |
|
Links *PackageLinks `json:"_links"` |
|
CreatedAt *time.Time `json:"created_at"` |
|
} |
|
|
|
func (s Package) String() string { |
|
return Stringify(s) |
|
} |
|
|
|
// PackageLinks holds links for itself and deleting. |
|
type PackageLinks struct { |
|
WebPath string `json:"web_path"` |
|
DeleteAPIPath string `json:"delete_api_path"` |
|
} |
|
|
|
func (s PackageLinks) String() string { |
|
return Stringify(s) |
|
} |
|
|
|
// PackageFile represents one file contained within a package. |
|
// |
|
// GitLab API docs: https://docs.gitlab.com/ee/api/packages.html |
|
type PackageFile struct { |
|
ID int `json:"id"` |
|
PackageID int `json:"package_id"` |
|
CreatedAt *time.Time `json:"created_at"` |
|
FileName string `json:"file_name"` |
|
Size int `json:"size"` |
|
FileMD5 string `json:"file_md5"` |
|
FileSHA1 string `json:"file_sha1"` |
|
Pipeline *[]Pipeline `json:"pipelines"` |
|
} |
|
|
|
func (s PackageFile) String() string { |
|
return Stringify(s) |
|
} |
|
|
|
// ListProjectPackagesOptions are the parameters available in a ListProjectPackages() Operation. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/packages.html#within-a-project |
|
type ListProjectPackagesOptions struct { |
|
ListOptions |
|
OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"` |
|
Sort *string `url:"sort,omitempty" json:"sort,omitempty"` |
|
PackageType *string `url:"package_type,omitempty" json:"package_type,omitempty"` |
|
PackageName *string `url:"package_name,omitempty" json:"package_name,omitempty"` |
|
IncludeVersionless *bool `url:"include_versionless,omitempty" json:"include_versionless,omitempty"` |
|
} |
|
|
|
// ListProjectPackages gets a list of packages in a project. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/packages.html#within-a-project |
|
func (s *PackagesService) ListProjectPackages(pid interface{}, opt *ListProjectPackagesOptions, options ...RequestOptionFunc) ([]*Package, *Response, error) { |
|
project, err := parseID(pid) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
u := fmt.Sprintf("projects/%s/packages", pathEscape(project)) |
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
var ps []*Package |
|
resp, err := s.client.Do(req, &ps) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return ps, resp, err |
|
} |
|
|
|
// ListPackageFilesOptions represents the available |
|
// ListPackageFiles() options. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/packages.html#list-package-files |
|
type ListPackageFilesOptions ListOptions |
|
|
|
// ListPackageFiles gets a list of files that are within a package |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/packages.html#list-package-files |
|
func (s *PackagesService) ListPackageFiles(pid interface{}, pkg int, opt *ListPackageFilesOptions, options ...RequestOptionFunc) ([]*PackageFile, *Response, error) { |
|
project, err := parseID(pid) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
u := fmt.Sprintf( |
|
"projects/%s/packages/%d/package_files", |
|
pathEscape(project), |
|
pkg, |
|
) |
|
|
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
|
|
var pfs []*PackageFile |
|
resp, err := s.client.Do(req, &pfs) |
|
if err != nil { |
|
return nil, resp, err |
|
} |
|
|
|
return pfs, resp, err |
|
} |
|
|
|
// DeleteProjectPackage deletes a package in a project. |
|
// |
|
// GitLab API docs: |
|
// https://docs.gitlab.com/ee/api/packages.html#delete-a-project-package |
|
func (s *PackagesService) DeleteProjectPackage(pid interface{}, pkg int, options ...RequestOptionFunc) (*Response, error) { |
|
project, err := parseID(pid) |
|
if err != nil { |
|
return nil, err |
|
} |
|
u := fmt.Sprintf("projects/%s/packages/%d", pathEscape(project), pkg) |
|
|
|
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options) |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
return s.client.Do(req, nil) |
|
}
|
|
|