github.com/google/go-github/v74@v74.0.0/github/users_packages.go (about)

     1  // Copyright 2021 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"fmt"
    11  	"net/url"
    12  )
    13  
    14  // ListPackages lists the packages for a user. Passing the empty string for "user" will
    15  // list packages for the authenticated user.
    16  //
    17  // GitHub API docs: https://docs.github.com/rest/packages/packages#list-packages-for-a-user
    18  // GitHub API docs: https://docs.github.com/rest/packages/packages#list-packages-for-the-authenticated-users-namespace
    19  //
    20  //meta:operation GET /user/packages
    21  //meta:operation GET /users/{username}/packages
    22  func (s *UsersService) ListPackages(ctx context.Context, user string, opts *PackageListOptions) ([]*Package, *Response, error) {
    23  	var u string
    24  	if user != "" {
    25  		u = fmt.Sprintf("users/%v/packages", user)
    26  	} else {
    27  		u = "user/packages"
    28  	}
    29  	u, err := addOptions(u, opts)
    30  	if err != nil {
    31  		return nil, nil, err
    32  	}
    33  
    34  	req, err := s.client.NewRequest("GET", u, nil)
    35  	if err != nil {
    36  		return nil, nil, err
    37  	}
    38  
    39  	var packages []*Package
    40  	resp, err := s.client.Do(ctx, req, &packages)
    41  	if err != nil {
    42  		return nil, resp, err
    43  	}
    44  
    45  	return packages, resp, nil
    46  }
    47  
    48  // GetPackage gets a package by name for a user. Passing the empty string for "user" will
    49  // get the package for the authenticated user.
    50  //
    51  // GitHub API docs: https://docs.github.com/rest/packages/packages#get-a-package-for-a-user
    52  // GitHub API docs: https://docs.github.com/rest/packages/packages#get-a-package-for-the-authenticated-user
    53  //
    54  //meta:operation GET /user/packages/{package_type}/{package_name}
    55  //meta:operation GET /users/{username}/packages/{package_type}/{package_name}
    56  func (s *UsersService) GetPackage(ctx context.Context, user, packageType, packageName string) (*Package, *Response, error) {
    57  	var u string
    58  	if user != "" {
    59  		u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, url.PathEscape(packageName))
    60  	} else {
    61  		u = fmt.Sprintf("user/packages/%v/%v", packageType, url.PathEscape(packageName))
    62  	}
    63  
    64  	req, err := s.client.NewRequest("GET", u, nil)
    65  	if err != nil {
    66  		return nil, nil, err
    67  	}
    68  
    69  	var pack *Package
    70  	resp, err := s.client.Do(ctx, req, &pack)
    71  	if err != nil {
    72  		return nil, resp, err
    73  	}
    74  
    75  	return pack, resp, nil
    76  }
    77  
    78  // DeletePackage deletes a package from a user. Passing the empty string for "user" will
    79  // delete the package for the authenticated user.
    80  //
    81  // GitHub API docs: https://docs.github.com/rest/packages/packages#delete-a-package-for-a-user
    82  // GitHub API docs: https://docs.github.com/rest/packages/packages#delete-a-package-for-the-authenticated-user
    83  //
    84  //meta:operation DELETE /user/packages/{package_type}/{package_name}
    85  //meta:operation DELETE /users/{username}/packages/{package_type}/{package_name}
    86  func (s *UsersService) DeletePackage(ctx context.Context, user, packageType, packageName string) (*Response, error) {
    87  	var u string
    88  	if user != "" {
    89  		u = fmt.Sprintf("users/%v/packages/%v/%v", user, packageType, packageName)
    90  	} else {
    91  		u = fmt.Sprintf("user/packages/%v/%v", packageType, packageName)
    92  	}
    93  
    94  	req, err := s.client.NewRequest("DELETE", u, nil)
    95  	if err != nil {
    96  		return nil, err
    97  	}
    98  
    99  	return s.client.Do(ctx, req, nil)
   100  }
   101  
   102  // RestorePackage restores a package to a user. Passing the empty string for "user" will
   103  // restore the package for the authenticated user.
   104  //
   105  // GitHub API docs: https://docs.github.com/rest/packages/packages#restore-a-package-for-a-user
   106  // GitHub API docs: https://docs.github.com/rest/packages/packages#restore-a-package-for-the-authenticated-user
   107  //
   108  //meta:operation POST /user/packages/{package_type}/{package_name}/restore
   109  //meta:operation POST /users/{username}/packages/{package_type}/{package_name}/restore
   110  func (s *UsersService) RestorePackage(ctx context.Context, user, packageType, packageName string) (*Response, error) {
   111  	var u string
   112  	if user != "" {
   113  		u = fmt.Sprintf("users/%v/packages/%v/%v/restore", user, packageType, packageName)
   114  	} else {
   115  		u = fmt.Sprintf("user/packages/%v/%v/restore", packageType, packageName)
   116  	}
   117  
   118  	req, err := s.client.NewRequest("POST", u, nil)
   119  	if err != nil {
   120  		return nil, err
   121  	}
   122  
   123  	return s.client.Do(ctx, req, nil)
   124  }
   125  
   126  // PackageGetAllVersions gets all versions of a package for a user. Passing the empty string for "user" will
   127  // get versions for the authenticated user.
   128  //
   129  // GitHub API docs: https://docs.github.com/rest/packages/packages#list-package-versions-for-a-package-owned-by-a-user
   130  // GitHub API docs: https://docs.github.com/rest/packages/packages#list-package-versions-for-a-package-owned-by-the-authenticated-user
   131  //
   132  //meta:operation GET /user/packages/{package_type}/{package_name}/versions
   133  //meta:operation GET /users/{username}/packages/{package_type}/{package_name}/versions
   134  func (s *UsersService) PackageGetAllVersions(ctx context.Context, user, packageType, packageName string, opts *PackageListOptions) ([]*PackageVersion, *Response, error) {
   135  	var u string
   136  	if user != "" {
   137  		u = fmt.Sprintf("users/%v/packages/%v/%v/versions", user, packageType, packageName)
   138  	} else {
   139  		u = fmt.Sprintf("user/packages/%v/%v/versions", packageType, packageName)
   140  	}
   141  	u, err := addOptions(u, opts)
   142  	if err != nil {
   143  		return nil, nil, err
   144  	}
   145  
   146  	req, err := s.client.NewRequest("GET", u, nil)
   147  	if err != nil {
   148  		return nil, nil, err
   149  	}
   150  
   151  	var versions []*PackageVersion
   152  	resp, err := s.client.Do(ctx, req, &versions)
   153  	if err != nil {
   154  		return nil, resp, err
   155  	}
   156  
   157  	return versions, resp, nil
   158  }
   159  
   160  // PackageGetVersion gets a specific version of a package for a user. Passing the empty string for "user" will
   161  // get the version for the authenticated user.
   162  //
   163  // GitHub API docs: https://docs.github.com/rest/packages/packages#get-a-package-version-for-a-user
   164  // GitHub API docs: https://docs.github.com/rest/packages/packages#get-a-package-version-for-the-authenticated-user
   165  //
   166  //meta:operation GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}
   167  //meta:operation GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}
   168  func (s *UsersService) PackageGetVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*PackageVersion, *Response, error) {
   169  	var u string
   170  	if user != "" {
   171  		u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v", user, packageType, packageName, packageVersionID)
   172  	} else {
   173  		u = fmt.Sprintf("user/packages/%v/%v/versions/%v", packageType, packageName, packageVersionID)
   174  	}
   175  
   176  	req, err := s.client.NewRequest("GET", u, nil)
   177  	if err != nil {
   178  		return nil, nil, err
   179  	}
   180  
   181  	var version *PackageVersion
   182  	resp, err := s.client.Do(ctx, req, &version)
   183  	if err != nil {
   184  		return nil, resp, err
   185  	}
   186  
   187  	return version, resp, nil
   188  }
   189  
   190  // PackageDeleteVersion deletes a package version for a user. Passing the empty string for "user" will
   191  // delete the version for the authenticated user.
   192  //
   193  // GitHub API docs: https://docs.github.com/rest/packages/packages#delete-a-package-version-for-the-authenticated-user
   194  // GitHub API docs: https://docs.github.com/rest/packages/packages#delete-package-version-for-a-user
   195  //
   196  //meta:operation DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}
   197  //meta:operation DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}
   198  func (s *UsersService) PackageDeleteVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*Response, error) {
   199  	var u string
   200  	if user != "" {
   201  		u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v", user, packageType, packageName, packageVersionID)
   202  	} else {
   203  		u = fmt.Sprintf("user/packages/%v/%v/versions/%v", packageType, packageName, packageVersionID)
   204  	}
   205  
   206  	req, err := s.client.NewRequest("DELETE", u, nil)
   207  	if err != nil {
   208  		return nil, err
   209  	}
   210  
   211  	return s.client.Do(ctx, req, nil)
   212  }
   213  
   214  // PackageRestoreVersion restores a package version to a user. Passing the empty string for "user" will
   215  // restore the version for the authenticated user.
   216  //
   217  // GitHub API docs: https://docs.github.com/rest/packages/packages#restore-a-package-version-for-the-authenticated-user
   218  // GitHub API docs: https://docs.github.com/rest/packages/packages#restore-package-version-for-a-user
   219  //
   220  //meta:operation POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore
   221  //meta:operation POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore
   222  func (s *UsersService) PackageRestoreVersion(ctx context.Context, user, packageType, packageName string, packageVersionID int64) (*Response, error) {
   223  	var u string
   224  	if user != "" {
   225  		u = fmt.Sprintf("users/%v/packages/%v/%v/versions/%v/restore", user, packageType, packageName, packageVersionID)
   226  	} else {
   227  		u = fmt.Sprintf("user/packages/%v/%v/versions/%v/restore", packageType, packageName, packageVersionID)
   228  	}
   229  
   230  	req, err := s.client.NewRequest("POST", u, nil)
   231  	if err != nil {
   232  		return nil, err
   233  	}
   234  
   235  	return s.client.Do(ctx, req, nil)
   236  }