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