mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:25:11 +01:00 
			
		
		
		
	Upgrade go-github to v39 (#17437)
This commit is contained in:
		
							parent
							
								
									849356deaf
								
							
						
					
					
						commit
						812a9daab9
					
				
							
								
								
									
										3
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								go.mod
									
									
									
									
									
								
							| @ -53,8 +53,7 @@ require ( | |||||||
| 	github.com/gogs/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85 | 	github.com/gogs/go-gogs-client v0.0.0-20210131175652-1d7215cd8d85 | ||||||
| 	github.com/golang-jwt/jwt v3.2.2+incompatible | 	github.com/golang-jwt/jwt v3.2.2+incompatible | ||||||
| 	github.com/golang/snappy v0.0.4 // indirect | 	github.com/golang/snappy v0.0.4 // indirect | ||||||
| 	github.com/google/go-github/v37 v37.0.0 | 	github.com/google/go-github/v39 v39.2.0 | ||||||
| 	github.com/google/go-querystring v1.1.0 // indirect |  | ||||||
| 	github.com/google/uuid v1.2.0 | 	github.com/google/uuid v1.2.0 | ||||||
| 	github.com/gorilla/context v1.1.1 | 	github.com/gorilla/context v1.1.1 | ||||||
| 	github.com/gorilla/feeds v1.1.1 | 	github.com/gorilla/feeds v1.1.1 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @ -562,8 +562,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | |||||||
| github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= | github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= | ||||||
| github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||||||
| github.com/google/go-github/v37 v37.0.0 h1:rCspN8/6kB1BAJWZfuafvHhyfIo5fkAulaP/3bOQ/tM= | github.com/google/go-github/v39 v39.2.0 h1:rNNM311XtPOz5rDdsJXAp2o8F67X9FnROXTvto3aSnQ= | ||||||
| github.com/google/go-github/v37 v37.0.0/go.mod h1:LM7in3NmXDrX58GbEHy7FtNLbI2JijX93RnMKvWG3m4= | github.com/google/go-github/v39 v39.2.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE= | ||||||
| github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | ||||||
| github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= | ||||||
| github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= | github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ package migrations | |||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/go-github/v37/github" | 	"github.com/google/go-github/v39/github" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/structs" | 	"code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/modules/util" | 	"code.gitea.io/gitea/modules/util" | ||||||
| 
 | 
 | ||||||
| 	"github.com/google/go-github/v37/github" | 	"github.com/google/go-github/v39/github" | ||||||
| 	"golang.org/x/oauth2" | 	"golang.org/x/oauth2" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -26,6 +26,7 @@ Alex Bramley <a.bramley@gmail.com> | |||||||
| Alex Orr <Alexorr.CSE@gmail.com> | Alex Orr <Alexorr.CSE@gmail.com> | ||||||
| Alex Unger <zyxancf@gmail.com> | Alex Unger <zyxancf@gmail.com> | ||||||
| Alexander Harkness <me@bearbin.net> | Alexander Harkness <me@bearbin.net> | ||||||
|  | Alexis Gauthiez <alexis.gauthiez@gmail.com> | ||||||
| Ali Farooq <ali.farooq0@pm.me> | Ali Farooq <ali.farooq0@pm.me> | ||||||
| Allen Sun <shlallen1990@gmail.com> | Allen Sun <shlallen1990@gmail.com> | ||||||
| Amey Sakhadeo <me@ameyms.com> | Amey Sakhadeo <me@ameyms.com> | ||||||
| @ -50,6 +51,7 @@ Arıl Bozoluk <arilbozoluk@hotmail.com> | |||||||
| Asier Marruedo <asiermarruedo@gmail.com> | Asier Marruedo <asiermarruedo@gmail.com> | ||||||
| Austin Burdine <acburdine@gmail.com> | Austin Burdine <acburdine@gmail.com> | ||||||
| Austin Dizzy <dizzy@wow.com> | Austin Dizzy <dizzy@wow.com> | ||||||
|  | Azuka Okuleye <azuka@zatechcorp.com> | ||||||
| Ben Batha <bhbatha@gmail.com> | Ben Batha <bhbatha@gmail.com> | ||||||
| Benjamen Keroack <benjamen@dollarshaveclub.com> | Benjamen Keroack <benjamen@dollarshaveclub.com> | ||||||
| Beshr Kayali <beshrkayali@gmail.com> | Beshr Kayali <beshrkayali@gmail.com> | ||||||
| @ -63,6 +65,7 @@ Brad Moylan <moylan.brad@gmail.com> | |||||||
| Bradley Falzon <brad@teambrad.net> | Bradley Falzon <brad@teambrad.net> | ||||||
| Bradley McAllister <brad.mcallister@hotmail.com> | Bradley McAllister <brad.mcallister@hotmail.com> | ||||||
| Brandon Cook <phylake@gmail.com> | Brandon Cook <phylake@gmail.com> | ||||||
|  | Brett Logan <lindluni@github.com> | ||||||
| Brian Egizi <brian@mojotech.com> | Brian Egizi <brian@mojotech.com> | ||||||
| Bryan Boreham <bryan@weave.works> | Bryan Boreham <bryan@weave.works> | ||||||
| Cami Diez <diezcami@gmail.com> | Cami Diez <diezcami@gmail.com> | ||||||
| @ -72,7 +75,9 @@ Carlos Tadeu Panato Junior <ctadeu@gmail.com> | |||||||
| chandresh-pancholi <chandreshpancholi007@gmail.com> | chandresh-pancholi <chandreshpancholi007@gmail.com> | ||||||
| Charles Fenwick Elliott <Charles@FenwickElliott.io> | Charles Fenwick Elliott <Charles@FenwickElliott.io> | ||||||
| Charlie Yan <charlieyan08@gmail.com> | Charlie Yan <charlieyan08@gmail.com> | ||||||
|  | Chmouel Boudjnah <chmouel@chmouel.com> | ||||||
| Chris King <chriskingnet@gmail.com> | Chris King <chriskingnet@gmail.com> | ||||||
|  | Chris Mc <prince.chrismc@gmail.com> | ||||||
| Chris Raborg <craborg57@gmail.com> | Chris Raborg <craborg57@gmail.com> | ||||||
| Chris Roche <chris@vsco.co> | Chris Roche <chris@vsco.co> | ||||||
| Chris Schaefer <chris@dtzq.com> | Chris Schaefer <chris@dtzq.com> | ||||||
| @ -89,6 +94,7 @@ Daniel Nilsson <daniel.nilsson1989@gmail.com> | |||||||
| Daoq <masseto2002@gmail.com> | Daoq <masseto2002@gmail.com> | ||||||
| Dave Du Cros <davidducros@gmail.com> | Dave Du Cros <davidducros@gmail.com> | ||||||
| Dave Henderson <dhenderson@gmail.com> | Dave Henderson <dhenderson@gmail.com> | ||||||
|  | Dave Perrett <hello@daveperrett.com> | ||||||
| Dave Protasowski <dprotaso@gmail.com> | Dave Protasowski <dprotaso@gmail.com> | ||||||
| David Deng <daviddengcn@gmail.com> | David Deng <daviddengcn@gmail.com> | ||||||
| David J. M. Karlsen <david@davidkarlsen.com> | David J. M. Karlsen <david@davidkarlsen.com> | ||||||
| @ -97,6 +103,7 @@ David Ji <github.com/davidji99> | |||||||
| David Lopez Reyes <davidlopezre@gmail.com> | David Lopez Reyes <davidlopezre@gmail.com> | ||||||
| Davide Zipeto <dawez1@gmail.com> | Davide Zipeto <dawez1@gmail.com> | ||||||
| Dennis Webb <dennis@bluesentryit.com> | Dennis Webb <dennis@bluesentryit.com> | ||||||
|  | Derek Jobst <derekjobst@gmail.com> | ||||||
| Dhi Aurrahman <diorahman@rockybars.com> | Dhi Aurrahman <diorahman@rockybars.com> | ||||||
| Diego Lapiduz <diego.lapiduz@cfpb.gov> | Diego Lapiduz <diego.lapiduz@cfpb.gov> | ||||||
| Dmitri Shuralyov <shurcooL@gmail.com> | Dmitri Shuralyov <shurcooL@gmail.com> | ||||||
| @ -114,6 +121,7 @@ Erick Fejta <erick@fejta.com> | |||||||
| Erik Nobel <hendrik.nobel@transferwise.com> | Erik Nobel <hendrik.nobel@transferwise.com> | ||||||
| erwinvaneyk <erwinvaneyk@gmail.com> | erwinvaneyk <erwinvaneyk@gmail.com> | ||||||
| Evan Elias <evanjelias@gmail.com> | Evan Elias <evanjelias@gmail.com> | ||||||
|  | Fabian Holler <fabian.holler@simplesurance.de> | ||||||
| Fabrice <fabrice.vaillant@student.ecp.fr> | Fabrice <fabrice.vaillant@student.ecp.fr> | ||||||
| Felix Geisendörfer <felix@debuggable.com> | Felix Geisendörfer <felix@debuggable.com> | ||||||
| Filippo Valsorda <hi@filippo.io> | Filippo Valsorda <hi@filippo.io> | ||||||
| @ -140,15 +148,19 @@ haya14busa <hayabusa1419@gmail.com> | |||||||
| Huy Tr <kingbazoka@gmail.com> | Huy Tr <kingbazoka@gmail.com> | ||||||
| huydx <doxuanhuy@gmail.com> | huydx <doxuanhuy@gmail.com> | ||||||
| i2bskn <i2bskn@gmail.com> | i2bskn <i2bskn@gmail.com> | ||||||
|  | Ikko Ashimine <eltociear@gmail.com> | ||||||
| Ioannis Georgoulas <igeorgoulas21@gmail.com> | Ioannis Georgoulas <igeorgoulas21@gmail.com> | ||||||
| Isao Jonas <isao.jonas@gmail.com> | Isao Jonas <isao.jonas@gmail.com> | ||||||
| ishan upadhyay <ishanupadhyay412@gmail.com> | ishan upadhyay <ishanupadhyay412@gmail.com> | ||||||
| isqua <isqua@isqua.ru> | isqua <isqua@isqua.ru> | ||||||
| Jacob Valdemar <jan@lunar.app> | Jacob Valdemar <jan@lunar.app> | ||||||
| Jake Krammer <jake.krammer1@gmail.com> | Jake Krammer <jake.krammer1@gmail.com> | ||||||
|  | Jake White <jake@jwhite.network> | ||||||
| Jameel Haffejee <RC1140@republiccommandos.co.za> | Jameel Haffejee <RC1140@republiccommandos.co.za> | ||||||
| James Cockbain <james.cockbain@ibm.com> | James Cockbain <james.cockbain@ibm.com> | ||||||
|  | James Loh <github@jloh.co> | ||||||
| Jan Kosecki <jan.kosecki91@gmail.com> | Jan Kosecki <jan.kosecki91@gmail.com> | ||||||
|  | Jan Švábík <jansvabik@jansvabik.cz> | ||||||
| Javier Campanini <jcampanini@palantir.com> | Javier Campanini <jcampanini@palantir.com> | ||||||
| Jef LeCompte <jeffreylec@gmail.com> | Jef LeCompte <jeffreylec@gmail.com> | ||||||
| Jens Rantil <jens.rantil@gmail.com> | Jens Rantil <jens.rantil@gmail.com> | ||||||
| @ -180,6 +192,7 @@ Katrina Owen <kytrinyx@github.com> | |||||||
| Kautilya Tripathi <tripathi.kautilya@gmail.com> | Kautilya Tripathi <tripathi.kautilya@gmail.com> | ||||||
| Keita Urashima <ursm@ursm.jp> | Keita Urashima <ursm@ursm.jp> | ||||||
| Kevin Burke <kev@inburke.com> | Kevin Burke <kev@inburke.com> | ||||||
|  | Kirill <g4s8.public@gmail.com> | ||||||
| Konrad Malawski <konrad.malawski@project13.pl> | Konrad Malawski <konrad.malawski@project13.pl> | ||||||
| Kookheon Kwon <kucuny@gmail.com> | Kookheon Kwon <kucuny@gmail.com> | ||||||
| Krzysztof Kowalczyk <kkowalczyk@gmail.com> | Krzysztof Kowalczyk <kkowalczyk@gmail.com> | ||||||
| @ -189,6 +202,7 @@ kyokomi <kyoko1220adword@gmail.com> | |||||||
| Laurent Verdoïa <verdoialaurent@gmail.com> | Laurent Verdoïa <verdoialaurent@gmail.com> | ||||||
| Liam Galvin <liam@liam-galvin.co.uk> | Liam Galvin <liam@liam-galvin.co.uk> | ||||||
| Lovro Mažgon <lovro.mazgon@gmail.com> | Lovro Mažgon <lovro.mazgon@gmail.com> | ||||||
|  | Luca Campese <me@campesel.net> | ||||||
| Lucas Alcantara <lucasalcantaraf@gmail.com> | Lucas Alcantara <lucasalcantaraf@gmail.com> | ||||||
| Luke Evers <me@lukevers.com> | Luke Evers <me@lukevers.com> | ||||||
| Luke Kysow <lkysow@gmail.com> | Luke Kysow <lkysow@gmail.com> | ||||||
| @ -196,6 +210,7 @@ Luke Roberts <email@luke-roberts.co.uk> | |||||||
| Luke Young <luke@hydrantlabs.org> | Luke Young <luke@hydrantlabs.org> | ||||||
| lynn [they] <lynncyrin@gmail.com> | lynn [they] <lynncyrin@gmail.com> | ||||||
| Maksim Zhylinski <uzzable@gmail.com> | Maksim Zhylinski <uzzable@gmail.com> | ||||||
|  | Marc Binder <marcandrebinder@gmail.com> | ||||||
| Marcelo Carlos <marcelo@permutive.com> | Marcelo Carlos <marcelo@permutive.com> | ||||||
| Mark Tareshawty <tarebyte@github.com> | Mark Tareshawty <tarebyte@github.com> | ||||||
| Martin Holman <me@martinholman.co.nz> | Martin Holman <me@martinholman.co.nz> | ||||||
| @ -204,6 +219,7 @@ Martins Sipenko <martins.sipenko@gmail.com> | |||||||
| Marwan Sulaiman <marwan.sameer@gmail.com> | Marwan Sulaiman <marwan.sameer@gmail.com> | ||||||
| Masayuki Izumi <m@izum.in> | Masayuki Izumi <m@izum.in> | ||||||
| Mat Geist <matgeist@gmail.com> | Mat Geist <matgeist@gmail.com> | ||||||
|  | Matin Rahmanian <itsmatinx@gmail.com> | ||||||
| Matt <alpmatthew@gmail.com> | Matt <alpmatthew@gmail.com> | ||||||
| Matt Brender <mjbrender@gmail.com> | Matt Brender <mjbrender@gmail.com> | ||||||
| Matt Gaunt <matt@gauntface.co.uk> | Matt Gaunt <matt@gauntface.co.uk> | ||||||
| @ -215,6 +231,7 @@ Michael Tiller <michael.tiller@gmail.com> | |||||||
| Michał Glapa <michal.glapa@gmail.com> | Michał Glapa <michal.glapa@gmail.com> | ||||||
| Michelangelo Morrillo <michelangelo@morrillo.it> | Michelangelo Morrillo <michelangelo@morrillo.it> | ||||||
| Mukundan Senthil <mukundan314@gmail.com> | Mukundan Senthil <mukundan314@gmail.com> | ||||||
|  | Munia Balayil <munia.247@gmail.com> | ||||||
| Nadav Kaner <nadavkaner1@gmail.com> | Nadav Kaner <nadavkaner1@gmail.com> | ||||||
| Nathan VanBenschoten <nvanbenschoten@gmail.com> | Nathan VanBenschoten <nvanbenschoten@gmail.com> | ||||||
| Navaneeth Suresh <navaneeths1998@gmail.com> | Navaneeth Suresh <navaneeths1998@gmail.com> | ||||||
| @ -229,6 +246,7 @@ ns-cweber <cweber@narrativescience.com> | |||||||
| Ole Orhagen <ole.orhagen@northern.tech> | Ole Orhagen <ole.orhagen@northern.tech> | ||||||
| Oleg Kovalov <iamolegkovalov@gmail.com> | Oleg Kovalov <iamolegkovalov@gmail.com> | ||||||
| Ondřej Kupka <ondra.cap@gmail.com> | Ondřej Kupka <ondra.cap@gmail.com> | ||||||
|  | Ori Talmor <talmorori@gmail.com> | ||||||
| Pablo Pérez Schröder <pablo.perezschroder@wetransfer.com> | Pablo Pérez Schröder <pablo.perezschroder@wetransfer.com> | ||||||
| Palash Nigam <npalash25@gmail.com> | Palash Nigam <npalash25@gmail.com> | ||||||
| Panagiotis Moustafellos <pmoust@gmail.com> | Panagiotis Moustafellos <pmoust@gmail.com> | ||||||
| @ -265,11 +283,13 @@ Ricco Førgaard <ricco@fiskeben.dk> | |||||||
| Rob Figueiredo <robfig@yext.com> | Rob Figueiredo <robfig@yext.com> | ||||||
| Rohit Upadhyay <urohit011@gmail.com> | Rohit Upadhyay <urohit011@gmail.com> | ||||||
| Ronak Jain <ronakjain@outlook.in> | Ronak Jain <ronakjain@outlook.in> | ||||||
|  | Ross Gustafson <srgustafson8@icloud.com> | ||||||
| Ruben Vereecken <rubenvereecken@gmail.com> | Ruben Vereecken <rubenvereecken@gmail.com> | ||||||
| Russell Boley <raboley@gmail.com> | Russell Boley <raboley@gmail.com> | ||||||
| Ryan Leung <rleungx@gmail.com> | Ryan Leung <rleungx@gmail.com> | ||||||
| Ryan Lower <rpjlower@gmail.com> | Ryan Lower <rpjlower@gmail.com> | ||||||
| Ryo Nakao <nakabonne@gmail.com> | Ryo Nakao <nakabonne@gmail.com> | ||||||
|  | Saaarah <sarah.liusy@gmail.com> | ||||||
| Safwan Olaimat <safwan.olaimat@gmail.com> | Safwan Olaimat <safwan.olaimat@gmail.com> | ||||||
| Sahil Dua <sahildua2305@gmail.com> | Sahil Dua <sahildua2305@gmail.com> | ||||||
| saisi <saisi@users.noreply.github.com> | saisi <saisi@users.noreply.github.com> | ||||||
| @ -332,4 +352,6 @@ Yannick Utard <yannickutard@gmail.com> | |||||||
| Yicheng Qin <qycqycqycqycqyc@gmail.com> | Yicheng Qin <qycqycqycqycqyc@gmail.com> | ||||||
| Yosuke Akatsuka <yosuke.akatsuka@access-company.com> | Yosuke Akatsuka <yosuke.akatsuka@access-company.com> | ||||||
| Yumikiyo Osanai <yumios.art@gmail.com> | Yumikiyo Osanai <yumios.art@gmail.com> | ||||||
|  | Yusuke Kuoka <ykuoka@gmail.com> | ||||||
| Zach Latta <zach@zachlatta.com> | Zach Latta <zach@zachlatta.com> | ||||||
|  | zhouhaibing089 <zhouhaibing089@gmail.com> | ||||||
| @ -36,12 +36,15 @@ type CreateRunnerGroupRequest struct { | |||||||
| 	SelectedRepositoryIDs []int64 `json:"selected_repository_ids,omitempty"` | 	SelectedRepositoryIDs []int64 `json:"selected_repository_ids,omitempty"` | ||||||
| 	// Runners represent a list of runner IDs to add to the runner group. | 	// Runners represent a list of runner IDs to add to the runner group. | ||||||
| 	Runners []int64 `json:"runners,omitempty"` | 	Runners []int64 `json:"runners,omitempty"` | ||||||
|  | 	// If set to True, public repos can use this runner group | ||||||
|  | 	AllowsPublicRepositories *bool `json:"allows_public_repositories,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdateRunnerGroupRequest represents a request to update a Runner group for an organization. | // UpdateRunnerGroupRequest represents a request to update a Runner group for an organization. | ||||||
| type UpdateRunnerGroupRequest struct { | type UpdateRunnerGroupRequest struct { | ||||||
| 	Name       *string `json:"name,omitempty"` | 	Name                     *string `json:"name,omitempty"` | ||||||
| 	Visibility *string `json:"visibility,omitempty"` | 	Visibility               *string `json:"visibility,omitempty"` | ||||||
|  | 	AllowsPublicRepositories *bool   `json:"allows_public_repositories,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SetRepoAccessRunnerGroupRequest represents a request to replace the list of repositories | // SetRepoAccessRunnerGroupRequest represents a request to replace the list of repositories | ||||||
| @ -156,8 +159,13 @@ func (s *ActionsService) UpdateOrganizationRunnerGroup(ctx context.Context, org | |||||||
| // ListRepositoryAccessRunnerGroup lists the repositories with access to a self-hosted runner group configured in an organization. | // ListRepositoryAccessRunnerGroup lists the repositories with access to a self-hosted runner group configured in an organization. | ||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-repository-access-to-a-self-hosted-runner-group-in-an-organization | // GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-repository-access-to-a-self-hosted-runner-group-in-an-organization | ||||||
| func (s *ActionsService) ListRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64) (*ListRepositories, *Response, error) { | func (s *ActionsService) ListRepositoryAccessRunnerGroup(ctx context.Context, org string, groupID int64, opts *ListOptions) (*ListRepositories, *Response, error) { | ||||||
| 	u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID) | 	u := fmt.Sprintf("orgs/%v/actions/runner-groups/%v/repositories", org, groupID) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	req, err := s.client.NewRequest("GET", u, nil) | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, nil, err | 		return nil, nil, err | ||||||
| @ -264,6 +264,65 @@ func (s *ActionsService) ListEnabledReposInOrg(ctx context.Context, owner string | |||||||
| 	return repos, resp, nil | 	return repos, resp, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // SetEnabledReposInOrg replaces the list of selected repositories that are enabled for GitHub Actions in an organization.. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/actions#set-selected-repositories-enabled-for-github-actions-in-an-organization | ||||||
|  | func (s *ActionsService) SetEnabledReposInOrg(ctx context.Context, owner string, repositoryIDs []int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/actions/permissions/repositories", owner) | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("PUT", u, struct { | ||||||
|  | 		IDs []int64 `json:"selected_repository_ids"` | ||||||
|  | 	}{IDs: repositoryIDs}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	resp, err := s.client.Do(ctx, req, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // AddEnabledReposInOrg adds a repository to the list of selected repositories that are enabled for GitHub Actions in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/actions#enable-a-selected-repository-for-github-actions-in-an-organization | ||||||
|  | func (s *ActionsService) AddEnabledReposInOrg(ctx context.Context, owner string, repositoryID int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/actions/permissions/repositories/%v", owner, repositoryID) | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("PUT", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	resp, err := s.client.Do(ctx, req, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // RemoveEnabledRepoInOrg removes a single repository from the list of enabled repos for GitHub Actions in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/actions#disable-a-selected-repository-for-github-actions-in-an-organization | ||||||
|  | func (s *ActionsService) RemoveEnabledRepoInOrg(ctx context.Context, owner string, repositoryID int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/actions/permissions/repositories/%v", owner, repositoryID) | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("DELETE", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	resp, err := s.client.Do(ctx, req, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // GetOrganizationRunner gets a specific self-hosted runner for an organization using its runner ID. | // GetOrganizationRunner gets a specific self-hosted runner for an organization using its runner ID. | ||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-self-hosted-runner-for-an-organization | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-self-hosted-runner-for-an-organization | ||||||
| @ -302,7 +302,7 @@ func (s *ActionsService) SetSelectedReposForOrgSecret(ctx context.Context, org, | |||||||
| 	u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name) | 	u := fmt.Sprintf("orgs/%v/actions/secrets/%v/repositories", org, name) | ||||||
| 
 | 
 | ||||||
| 	type repoIDs struct { | 	type repoIDs struct { | ||||||
| 		SelectedIDs SelectedRepoIDs `json:"selected_repository_ids,omitempty"` | 		SelectedIDs SelectedRepoIDs `json:"selected_repository_ids"` | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	req, err := s.client.NewRequest("PUT", u, repoIDs{SelectedIDs: ids}) | 	req, err := s.client.NewRequest("PUT", u, repoIDs{SelectedIDs: ids}) | ||||||
| @ -38,6 +38,8 @@ type WorkflowJob struct { | |||||||
| 	Name        *string     `json:"name,omitempty"` | 	Name        *string     `json:"name,omitempty"` | ||||||
| 	Steps       []*TaskStep `json:"steps,omitempty"` | 	Steps       []*TaskStep `json:"steps,omitempty"` | ||||||
| 	CheckRunURL *string     `json:"check_run_url,omitempty"` | 	CheckRunURL *string     `json:"check_run_url,omitempty"` | ||||||
|  | 	// Labels represents runner labels from the `runs-on:` key from a GitHub Actions workflow. | ||||||
|  | 	Labels []string `json:"labels,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Jobs represents a slice of repository action workflow job. | // Jobs represents a slice of repository action workflow job. | ||||||
| @ -145,5 +147,4 @@ func (s *ActionsService) getWorkflowLogsFromURL(ctx context.Context, u string, f | |||||||
| 		resp, err = s.getWorkflowLogsFromURL(ctx, u, false) | 		resp, err = s.getWorkflowLogsFromURL(ctx, u, false) | ||||||
| 	} | 	} | ||||||
| 	return resp, err | 	return resp, err | ||||||
| 
 |  | ||||||
| } | } | ||||||
| @ -14,31 +14,33 @@ import ( | |||||||
| 
 | 
 | ||||||
| // WorkflowRun represents a repository action workflow run. | // WorkflowRun represents a repository action workflow run. | ||||||
| type WorkflowRun struct { | type WorkflowRun struct { | ||||||
| 	ID             *int64         `json:"id,omitempty"` | 	ID               *int64         `json:"id,omitempty"` | ||||||
| 	Name           *string        `json:"name,omitempty"` | 	Name             *string        `json:"name,omitempty"` | ||||||
| 	NodeID         *string        `json:"node_id,omitempty"` | 	NodeID           *string        `json:"node_id,omitempty"` | ||||||
| 	HeadBranch     *string        `json:"head_branch,omitempty"` | 	HeadBranch       *string        `json:"head_branch,omitempty"` | ||||||
| 	HeadSHA        *string        `json:"head_sha,omitempty"` | 	HeadSHA          *string        `json:"head_sha,omitempty"` | ||||||
| 	RunNumber      *int           `json:"run_number,omitempty"` | 	RunNumber        *int           `json:"run_number,omitempty"` | ||||||
| 	Event          *string        `json:"event,omitempty"` | 	Event            *string        `json:"event,omitempty"` | ||||||
| 	Status         *string        `json:"status,omitempty"` | 	Status           *string        `json:"status,omitempty"` | ||||||
| 	Conclusion     *string        `json:"conclusion,omitempty"` | 	Conclusion       *string        `json:"conclusion,omitempty"` | ||||||
| 	WorkflowID     *int64         `json:"workflow_id,omitempty"` | 	WorkflowID       *int64         `json:"workflow_id,omitempty"` | ||||||
| 	URL            *string        `json:"url,omitempty"` | 	CheckSuiteID     *int64         `json:"check_suite_id,omitempty"` | ||||||
| 	HTMLURL        *string        `json:"html_url,omitempty"` | 	CheckSuiteNodeID *string        `json:"check_suite_node_id,omitempty"` | ||||||
| 	PullRequests   []*PullRequest `json:"pull_requests,omitempty"` | 	URL              *string        `json:"url,omitempty"` | ||||||
| 	CreatedAt      *Timestamp     `json:"created_at,omitempty"` | 	HTMLURL          *string        `json:"html_url,omitempty"` | ||||||
| 	UpdatedAt      *Timestamp     `json:"updated_at,omitempty"` | 	PullRequests     []*PullRequest `json:"pull_requests,omitempty"` | ||||||
| 	JobsURL        *string        `json:"jobs_url,omitempty"` | 	CreatedAt        *Timestamp     `json:"created_at,omitempty"` | ||||||
| 	LogsURL        *string        `json:"logs_url,omitempty"` | 	UpdatedAt        *Timestamp     `json:"updated_at,omitempty"` | ||||||
| 	CheckSuiteURL  *string        `json:"check_suite_url,omitempty"` | 	JobsURL          *string        `json:"jobs_url,omitempty"` | ||||||
| 	ArtifactsURL   *string        `json:"artifacts_url,omitempty"` | 	LogsURL          *string        `json:"logs_url,omitempty"` | ||||||
| 	CancelURL      *string        `json:"cancel_url,omitempty"` | 	CheckSuiteURL    *string        `json:"check_suite_url,omitempty"` | ||||||
| 	RerunURL       *string        `json:"rerun_url,omitempty"` | 	ArtifactsURL     *string        `json:"artifacts_url,omitempty"` | ||||||
| 	HeadCommit     *HeadCommit    `json:"head_commit,omitempty"` | 	CancelURL        *string        `json:"cancel_url,omitempty"` | ||||||
| 	WorkflowURL    *string        `json:"workflow_url,omitempty"` | 	RerunURL         *string        `json:"rerun_url,omitempty"` | ||||||
| 	Repository     *Repository    `json:"repository,omitempty"` | 	HeadCommit       *HeadCommit    `json:"head_commit,omitempty"` | ||||||
| 	HeadRepository *Repository    `json:"head_repository,omitempty"` | 	WorkflowURL      *string        `json:"workflow_url,omitempty"` | ||||||
|  | 	Repository       *Repository    `json:"repository,omitempty"` | ||||||
|  | 	HeadRepository   *Repository    `json:"head_repository,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // WorkflowRuns represents a slice of repository action workflow run. | // WorkflowRuns represents a slice of repository action workflow run. | ||||||
| @ -49,10 +51,11 @@ type WorkflowRuns struct { | |||||||
| 
 | 
 | ||||||
| // ListWorkflowRunsOptions specifies optional parameters to ListWorkflowRuns. | // ListWorkflowRunsOptions specifies optional parameters to ListWorkflowRuns. | ||||||
| type ListWorkflowRunsOptions struct { | type ListWorkflowRunsOptions struct { | ||||||
| 	Actor  string `url:"actor,omitempty"` | 	Actor   string `url:"actor,omitempty"` | ||||||
| 	Branch string `url:"branch,omitempty"` | 	Branch  string `url:"branch,omitempty"` | ||||||
| 	Event  string `url:"event,omitempty"` | 	Event   string `url:"event,omitempty"` | ||||||
| 	Status string `url:"status,omitempty"` | 	Status  string `url:"status,omitempty"` | ||||||
|  | 	Created string `url:"created,omitempty"` | ||||||
| 	ListOptions | 	ListOptions | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -51,7 +51,7 @@ type NotificationListOptions struct { | |||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-notifications-for-the-authenticated-user | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/#list-notifications-for-the-authenticated-user | ||||||
| func (s *ActivityService) ListNotifications(ctx context.Context, opts *NotificationListOptions) ([]*Notification, *Response, error) { | func (s *ActivityService) ListNotifications(ctx context.Context, opts *NotificationListOptions) ([]*Notification, *Response, error) { | ||||||
| 	u := fmt.Sprintf("notifications") | 	u := "notifications" | ||||||
| 	u, err := addOptions(u, opts) | 	u, err := addOptions(u, opts) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, nil, err | 		return nil, nil, err | ||||||
| @ -47,6 +47,10 @@ type InstallationTokenOptions struct { | |||||||
| 	// Providing repository IDs restricts the access of an installation token to specific repositories. | 	// Providing repository IDs restricts the access of an installation token to specific repositories. | ||||||
| 	RepositoryIDs []int64 `json:"repository_ids,omitempty"` | 	RepositoryIDs []int64 `json:"repository_ids,omitempty"` | ||||||
| 
 | 
 | ||||||
|  | 	// The names of the repositories that the installation token can access. | ||||||
|  | 	// Providing repository names restricts the access of an installation token to specific repositories. | ||||||
|  | 	Repositories []string `json:"repositories,omitempty"` | ||||||
|  | 
 | ||||||
| 	// The permissions granted to the access token. | 	// The permissions granted to the access token. | ||||||
| 	// The permissions object includes the permission names and their access type. | 	// The permissions object includes the permission names and their access type. | ||||||
| 	Permissions *InstallationPermissions `json:"permissions,omitempty"` | 	Permissions *InstallationPermissions `json:"permissions,omitempty"` | ||||||
							
								
								
									
										48
									
								
								vendor/github.com/google/go-github/v39/github/apps_hooks.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								vendor/github.com/google/go-github/v39/github/apps_hooks.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | |||||||
|  | // Copyright 2021 The go-github AUTHORS. All rights reserved. | ||||||
|  | // | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | package github | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // GetHookConfig returns the webhook configuration for a GitHub App. | ||||||
|  | // The underlying transport must be authenticated as an app. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#get-a-webhook-configuration-for-an-app | ||||||
|  | func (s *AppsService) GetHookConfig(ctx context.Context) (*HookConfig, *Response, error) { | ||||||
|  | 	req, err := s.client.NewRequest("GET", "app/hook/config", nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	config := new(HookConfig) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &config) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return config, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // UpdateHookConfig updates the webhook configuration for a GitHub App. | ||||||
|  | // The underlying transport must be authenticated as an app. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps#update-a-webhook-configuration-for-an-app | ||||||
|  | func (s *AppsService) UpdateHookConfig(ctx context.Context, config *HookConfig) (*HookConfig, *Response, error) { | ||||||
|  | 	req, err := s.client.NewRequest("PATCH", "app/hook/config", config) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	c := new(HookConfig) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, c) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return c, resp, nil | ||||||
|  | } | ||||||
| @ -13,6 +13,7 @@ import ( | |||||||
| // AppConfig describes the configuration of a GitHub App. | // AppConfig describes the configuration of a GitHub App. | ||||||
| type AppConfig struct { | type AppConfig struct { | ||||||
| 	ID            *int64     `json:"id,omitempty"` | 	ID            *int64     `json:"id,omitempty"` | ||||||
|  | 	Slug          *string    `json:"slug,omitempty"` | ||||||
| 	NodeID        *string    `json:"node_id,omitempty"` | 	NodeID        *string    `json:"node_id,omitempty"` | ||||||
| 	Owner         *User      `json:"owner,omitempty"` | 	Owner         *User      `json:"owner,omitempty"` | ||||||
| 	Name          *string    `json:"name,omitempty"` | 	Name          *string    `json:"name,omitempty"` | ||||||
| @ -78,6 +78,8 @@ type CheckSuite struct { | |||||||
| 	AfterSHA     *string        `json:"after,omitempty"` | 	AfterSHA     *string        `json:"after,omitempty"` | ||||||
| 	Status       *string        `json:"status,omitempty"` | 	Status       *string        `json:"status,omitempty"` | ||||||
| 	Conclusion   *string        `json:"conclusion,omitempty"` | 	Conclusion   *string        `json:"conclusion,omitempty"` | ||||||
|  | 	CreatedAt    *Timestamp     `json:"created_at,omitempty"` | ||||||
|  | 	UpdatedAt    *Timestamp     `json:"updated_at,omitempty"` | ||||||
| 	App          *App           `json:"app,omitempty"` | 	App          *App           `json:"app,omitempty"` | ||||||
| 	Repository   *Repository    `json:"repository,omitempty"` | 	Repository   *Repository    `json:"repository,omitempty"` | ||||||
| 	PullRequests []*PullRequest `json:"pull_requests,omitempty"` | 	PullRequests []*PullRequest `json:"pull_requests,omitempty"` | ||||||
| @ -18,9 +18,45 @@ import ( | |||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/code-scanning/ | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/code-scanning/ | ||||||
| type CodeScanningService service | type CodeScanningService service | ||||||
| 
 | 
 | ||||||
|  | // Rule represents the complete details of GitHub Code Scanning alert type. | ||||||
|  | type Rule struct { | ||||||
|  | 	ID                    *string  `json:"id,omitempty"` | ||||||
|  | 	Severity              *string  `json:"severity,omitempty"` | ||||||
|  | 	Description           *string  `json:"description,omitempty"` | ||||||
|  | 	Name                  *string  `json:"name,omitempty"` | ||||||
|  | 	SecuritySeverityLevel *string  `json:"security_severity_level,omitempty"` | ||||||
|  | 	FullDescription       *string  `json:"full_description,omitempty"` | ||||||
|  | 	Tags                  []string `json:"tags,omitempty"` | ||||||
|  | 	Help                  *string  `json:"help,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Location represents the exact location of the GitHub Code Scanning Alert in the scanned project. | ||||||
|  | type Location struct { | ||||||
|  | 	Path        *string `json:"path,omitempty"` | ||||||
|  | 	StartLine   *int    `json:"start_line,omitempty"` | ||||||
|  | 	EndLine     *int    `json:"end_line,omitempty"` | ||||||
|  | 	StartColumn *int    `json:"start_column,omitempty"` | ||||||
|  | 	EndColumn   *int    `json:"end_column,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Message is a part of MostRecentInstance struct which provides the appropriate message when any action is performed on the analysis object. | ||||||
|  | type Message struct { | ||||||
|  | 	Text *string `json:"text,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // MostRecentInstance provides details of the most recent instance of this alert for the default branch or for the specified Git reference. | ||||||
|  | type MostRecentInstance struct { | ||||||
|  | 	Ref             *string   `json:"ref,omitempty"` | ||||||
|  | 	AnalysisKey     *string   `json:"analysis_key,omitempty"` | ||||||
|  | 	Environment     *string   `json:"environment,omitempty"` | ||||||
|  | 	State           *string   `json:"state,omitempty"` | ||||||
|  | 	CommitSHA       *string   `json:"commit_sha,omitempty"` | ||||||
|  | 	Message         *Message  `json:"message,omitempty"` | ||||||
|  | 	Location        *Location `json:"location,omitempty"` | ||||||
|  | 	Classifications []string  `json:"classifications,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Tool represents the tool used to generate a GitHub Code Scanning Alert. | // Tool represents the tool used to generate a GitHub Code Scanning Alert. | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/rest/reference/code-scanning#list-code-scanning-alerts-for-a-repository |  | ||||||
| type Tool struct { | type Tool struct { | ||||||
| 	Name    *string `json:"name,omitempty"` | 	Name    *string `json:"name,omitempty"` | ||||||
| 	GUID    *string `json:"guid,omitempty"` | 	GUID    *string `json:"guid,omitempty"` | ||||||
| @ -31,16 +67,22 @@ type Tool struct { | |||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/rest/reference/code-scanning#list-code-scanning-alerts-for-a-repository | // GitHub API docs: https://docs.github.com/en/rest/reference/code-scanning#list-code-scanning-alerts-for-a-repository | ||||||
| type Alert struct { | type Alert struct { | ||||||
| 	RuleID          *string    `json:"rule_id,omitempty"` | 	RuleID             *string             `json:"rule_id,omitempty"` | ||||||
| 	RuleSeverity    *string    `json:"rule_severity,omitempty"` | 	RuleSeverity       *string             `json:"rule_severity,omitempty"` | ||||||
| 	RuleDescription *string    `json:"rule_description,omitempty"` | 	RuleDescription    *string             `json:"rule_description,omitempty"` | ||||||
| 	Tool            *Tool      `json:"tool,omitempty"` | 	Rule               *Rule               `json:"rule,omitempty"` | ||||||
| 	CreatedAt       *Timestamp `json:"created_at,omitempty"` | 	Tool               *Tool               `json:"tool,omitempty"` | ||||||
| 	Open            *bool      `json:"open,omitempty"` | 	CreatedAt          *Timestamp          `json:"created_at,omitempty"` | ||||||
| 	ClosedBy        *User      `json:"closed_by,omitempty"` | 	State              *string             `json:"state,omitempty"` | ||||||
| 	ClosedAt        *Timestamp `json:"closed_at,omitempty"` | 	ClosedBy           *User               `json:"closed_by,omitempty"` | ||||||
| 	URL             *string    `json:"url,omitempty"` | 	ClosedAt           *Timestamp          `json:"closed_at,omitempty"` | ||||||
| 	HTMLURL         *string    `json:"html_url,omitempty"` | 	URL                *string             `json:"url,omitempty"` | ||||||
|  | 	HTMLURL            *string             `json:"html_url,omitempty"` | ||||||
|  | 	MostRecentInstance *MostRecentInstance `json:"most_recent_instance,omitempty"` | ||||||
|  | 	DismissedBy        *User               `json:"dismissed_by,omitempty"` | ||||||
|  | 	DismissedAt        *Timestamp          `json:"dismissed_at,omitempty"` | ||||||
|  | 	DismissedReason    *string             `json:"dismissed_reason,omitempty"` | ||||||
|  | 	InstancesURL       *string             `json:"instances_url,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ID returns the ID associated with an alert. It is the number at the end of the security alert's URL. | // ID returns the ID associated with an alert. It is the number at the end of the security alert's URL. | ||||||
| @ -73,6 +115,8 @@ type AlertListOptions struct { | |||||||
| 
 | 
 | ||||||
| 	// Return code scanning alerts for a specific branch reference. The ref must be formatted as heads/<branch name>. | 	// Return code scanning alerts for a specific branch reference. The ref must be formatted as heads/<branch name>. | ||||||
| 	Ref string `url:"ref,omitempty"` | 	Ref string `url:"ref,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	ListOptions | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ListAlertsForRepo lists code scanning alerts for a repository. | // ListAlertsForRepo lists code scanning alerts for a repository. | ||||||
| @ -8,7 +8,7 @@ Package github provides a client for using the GitHub API. | |||||||
| 
 | 
 | ||||||
| Usage: | Usage: | ||||||
| 
 | 
 | ||||||
| 	import "github.com/google/go-github/v37/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH) | 	import "github.com/google/go-github/v39/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH) | ||||||
| 	import "github.com/google/go-github/github"     // with go modules disabled | 	import "github.com/google/go-github/github"     // with go modules disabled | ||||||
| 
 | 
 | ||||||
| Construct a new GitHub client, then use the various services on the client to | Construct a new GitHub client, then use the various services on the client to | ||||||
| @ -73,6 +73,10 @@ BasicAuthTransport. | |||||||
| 
 | 
 | ||||||
| GitHub Apps authentication can be provided by the | GitHub Apps authentication can be provided by the | ||||||
| https://github.com/bradleyfalzon/ghinstallation package. | https://github.com/bradleyfalzon/ghinstallation package. | ||||||
|  | It supports both authentication as an installation, using an installation access token, | ||||||
|  | and as an app, using a JWT. | ||||||
|  | 
 | ||||||
|  | To authenticate as an installation: | ||||||
| 
 | 
 | ||||||
| 	import "github.com/bradleyfalzon/ghinstallation" | 	import "github.com/bradleyfalzon/ghinstallation" | ||||||
| 
 | 
 | ||||||
| @ -89,6 +93,23 @@ https://github.com/bradleyfalzon/ghinstallation package. | |||||||
| 		// Use client... | 		// Use client... | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | To authenticate as an app, using a JWT: | ||||||
|  | 
 | ||||||
|  | 	import "github.com/bradleyfalzon/ghinstallation" | ||||||
|  | 
 | ||||||
|  | 	func main() { | ||||||
|  | 		// Wrap the shared transport for use with the application ID 1. | ||||||
|  | 		atr, err := ghinstallation.NewAppsTransportKeyFromFile(http.DefaultTransport, 1, "2016-10-19.private-key.pem") | ||||||
|  | 		if err != nil { | ||||||
|  | 			// Handle error. | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Use app transport with client | ||||||
|  | 		client := github.NewClient(&http.Client{Transport: atr}) | ||||||
|  | 
 | ||||||
|  | 		// Use client... | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| Rate Limiting | Rate Limiting | ||||||
| 
 | 
 | ||||||
| GitHub imposes a rate limit on all API clients. Unauthenticated clients are | GitHub imposes a rate limit on all API clients. Unauthenticated clients are | ||||||
| @ -112,7 +133,7 @@ To detect an API rate limit error, you can check if its type is *github.RateLimi | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| Learn more about GitHub rate limiting at | Learn more about GitHub rate limiting at | ||||||
| https://docs.github.com/en/free-pro-team@latest/rest/reference/#rate-limiting. | https://docs.github.com/en/free-pro-team@latest/rest/overview/resources-in-the-rest-api#rate-limiting. | ||||||
| 
 | 
 | ||||||
| Accepted Status | Accepted Status | ||||||
| 
 | 
 | ||||||
| @ -138,7 +159,7 @@ instead designed to work with a caching http.Transport. We recommend using | |||||||
| https://github.com/gregjones/httpcache for that. | https://github.com/gregjones/httpcache for that. | ||||||
| 
 | 
 | ||||||
| Learn more about GitHub conditional requests at | Learn more about GitHub conditional requests at | ||||||
| https://docs.github.com/en/free-pro-team@latest/rest/reference/#conditional-requests. | https://docs.github.com/en/free-pro-team@latest/rest/overview/resources-in-the-rest-api#conditional-requests. | ||||||
| 
 | 
 | ||||||
| Creating and Updating Resources | Creating and Updating Resources | ||||||
| 
 | 
 | ||||||
| @ -30,6 +30,8 @@ func (e Event) String() string { | |||||||
| // a value of the corresponding struct type will be returned. | // a value of the corresponding struct type will be returned. | ||||||
| func (e *Event) ParsePayload() (payload interface{}, err error) { | func (e *Event) ParsePayload() (payload interface{}, err error) { | ||||||
| 	switch *e.Type { | 	switch *e.Type { | ||||||
|  | 	case "BranchProtectionRuleEvent": | ||||||
|  | 		payload = &BranchProtectionRuleEvent{} | ||||||
| 	case "CheckRunEvent": | 	case "CheckRunEvent": | ||||||
| 		payload = &CheckRunEvent{} | 		payload = &CheckRunEvent{} | ||||||
| 	case "CheckSuiteEvent": | 	case "CheckSuiteEvent": | ||||||
| @ -124,6 +126,8 @@ func (e *Event) ParsePayload() (payload interface{}, err error) { | |||||||
| 		payload = &WatchEvent{} | 		payload = &WatchEvent{} | ||||||
| 	case "WorkflowDispatchEvent": | 	case "WorkflowDispatchEvent": | ||||||
| 		payload = &WorkflowDispatchEvent{} | 		payload = &WorkflowDispatchEvent{} | ||||||
|  | 	case "WorkflowJobEvent": | ||||||
|  | 		payload = &WorkflowJobEvent{} | ||||||
| 	case "WorkflowRunEvent": | 	case "WorkflowRunEvent": | ||||||
| 		payload = &WorkflowRunEvent{} | 		payload = &WorkflowRunEvent{} | ||||||
| 	} | 	} | ||||||
| @ -15,6 +15,19 @@ type RequestedAction struct { | |||||||
| 	Identifier string `json:"identifier"` // The integrator reference of the action requested by the user. | 	Identifier string `json:"identifier"` // The integrator reference of the action requested by the user. | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // BranchProtectionRuleEvent triggered when a check suite is "created", "edited", or "deleted". | ||||||
|  | // The Webhook event name is "branch_protection_rule". | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#branch_protection_rule | ||||||
|  | type BranchProtectionRuleEvent struct { | ||||||
|  | 	Action  *string               `json:"action,omitempty"` | ||||||
|  | 	Rule    *BranchProtectionRule `json:"rule,omitempty"` | ||||||
|  | 	Changes *ProtectionChanges    `json:"changes,omitempty"` | ||||||
|  | 	Repo    *Repository           `json:"repository,omitempty"` | ||||||
|  | 	Org     *Organization         `json:"organization,omitempty"` | ||||||
|  | 	Sender  *User                 `json:"sender,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // CheckRunEvent is triggered when a check run is "created", "completed", or "rerequested". | // CheckRunEvent is triggered when a check run is "created", "completed", or "rerequested". | ||||||
| // The Webhook event name is "check_run". | // The Webhook event name is "check_run". | ||||||
| // | // | ||||||
| @ -130,6 +143,9 @@ type DeployKeyEvent struct { | |||||||
| 
 | 
 | ||||||
| 	// The deploy key resource. | 	// The deploy key resource. | ||||||
| 	Key *Key `json:"key,omitempty"` | 	Key *Key `json:"key,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeploymentEvent represents a deployment. | // DeploymentEvent represents a deployment. | ||||||
| @ -186,7 +202,8 @@ type GitHubAppAuthorizationEvent struct { | |||||||
| 	Action *string `json:"action,omitempty"` | 	Action *string `json:"action,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// The following fields are only populated by Webhook events. | 	// The following fields are only populated by Webhook events. | ||||||
| 	Sender *User `json:"sender,omitempty"` | 	Sender       *User         `json:"sender,omitempty"` | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Page represents a single Wiki page. | // Page represents a single Wiki page. | ||||||
| @ -367,6 +384,10 @@ type IssueCommentEvent struct { | |||||||
| 	Repo         *Repository   `json:"repository,omitempty"` | 	Repo         *Repository   `json:"repository,omitempty"` | ||||||
| 	Sender       *User         `json:"sender,omitempty"` | 	Sender       *User         `json:"sender,omitempty"` | ||||||
| 	Installation *Installation `json:"installation,omitempty"` | 	Installation *Installation `json:"installation,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following field is only present when the webhook is triggered on | ||||||
|  | 	// a repository belonging to an organization. | ||||||
|  | 	Organization *Organization `json:"organization,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // IssuesEvent is triggered when an issue is opened, edited, deleted, transferred, | // IssuesEvent is triggered when an issue is opened, edited, deleted, transferred, | ||||||
| @ -478,6 +499,9 @@ type MetaEvent struct { | |||||||
| 	// This will contain different keys based on the type of webhook it is: repository, | 	// This will contain different keys based on the type of webhook it is: repository, | ||||||
| 	// organization, business, app, or GitHub Marketplace. | 	// organization, business, app, or GitHub Marketplace. | ||||||
| 	Hook *Hook `json:"hook,omitempty"` | 	Hook *Hook `json:"hook,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted. | // MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted. | ||||||
| @ -551,6 +575,9 @@ type PackageEvent struct { | |||||||
| 	Repo    *Repository   `json:"repository,omitempty"` | 	Repo    *Repository   `json:"repository,omitempty"` | ||||||
| 	Org     *Organization `json:"organization,omitempty"` | 	Org     *Organization `json:"organization,omitempty"` | ||||||
| 	Sender  *User         `json:"sender,omitempty"` | 	Sender  *User         `json:"sender,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PageBuildEvent represents an attempted build of a GitHub Pages site, whether | // PageBuildEvent represents an attempted build of a GitHub Pages site, whether | ||||||
| @ -796,6 +823,10 @@ type PushEvent struct { | |||||||
| 	Pusher       *User                `json:"pusher,omitempty"` | 	Pusher       *User                `json:"pusher,omitempty"` | ||||||
| 	Sender       *User                `json:"sender,omitempty"` | 	Sender       *User                `json:"sender,omitempty"` | ||||||
| 	Installation *Installation        `json:"installation,omitempty"` | 	Installation *Installation        `json:"installation,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following field is only present when the webhook is triggered on | ||||||
|  | 	// a repository belonging to an organization. | ||||||
|  | 	Organization *Organization `json:"organization,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (p PushEvent) String() string { | func (p PushEvent) String() string { | ||||||
| @ -939,6 +970,9 @@ type RepositoryVulnerabilityAlertEvent struct { | |||||||
| 
 | 
 | ||||||
| 	//The repository of the vulnerable dependency. | 	//The repository of the vulnerable dependency. | ||||||
| 	Repository *Repository `json:"repository,omitempty"` | 	Repository *Repository `json:"repository,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // RepositoryVulnerabilityAlert represents a repository security alert. | // RepositoryVulnerabilityAlert represents a repository security alert. | ||||||
| @ -969,9 +1003,10 @@ type StarEvent struct { | |||||||
| 	StarredAt *Timestamp `json:"starred_at,omitempty"` | 	StarredAt *Timestamp `json:"starred_at,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// The following fields are only populated by Webhook events. | 	// The following fields are only populated by Webhook events. | ||||||
| 	Org    *Organization `json:"organization,omitempty"` | 	Org          *Organization `json:"organization,omitempty"` | ||||||
| 	Repo   *Repository   `json:"repository,omitempty"` | 	Repo         *Repository   `json:"repository,omitempty"` | ||||||
| 	Sender *User         `json:"sender,omitempty"` | 	Sender       *User         `json:"sender,omitempty"` | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // StatusEvent is triggered when the status of a Git commit changes. | // StatusEvent is triggered when the status of a Git commit changes. | ||||||
| @ -1049,6 +1084,9 @@ type UserEvent struct { | |||||||
| 	Action     *string     `json:"action,omitempty"` | 	Action     *string     `json:"action,omitempty"` | ||||||
| 	Enterprise *Enterprise `json:"enterprise,omitempty"` | 	Enterprise *Enterprise `json:"enterprise,omitempty"` | ||||||
| 	Sender     *User       `json:"sender,omitempty"` | 	Sender     *User       `json:"sender,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // WatchEvent is related to starring a repository, not watching. See this API | // WatchEvent is related to starring a repository, not watching. See this API | ||||||
| @ -1078,9 +1116,28 @@ type WorkflowDispatchEvent struct { | |||||||
| 	Workflow *string         `json:"workflow,omitempty"` | 	Workflow *string         `json:"workflow,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// The following fields are only populated by Webhook events. | 	// The following fields are only populated by Webhook events. | ||||||
| 	Repo   *Repository   `json:"repository,omitempty"` | 	Repo         *Repository   `json:"repository,omitempty"` | ||||||
| 	Org    *Organization `json:"organization,omitempty"` | 	Org          *Organization `json:"organization,omitempty"` | ||||||
| 	Sender *User         `json:"sender,omitempty"` | 	Sender       *User         `json:"sender,omitempty"` | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // WorkflowJobEvent is triggered when a job is queued, started or completed. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#workflow_job | ||||||
|  | type WorkflowJobEvent struct { | ||||||
|  | 	WorkflowJob *WorkflowJob `json:"workflow_job,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	Action *string `json:"action,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// The following fields are only populated by Webhook events. | ||||||
|  | 
 | ||||||
|  | 	// Org is not nil when the webhook is configured for an organization or the event | ||||||
|  | 	// occurs from activity in a repository owned by an organization. | ||||||
|  | 	Org          *Organization `json:"organization,omitempty"` | ||||||
|  | 	Repo         *Repository   `json:"repository,omitempty"` | ||||||
|  | 	Sender       *User         `json:"sender,omitempty"` | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // WorkflowRunEvent is triggered when a GitHub Actions workflow run is requested or completed. | // WorkflowRunEvent is triggered when a GitHub Actions workflow run is requested or completed. | ||||||
| @ -1092,7 +1149,8 @@ type WorkflowRunEvent struct { | |||||||
| 	WorkflowRun *WorkflowRun `json:"workflow_run,omitempty"` | 	WorkflowRun *WorkflowRun `json:"workflow_run,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// The following fields are only populated by Webhook events. | 	// The following fields are only populated by Webhook events. | ||||||
| 	Org    *Organization `json:"organization,omitempty"` | 	Org          *Organization `json:"organization,omitempty"` | ||||||
| 	Repo   *Repository   `json:"repository,omitempty"` | 	Repo         *Repository   `json:"repository,omitempty"` | ||||||
| 	Sender *User         `json:"sender,omitempty"` | 	Sender       *User         `json:"sender,omitempty"` | ||||||
|  | 	Installation *Installation `json:"installation,omitempty"` | ||||||
| } | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -37,6 +37,8 @@ const ( | |||||||
| 	headerRateReset     = "X-RateLimit-Reset" | 	headerRateReset     = "X-RateLimit-Reset" | ||||||
| 	headerOTP           = "X-GitHub-OTP" | 	headerOTP           = "X-GitHub-OTP" | ||||||
| 
 | 
 | ||||||
|  | 	headerTokenExpiration = "GitHub-Authentication-Token-Expiration" | ||||||
|  | 
 | ||||||
| 	mediaTypeV3                = "application/vnd.github.v3+json" | 	mediaTypeV3                = "application/vnd.github.v3+json" | ||||||
| 	defaultMediaType           = "application/octet-stream" | 	defaultMediaType           = "application/octet-stream" | ||||||
| 	mediaTypeV3SHA             = "application/vnd.github.v3.sha" | 	mediaTypeV3SHA             = "application/vnd.github.v3.sha" | ||||||
| @ -74,9 +76,6 @@ const ( | |||||||
| 	// https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/ | 	// https://developer.github.com/changes/2017-02-28-user-blocking-apis-and-webhook/ | ||||||
| 	mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json" | 	mediaTypeBlockUsersPreview = "application/vnd.github.giant-sentry-fist-preview+json" | ||||||
| 
 | 
 | ||||||
| 	// https://developer.github.com/changes/2017-02-09-community-health/ |  | ||||||
| 	mediaTypeRepositoryCommunityHealthMetricsPreview = "application/vnd.github.black-panther-preview+json" |  | ||||||
| 
 |  | ||||||
| 	// https://developer.github.com/changes/2017-05-23-coc-api/ | 	// https://developer.github.com/changes/2017-05-23-coc-api/ | ||||||
| 	mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json" | 	mediaTypeCodesOfConductPreview = "application/vnd.github.scarlet-witch-preview+json" | ||||||
| 
 | 
 | ||||||
| @ -179,6 +178,7 @@ type Client struct { | |||||||
| 	PullRequests   *PullRequestsService | 	PullRequests   *PullRequestsService | ||||||
| 	Reactions      *ReactionsService | 	Reactions      *ReactionsService | ||||||
| 	Repositories   *RepositoriesService | 	Repositories   *RepositoriesService | ||||||
|  | 	SCIM           *SCIMService | ||||||
| 	Search         *SearchService | 	Search         *SearchService | ||||||
| 	Teams          *TeamsService | 	Teams          *TeamsService | ||||||
| 	Users          *UsersService | 	Users          *UsersService | ||||||
| @ -188,6 +188,14 @@ type service struct { | |||||||
| 	client *Client | 	client *Client | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Client returns the http.Client used by this GitHub client. | ||||||
|  | func (c *Client) Client() *http.Client { | ||||||
|  | 	c.clientMu.Lock() | ||||||
|  | 	defer c.clientMu.Unlock() | ||||||
|  | 	clientCopy := *c.client | ||||||
|  | 	return &clientCopy | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ListOptions specifies the optional parameters to various List methods that | // ListOptions specifies the optional parameters to various List methods that | ||||||
| // support offset pagination. | // support offset pagination. | ||||||
| type ListOptions struct { | type ListOptions struct { | ||||||
| @ -212,6 +220,9 @@ type ListCursorOptions struct { | |||||||
| 
 | 
 | ||||||
| 	// A cursor, as given in the Link header. If specified, the query only searches for events before this cursor. | 	// A cursor, as given in the Link header. If specified, the query only searches for events before this cursor. | ||||||
| 	Before string `url:"before,omitempty"` | 	Before string `url:"before,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// A cursor, as given in the Link header. If specified, the query continues the search using this cursor. | ||||||
|  | 	Cursor string `url:"cursor,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UploadOptions specifies the parameters to methods that support uploads. | // UploadOptions specifies the parameters to methods that support uploads. | ||||||
| @ -295,6 +306,7 @@ func NewClient(httpClient *http.Client) *Client { | |||||||
| 	c.PullRequests = (*PullRequestsService)(&c.common) | 	c.PullRequests = (*PullRequestsService)(&c.common) | ||||||
| 	c.Reactions = (*ReactionsService)(&c.common) | 	c.Reactions = (*ReactionsService)(&c.common) | ||||||
| 	c.Repositories = (*RepositoriesService)(&c.common) | 	c.Repositories = (*RepositoriesService)(&c.common) | ||||||
|  | 	c.SCIM = (*SCIMService)(&c.common) | ||||||
| 	c.Search = (*SearchService)(&c.common) | 	c.Search = (*SearchService)(&c.common) | ||||||
| 	c.Teams = (*TeamsService)(&c.common) | 	c.Teams = (*TeamsService)(&c.common) | ||||||
| 	c.Users = (*UsersService)(&c.common) | 	c.Users = (*UsersService)(&c.common) | ||||||
| @ -445,9 +457,17 @@ type Response struct { | |||||||
| 	// calling the endpoint again. | 	// calling the endpoint again. | ||||||
| 	NextPageToken string | 	NextPageToken string | ||||||
| 
 | 
 | ||||||
|  | 	// For APIs that support cursor pagination, such as RepositoriesService.ListHookDeliveries, | ||||||
|  | 	// the following field will be populated to point to the next page. | ||||||
|  | 	// Set ListCursorOptions.Cursor to this value when calling the endpoint again. | ||||||
|  | 	Cursor string | ||||||
|  | 
 | ||||||
| 	// Explicitly specify the Rate type so Rate's String() receiver doesn't | 	// Explicitly specify the Rate type so Rate's String() receiver doesn't | ||||||
| 	// propagate to Response. | 	// propagate to Response. | ||||||
| 	Rate Rate | 	Rate Rate | ||||||
|  | 
 | ||||||
|  | 	// token's expiration date | ||||||
|  | 	TokenExpiration Timestamp | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // newResponse creates a new Response for the provided http.Response. | // newResponse creates a new Response for the provided http.Response. | ||||||
| @ -456,6 +476,7 @@ func newResponse(r *http.Response) *Response { | |||||||
| 	response := &Response{Response: r} | 	response := &Response{Response: r} | ||||||
| 	response.populatePageValues() | 	response.populatePageValues() | ||||||
| 	response.Rate = parseRate(r) | 	response.Rate = parseRate(r) | ||||||
|  | 	response.TokenExpiration = parseTokenExpiration(r) | ||||||
| 	return response | 	return response | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -481,7 +502,21 @@ func (r *Response) populatePageValues() { | |||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| 			page := url.Query().Get("page") | 
 | ||||||
|  | 			q := url.Query() | ||||||
|  | 
 | ||||||
|  | 			if cursor := q.Get("cursor"); cursor != "" { | ||||||
|  | 				for _, segment := range segments[1:] { | ||||||
|  | 					switch strings.TrimSpace(segment) { | ||||||
|  | 					case `rel="next"`: | ||||||
|  | 						r.Cursor = cursor | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			page := q.Get("page") | ||||||
| 			if page == "" { | 			if page == "" { | ||||||
| 				continue | 				continue | ||||||
| 			} | 			} | ||||||
| @ -499,7 +534,6 @@ func (r *Response) populatePageValues() { | |||||||
| 				case `rel="last"`: | 				case `rel="last"`: | ||||||
| 					r.LastPage, _ = strconv.Atoi(page) | 					r.LastPage, _ = strconv.Atoi(page) | ||||||
| 				} | 				} | ||||||
| 
 |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @ -522,6 +556,17 @@ func parseRate(r *http.Response) Rate { | |||||||
| 	return rate | 	return rate | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // parseTokenExpiration parses the TokenExpiration related headers. | ||||||
|  | func parseTokenExpiration(r *http.Response) Timestamp { | ||||||
|  | 	var exp Timestamp | ||||||
|  | 	if v := r.Header.Get(headerTokenExpiration); v != "" { | ||||||
|  | 		if t, err := time.Parse("2006-01-02 03:04:05 MST", v); err == nil { | ||||||
|  | 			exp = Timestamp{t.Local()} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return exp | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type requestContext uint8 | type requestContext uint8 | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| @ -663,10 +708,10 @@ func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rat | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // compareHttpResponse returns whether two http.Response objects are equal or not. | // compareHTTPResponse returns whether two http.Response objects are equal or not. | ||||||
| // Currently, only StatusCode is checked. This function is used when implementing the | // Currently, only StatusCode is checked. This function is used when implementing the | ||||||
| // Is(error) bool interface for the custom error types in this package. | // Is(error) bool interface for the custom error types in this package. | ||||||
| func compareHttpResponse(r1, r2 *http.Response) bool { | func compareHTTPResponse(r1, r2 *http.Response) bool { | ||||||
| 	if r1 == nil && r2 == nil { | 	if r1 == nil && r2 == nil { | ||||||
| 		return true | 		return true | ||||||
| 	} | 	} | ||||||
| @ -716,7 +761,7 @@ func (r *ErrorResponse) Is(target error) bool { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) || | 	if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) || | ||||||
| 		!compareHttpResponse(r.Response, v.Response) { | 		!compareHTTPResponse(r.Response, v.Response) { | ||||||
| 		return false | 		return false | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -782,7 +827,7 @@ func (r *RateLimitError) Is(target error) bool { | |||||||
| 
 | 
 | ||||||
| 	return r.Rate == v.Rate && | 	return r.Rate == v.Rate && | ||||||
| 		r.Message == v.Message && | 		r.Message == v.Message && | ||||||
| 		compareHttpResponse(r.Response, v.Response) | 		compareHTTPResponse(r.Response, v.Response) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // AcceptedError occurs when GitHub returns 202 Accepted response with an | // AcceptedError occurs when GitHub returns 202 Accepted response with an | ||||||
| @ -836,7 +881,7 @@ func (r *AbuseRateLimitError) Is(target error) bool { | |||||||
| 
 | 
 | ||||||
| 	return r.Message == v.Message && | 	return r.Message == v.Message && | ||||||
| 		r.RetryAfter == v.RetryAfter && | 		r.RetryAfter == v.RetryAfter && | ||||||
| 		compareHttpResponse(r.Response, v.Response) | 		compareHTTPResponse(r.Response, v.Response) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // sanitizeURL redacts the client_secret parameter from the URL which may be | // sanitizeURL redacts the client_secret parameter from the URL which may be | ||||||
| @ -18,6 +18,7 @@ import ( | |||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"hash" | 	"hash" | ||||||
|  | 	"io" | ||||||
| 	"io/ioutil" | 	"io/ioutil" | ||||||
| 	"mime" | 	"mime" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| @ -31,19 +32,20 @@ const ( | |||||||
| 	// sha256Prefix and sha512Prefix are provided for future compatibility. | 	// sha256Prefix and sha512Prefix are provided for future compatibility. | ||||||
| 	sha256Prefix = "sha256" | 	sha256Prefix = "sha256" | ||||||
| 	sha512Prefix = "sha512" | 	sha512Prefix = "sha512" | ||||||
| 	// sha1SignatureHeader is the GitHub header key used to pass the HMAC-SHA1 hexdigest. | 	// SHA1SignatureHeader is the GitHub header key used to pass the HMAC-SHA1 hexdigest. | ||||||
| 	sha1SignatureHeader = "X-Hub-Signature" | 	SHA1SignatureHeader = "X-Hub-Signature" | ||||||
| 	// sha256SignatureHeader is the GitHub header key used to pass the HMAC-SHA256 hexdigest. | 	// SHA256SignatureHeader is the GitHub header key used to pass the HMAC-SHA256 hexdigest. | ||||||
| 	sha256SignatureHeader = "X-Hub-Signature-256" | 	SHA256SignatureHeader = "X-Hub-Signature-256" | ||||||
| 	// eventTypeHeader is the GitHub header key used to pass the event type. | 	// EventTypeHeader is the GitHub header key used to pass the event type. | ||||||
| 	eventTypeHeader = "X-Github-Event" | 	EventTypeHeader = "X-Github-Event" | ||||||
| 	// deliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event. | 	// DeliveryIDHeader is the GitHub header key used to pass the unique ID for the webhook event. | ||||||
| 	deliveryIDHeader = "X-Github-Delivery" | 	DeliveryIDHeader = "X-Github-Delivery" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	// eventTypeMapping maps webhooks types to their corresponding go-github struct types. | 	// eventTypeMapping maps webhooks types to their corresponding go-github struct types. | ||||||
| 	eventTypeMapping = map[string]string{ | 	eventTypeMapping = map[string]string{ | ||||||
|  | 		"branch_protection_rule":         "BranchProtectionRuleEvent", | ||||||
| 		"check_run":                      "CheckRunEvent", | 		"check_run":                      "CheckRunEvent", | ||||||
| 		"check_suite":                    "CheckSuiteEvent", | 		"check_suite":                    "CheckSuiteEvent", | ||||||
| 		"commit_comment":                 "CommitCommentEvent", | 		"commit_comment":                 "CommitCommentEvent", | ||||||
| @ -91,6 +93,7 @@ var ( | |||||||
| 		"user":                           "UserEvent", | 		"user":                           "UserEvent", | ||||||
| 		"watch":                          "WatchEvent", | 		"watch":                          "WatchEvent", | ||||||
| 		"workflow_dispatch":              "WorkflowDispatchEvent", | 		"workflow_dispatch":              "WorkflowDispatchEvent", | ||||||
|  | 		"workflow_job":                   "WorkflowJobEvent", | ||||||
| 		"workflow_run":                   "WorkflowRunEvent", | 		"workflow_run":                   "WorkflowRunEvent", | ||||||
| 	} | 	} | ||||||
| ) | ) | ||||||
| @ -139,6 +142,70 @@ func messageMAC(signature string) ([]byte, func() hash.Hash, error) { | |||||||
| 	return buf, hashFunc, nil | 	return buf, hashFunc, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // ValidatePayload validates an incoming GitHub Webhook event request body | ||||||
|  | // and returns the (JSON) payload. | ||||||
|  | // The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded". | ||||||
|  | // If the Content-Type is neither then an error is returned. | ||||||
|  | // secretToken is the GitHub Webhook secret token. | ||||||
|  | // If your webhook does not contain a secret token, you can pass nil or an empty slice. | ||||||
|  | // This is intended for local development purposes only and all webhooks should ideally set up a secret token. | ||||||
|  | // | ||||||
|  | // Example usage: | ||||||
|  | // | ||||||
|  | //     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||||
|  | //       // read signature from request | ||||||
|  | //       signature := "" | ||||||
|  | //       payload, err := github.ValidatePayloadFromBody(r.Header.Get("Content-Type"), r.Body, signature, s.webhookSecretKey) | ||||||
|  | //       if err != nil { ... } | ||||||
|  | //       // Process payload... | ||||||
|  | //     } | ||||||
|  | func ValidatePayloadFromBody(contentType string, readable io.Reader, signature string, secretToken []byte) (payload []byte, err error) { | ||||||
|  | 	var body []byte // Raw body that GitHub uses to calculate the signature. | ||||||
|  | 
 | ||||||
|  | 	switch contentType { | ||||||
|  | 	case "application/json": | ||||||
|  | 		var err error | ||||||
|  | 		if body, err = ioutil.ReadAll(readable); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// If the content type is application/json, | ||||||
|  | 		// the JSON payload is just the original body. | ||||||
|  | 		payload = body | ||||||
|  | 
 | ||||||
|  | 	case "application/x-www-form-urlencoded": | ||||||
|  | 		// payloadFormParam is the name of the form parameter that the JSON payload | ||||||
|  | 		// will be in if a webhook has its content type set to application/x-www-form-urlencoded. | ||||||
|  | 		const payloadFormParam = "payload" | ||||||
|  | 
 | ||||||
|  | 		var err error | ||||||
|  | 		if body, err = ioutil.ReadAll(readable); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// If the content type is application/x-www-form-urlencoded, | ||||||
|  | 		// the JSON payload will be under the "payload" form param. | ||||||
|  | 		form, err := url.ParseQuery(string(body)) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		payload = []byte(form.Get(payloadFormParam)) | ||||||
|  | 
 | ||||||
|  | 	default: | ||||||
|  | 		return nil, fmt.Errorf("webhook request has unsupported Content-Type %q", contentType) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Only validate the signature if a secret token exists. This is intended for | ||||||
|  | 	// local development only and all webhooks should ideally set up a secret token. | ||||||
|  | 	if len(secretToken) > 0 { | ||||||
|  | 		if err := ValidateSignature(signature, body, secretToken); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return payload, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ValidatePayload validates an incoming GitHub Webhook event request | // ValidatePayload validates an incoming GitHub Webhook event request | ||||||
| // and returns the (JSON) payload. | // and returns the (JSON) payload. | ||||||
| // The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded". | // The Content-Type header of the payload can be "application/json" or "application/x-www-form-urlencoded". | ||||||
| @ -156,61 +223,17 @@ func messageMAC(signature string) ([]byte, func() hash.Hash, error) { | |||||||
| //     } | //     } | ||||||
| // | // | ||||||
| func ValidatePayload(r *http.Request, secretToken []byte) (payload []byte, err error) { | func ValidatePayload(r *http.Request, secretToken []byte) (payload []byte, err error) { | ||||||
| 	var body []byte // Raw body that GitHub uses to calculate the signature. | 	signature := r.Header.Get(SHA256SignatureHeader) | ||||||
|  | 	if signature == "" { | ||||||
|  | 		signature = r.Header.Get(SHA1SignatureHeader) | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	ct := r.Header.Get("Content-Type") | 	contentType, _, err := mime.ParseMediaType(r.Header.Get("Content-Type")) | ||||||
| 
 |  | ||||||
| 	mediatype, _, err := mime.ParseMediaType(ct) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		mediatype = "" | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	switch mediatype { | 	return ValidatePayloadFromBody(contentType, r.Body, signature, secretToken) | ||||||
| 	case "application/json": |  | ||||||
| 		var err error |  | ||||||
| 		if body, err = ioutil.ReadAll(r.Body); err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// If the content type is application/json, |  | ||||||
| 		// the JSON payload is just the original body. |  | ||||||
| 		payload = body |  | ||||||
| 
 |  | ||||||
| 	case "application/x-www-form-urlencoded": |  | ||||||
| 		// payloadFormParam is the name of the form parameter that the JSON payload |  | ||||||
| 		// will be in if a webhook has its content type set to application/x-www-form-urlencoded. |  | ||||||
| 		const payloadFormParam = "payload" |  | ||||||
| 
 |  | ||||||
| 		var err error |  | ||||||
| 		if body, err = ioutil.ReadAll(r.Body); err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// If the content type is application/x-www-form-urlencoded, |  | ||||||
| 		// the JSON payload will be under the "payload" form param. |  | ||||||
| 		form, err := url.ParseQuery(string(body)) |  | ||||||
| 		if err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 		payload = []byte(form.Get(payloadFormParam)) |  | ||||||
| 
 |  | ||||||
| 	default: |  | ||||||
| 		return nil, fmt.Errorf("Webhook request has unsupported Content-Type %q", ct) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// Only validate the signature if a secret token exists. This is intended for |  | ||||||
| 	// local development only and all webhooks should ideally set up a secret token. |  | ||||||
| 	if len(secretToken) > 0 { |  | ||||||
| 		sig := r.Header.Get(sha256SignatureHeader) |  | ||||||
| 		if sig == "" { |  | ||||||
| 			sig = r.Header.Get(sha1SignatureHeader) |  | ||||||
| 		} |  | ||||||
| 		if err := ValidateSignature(sig, body, secretToken); err != nil { |  | ||||||
| 			return nil, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return payload, nil |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ValidateSignature validates the signature for the given payload. | // ValidateSignature validates the signature for the given payload. | ||||||
| @ -234,14 +257,14 @@ func ValidateSignature(signature string, payload, secretToken []byte) error { | |||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers | ||||||
| func WebHookType(r *http.Request) string { | func WebHookType(r *http.Request) string { | ||||||
| 	return r.Header.Get(eventTypeHeader) | 	return r.Header.Get(EventTypeHeader) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DeliveryID returns the unique delivery ID of webhook request r. | // DeliveryID returns the unique delivery ID of webhook request r. | ||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/hooks/#webhook-headers | ||||||
| func DeliveryID(r *http.Request) string { | func DeliveryID(r *http.Request) string { | ||||||
| 	return r.Header.Get(deliveryIDHeader) | 	return r.Header.Get(DeliveryIDHeader) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ParseWebHook parses the event payload. For recognized event types, a | // ParseWebHook parses the event payload. For recognized event types, a | ||||||
| @ -24,6 +24,9 @@ type HookConfig struct { | |||||||
| 	ContentType *string `json:"content_type,omitempty"` | 	ContentType *string `json:"content_type,omitempty"` | ||||||
| 	InsecureSSL *string `json:"insecure_ssl,omitempty"` | 	InsecureSSL *string `json:"insecure_ssl,omitempty"` | ||||||
| 	URL         *string `json:"url,omitempty"` | 	URL         *string `json:"url,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// Secret is returned obfuscated by GitHub, but it can be set for outgoing requests. | ||||||
|  | 	Secret *string `json:"secret,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // AuditEntry describes the fields that may be represented by various audit-log "action" entries. | // AuditEntry describes the fields that may be represented by various audit-log "action" entries. | ||||||
							
								
								
									
										73
									
								
								vendor/github.com/google/go-github/v39/github/orgs_hooks_deliveries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								vendor/github.com/google/go-github/v39/github/orgs_hooks_deliveries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | |||||||
|  | // Copyright 2021 The go-github AUTHORS. All rights reserved. | ||||||
|  | // | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | package github | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // ListHookDeliveries lists webhook deliveries for a webhook configured in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/orgs#list-deliveries-for-an-organization-webhook | ||||||
|  | func (s *OrganizationsService) ListHookDeliveries(ctx context.Context, org string, id int64, opts *ListCursorOptions) ([]*HookDelivery, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/hooks/%v/deliveries", org, id) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	deliveries := []*HookDelivery{} | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &deliveries) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return deliveries, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetHookDelivery returns a delivery for a webhook configured in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/orgs#get-a-webhook-delivery-for-an-organization-webhook | ||||||
|  | func (s *OrganizationsService) GetHookDelivery(ctx context.Context, owner string, hookID, deliveryID int64) (*HookDelivery, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/hooks/%v/deliveries/%v", owner, hookID, deliveryID) | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	h := new(HookDelivery) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, h) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return h, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // RedeliverHookDelivery redelivers a delivery for a webhook configured in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/orgs#redeliver-a-delivery-for-an-organization-webhook | ||||||
|  | func (s *OrganizationsService) RedeliverHookDelivery(ctx context.Context, owner string, hookID, deliveryID int64) (*HookDelivery, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/hooks/%v/deliveries/%v/attempts", owner, hookID, deliveryID) | ||||||
|  | 	req, err := s.client.NewRequest("POST", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	h := new(HookDelivery) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, h) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return h, resp, nil | ||||||
|  | } | ||||||
							
								
								
									
										149
									
								
								vendor/github.com/google/go-github/v39/github/orgs_packages.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								vendor/github.com/google/go-github/v39/github/orgs_packages.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,149 @@ | |||||||
|  | // Copyright 2021 The go-github AUTHORS. All rights reserved. | ||||||
|  | // | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | package github | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // List the packages for an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#list-packages-for-an-organization | ||||||
|  | func (s *OrganizationsService) ListPackages(ctx context.Context, org string, opts *PackageListOptions) ([]*Package, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages", org) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var packages []*Package | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &packages) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return packages, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Get a package by name from an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-for-an-organization | ||||||
|  | func (s *OrganizationsService) GetPackage(ctx context.Context, org, packageType, packageName string) (*Package, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v", org, packageType, packageName) | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var pack *Package | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &pack) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return pack, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Delete a package from an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-a-package-for-an-organization | ||||||
|  | func (s *OrganizationsService) DeletePackage(ctx context.Context, org, packageType, packageName string) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v", org, packageType, packageName) | ||||||
|  | 	req, err := s.client.NewRequest("DELETE", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return s.client.Do(ctx, req, nil) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Restore a package to an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-a-package-for-an-organization | ||||||
|  | func (s *OrganizationsService) RestorePackage(ctx context.Context, org, packageType, packageName string) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v/restore", org, packageType, packageName) | ||||||
|  | 	req, err := s.client.NewRequest("POST", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return s.client.Do(ctx, req, nil) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Get all versions of a package in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-all-package-versions-for-a-package-owned-by-an-organization | ||||||
|  | func (s *OrganizationsService) PackageGetAllVersions(ctx context.Context, org, packageType, packageName string, opts *PackageListOptions) ([]*PackageVersion, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions", org, packageType, packageName) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var versions []*PackageVersion | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &versions) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return versions, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Get a specific version of a package in an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#get-a-package-version-for-an-organization | ||||||
|  | func (s *OrganizationsService) PackageGetVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*PackageVersion, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v", org, packageType, packageName, packageVersionID) | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var version *PackageVersion | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &version) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return version, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Delete a package version from an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#delete-package-version-for-an-organization | ||||||
|  | func (s *OrganizationsService) PackageDeleteVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v", org, packageType, packageName, packageVersionID) | ||||||
|  | 	req, err := s.client.NewRequest("DELETE", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return s.client.Do(ctx, req, nil) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Restore a package version to an organization. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/packages#restore-package-version-for-an-organization | ||||||
|  | func (s *OrganizationsService) PackageRestoreVersion(ctx context.Context, org, packageType, packageName string, packageVersionID int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("orgs/%v/packages/%v/%v/versions/%v/restore", org, packageType, packageName, packageVersionID) | ||||||
|  | 	req, err := s.client.NewRequest("POST", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return s.client.Do(ctx, req, nil) | ||||||
|  | } | ||||||
| @ -16,6 +16,10 @@ type Package struct { | |||||||
| 	Owner          *User            `json:"owner,omitempty"` | 	Owner          *User            `json:"owner,omitempty"` | ||||||
| 	PackageVersion *PackageVersion  `json:"package_version,omitempty"` | 	PackageVersion *PackageVersion  `json:"package_version,omitempty"` | ||||||
| 	Registry       *PackageRegistry `json:"registry,omitempty"` | 	Registry       *PackageRegistry `json:"registry,omitempty"` | ||||||
|  | 	URL            *string          `json:"url,omitempty"` | ||||||
|  | 	VersionCount   *int64           `json:"version_count,omitempty"` | ||||||
|  | 	Visibility     *string          `json:"visibility,omitempty"` | ||||||
|  | 	Repository     *Repository      `json:"repository,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (p Package) String() string { | func (p Package) String() string { | ||||||
| @ -24,24 +28,28 @@ func (p Package) String() string { | |||||||
| 
 | 
 | ||||||
| // PackageVersion represents a GitHub package version. | // PackageVersion represents a GitHub package version. | ||||||
| type PackageVersion struct { | type PackageVersion struct { | ||||||
| 	ID                  *int64          `json:"id,omitempty"` | 	ID                  *int64           `json:"id,omitempty"` | ||||||
| 	Version             *string         `json:"version,omitempty"` | 	Version             *string          `json:"version,omitempty"` | ||||||
| 	Summary             *string         `json:"summary,omitempty"` | 	Summary             *string          `json:"summary,omitempty"` | ||||||
| 	Body                *string         `json:"body,omitempty"` | 	Body                *string          `json:"body,omitempty"` | ||||||
| 	BodyHTML            *string         `json:"body_html,omitempty"` | 	BodyHTML            *string          `json:"body_html,omitempty"` | ||||||
| 	Release             *PackageRelease `json:"release,omitempty"` | 	Release             *PackageRelease  `json:"release,omitempty"` | ||||||
| 	Manifest            *string         `json:"manifest,omitempty"` | 	Manifest            *string          `json:"manifest,omitempty"` | ||||||
| 	HTMLURL             *string         `json:"html_url,omitempty"` | 	HTMLURL             *string          `json:"html_url,omitempty"` | ||||||
| 	TagName             *string         `json:"tag_name,omitempty"` | 	TagName             *string          `json:"tag_name,omitempty"` | ||||||
| 	TargetCommitish     *string         `json:"target_commitish,omitempty"` | 	TargetCommitish     *string          `json:"target_commitish,omitempty"` | ||||||
| 	TargetOID           *string         `json:"target_oid,omitempty"` | 	TargetOID           *string          `json:"target_oid,omitempty"` | ||||||
| 	Draft               *bool           `json:"draft,omitempty"` | 	Draft               *bool            `json:"draft,omitempty"` | ||||||
| 	Prerelease          *bool           `json:"prerelease,omitempty"` | 	Prerelease          *bool            `json:"prerelease,omitempty"` | ||||||
| 	CreatedAt           *Timestamp      `json:"created_at,omitempty"` | 	CreatedAt           *Timestamp       `json:"created_at,omitempty"` | ||||||
| 	UpdatedAt           *Timestamp      `json:"updated_at,omitempty"` | 	UpdatedAt           *Timestamp       `json:"updated_at,omitempty"` | ||||||
| 	PackageFiles        []*PackageFile  `json:"package_files,omitempty"` | 	PackageFiles        []*PackageFile   `json:"package_files,omitempty"` | ||||||
| 	Author              *User           `json:"author,omitempty"` | 	Author              *User            `json:"author,omitempty"` | ||||||
| 	InstallationCommand *string         `json:"installation_command,omitempty"` | 	InstallationCommand *string          `json:"installation_command,omitempty"` | ||||||
|  | 	Metadata            *PackageMetadata `json:"metadata,omitempty"` | ||||||
|  | 	PackageHTMLURL      *string          `json:"package_html_url,omitempty"` | ||||||
|  | 	Name                *string          `json:"name,omitempty"` | ||||||
|  | 	URL                 *string          `json:"url,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (pv PackageVersion) String() string { | func (pv PackageVersion) String() string { | ||||||
| @ -99,3 +107,37 @@ type PackageRegistry struct { | |||||||
| func (r PackageRegistry) String() string { | func (r PackageRegistry) String() string { | ||||||
| 	return Stringify(r) | 	return Stringify(r) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // PackageListOptions represents the optional list options for a package. | ||||||
|  | type PackageListOptions struct { | ||||||
|  | 	// Visibility of packages "public", "internal" or "private". | ||||||
|  | 	Visibility *string `url:"visibility,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// PackageType represents the type of package. | ||||||
|  | 	// It can be one of "npm", "maven", "rubygems", "nuget", "docker", or "container". | ||||||
|  | 	PackageType *string `url:"package_type,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	// State of package either "active" or "deleted". | ||||||
|  | 	State *string `url:"state,omitempty"` | ||||||
|  | 
 | ||||||
|  | 	ListOptions | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // PackageMetadata represents metadata from a package. | ||||||
|  | type PackageMetadata struct { | ||||||
|  | 	PackageType *string                   `json:"package_type,omitempty"` | ||||||
|  | 	Container   *PackageContainerMetadata `json:"container,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (r PackageMetadata) String() string { | ||||||
|  | 	return Stringify(r) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // PackageContainerMetadata represents container metadata for docker container packages. | ||||||
|  | type PackageContainerMetadata struct { | ||||||
|  | 	Tags []string `json:"tags,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (r PackageContainerMetadata) String() string { | ||||||
|  | 	return Stringify(r) | ||||||
|  | } | ||||||
| @ -125,10 +125,6 @@ func (s *PullRequestsService) ListReviews(ctx context.Context, owner, repo strin | |||||||
| 
 | 
 | ||||||
| // GetReview fetches the specified pull request review. | // GetReview fetches the specified pull request review. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-for-a-pull-request | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#get-a-review-for-a-pull-request | ||||||
| func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { | func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | ||||||
| @ -149,10 +145,6 @@ func (s *PullRequestsService) GetReview(ctx context.Context, owner, repo string, | |||||||
| 
 | 
 | ||||||
| // DeletePendingReview deletes the specified pull request pending review. | // DeletePendingReview deletes the specified pull request pending review. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-pending-review-for-a-pull-request | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#delete-a-pending-review-for-a-pull-request | ||||||
| func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { | func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, repo string, number int, reviewID int64) (*PullRequestReview, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d", owner, repo, number, reviewID) | ||||||
| @ -173,10 +165,6 @@ func (s *PullRequestsService) DeletePendingReview(ctx context.Context, owner, re | |||||||
| 
 | 
 | ||||||
| // ListReviewComments lists all the comments for the specified review. | // ListReviewComments lists all the comments for the specified review. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-comments-for-a-pull-request-review | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#list-comments-for-a-pull-request-review | ||||||
| func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) { | func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, repo string, number int, reviewID int64, opts *ListOptions) ([]*PullRequestComment, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID) | 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/comments", owner, repo, number, reviewID) | ||||||
| @ -201,10 +189,6 @@ func (s *PullRequestsService) ListReviewComments(ctx context.Context, owner, rep | |||||||
| 
 | 
 | ||||||
| // CreateReview creates a new review on the specified pull request. | // CreateReview creates a new review on the specified pull request. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-for-a-pull-request | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#create-a-review-for-a-pull-request | ||||||
| // | // | ||||||
| // In order to use multi-line comments, you must use the "comfort fade" preview. | // In order to use multi-line comments, you must use the "comfort fade" preview. | ||||||
| @ -289,10 +273,6 @@ func (s *PullRequestsService) UpdateReview(ctx context.Context, owner, repo stri | |||||||
| 
 | 
 | ||||||
| // SubmitReview submits a specified review on the specified pull request. | // SubmitReview submits a specified review on the specified pull request. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#submit-a-review-for-a-pull-request | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#submit-a-review-for-a-pull-request | ||||||
| func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { | func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewRequest) (*PullRequestReview, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID) | 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/events", owner, repo, number, reviewID) | ||||||
| @ -313,10 +293,6 @@ func (s *PullRequestsService) SubmitReview(ctx context.Context, owner, repo stri | |||||||
| 
 | 
 | ||||||
| // DismissReview dismisses a specified review on the specified pull request. | // DismissReview dismisses a specified review on the specified pull request. | ||||||
| // | // | ||||||
| // TODO: Follow up with GitHub support about an issue with this method's |  | ||||||
| // returned error format and remove this comment once it's fixed. |  | ||||||
| // Read more about it here - https://github.com/google/go-github/issues/540 |  | ||||||
| // |  | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#dismiss-a-review-for-a-pull-request | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/pulls/#dismiss-a-review-for-a-pull-request | ||||||
| func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) { | func (s *PullRequestsService) DismissReview(ctx context.Context, owner, repo string, number int, reviewID int64, review *PullRequestReviewDismissalRequest) (*PullRequestReview, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID) | 	u := fmt.Sprintf("repos/%v/%v/pulls/%d/reviews/%d/dismissals", owner, repo, number, reviewID) | ||||||
| @ -60,6 +60,7 @@ type Repository struct { | |||||||
| 	AllowRebaseMerge    *bool           `json:"allow_rebase_merge,omitempty"` | 	AllowRebaseMerge    *bool           `json:"allow_rebase_merge,omitempty"` | ||||||
| 	AllowSquashMerge    *bool           `json:"allow_squash_merge,omitempty"` | 	AllowSquashMerge    *bool           `json:"allow_squash_merge,omitempty"` | ||||||
| 	AllowMergeCommit    *bool           `json:"allow_merge_commit,omitempty"` | 	AllowMergeCommit    *bool           `json:"allow_merge_commit,omitempty"` | ||||||
|  | 	AllowAutoMerge      *bool           `json:"allow_auto_merge,omitempty"` | ||||||
| 	DeleteBranchOnMerge *bool           `json:"delete_branch_on_merge,omitempty"` | 	DeleteBranchOnMerge *bool           `json:"delete_branch_on_merge,omitempty"` | ||||||
| 	Topics              []string        `json:"topics,omitempty"` | 	Topics              []string        `json:"topics,omitempty"` | ||||||
| 	Archived            *bool           `json:"archived,omitempty"` | 	Archived            *bool           `json:"archived,omitempty"` | ||||||
| @ -320,6 +321,7 @@ type createRepoRequest struct { | |||||||
| 	AllowSquashMerge    *bool   `json:"allow_squash_merge,omitempty"` | 	AllowSquashMerge    *bool   `json:"allow_squash_merge,omitempty"` | ||||||
| 	AllowMergeCommit    *bool   `json:"allow_merge_commit,omitempty"` | 	AllowMergeCommit    *bool   `json:"allow_merge_commit,omitempty"` | ||||||
| 	AllowRebaseMerge    *bool   `json:"allow_rebase_merge,omitempty"` | 	AllowRebaseMerge    *bool   `json:"allow_rebase_merge,omitempty"` | ||||||
|  | 	AllowAutoMerge      *bool   `json:"allow_auto_merge,omitempty"` | ||||||
| 	DeleteBranchOnMerge *bool   `json:"delete_branch_on_merge,omitempty"` | 	DeleteBranchOnMerge *bool   `json:"delete_branch_on_merge,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -362,6 +364,7 @@ func (s *RepositoriesService) Create(ctx context.Context, org string, repo *Repo | |||||||
| 		AllowSquashMerge:    repo.AllowSquashMerge, | 		AllowSquashMerge:    repo.AllowSquashMerge, | ||||||
| 		AllowMergeCommit:    repo.AllowMergeCommit, | 		AllowMergeCommit:    repo.AllowMergeCommit, | ||||||
| 		AllowRebaseMerge:    repo.AllowRebaseMerge, | 		AllowRebaseMerge:    repo.AllowRebaseMerge, | ||||||
|  | 		AllowAutoMerge:      repo.AllowAutoMerge, | ||||||
| 		DeleteBranchOnMerge: repo.DeleteBranchOnMerge, | 		DeleteBranchOnMerge: repo.DeleteBranchOnMerge, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -764,6 +767,50 @@ type Protection struct { | |||||||
| 	RequiredConversationResolution *RequiredConversationResolution `json:"required_conversation_resolution"` | 	RequiredConversationResolution *RequiredConversationResolution `json:"required_conversation_resolution"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // BranchProtectionRule represents the rule applied to a repositories branch. | ||||||
|  | type BranchProtectionRule struct { | ||||||
|  | 	ID                                       *int64     `json:"id,omitempty"` | ||||||
|  | 	RepositoryID                             *int64     `json:"repository_id,omitempty"` | ||||||
|  | 	Name                                     *string    `json:"name,omitempty"` | ||||||
|  | 	CreatedAt                                *Timestamp `json:"created_at,omitempty"` | ||||||
|  | 	UpdatedAt                                *Timestamp `json:"updated_at,omitempty"` | ||||||
|  | 	PullRequestReviewsEnforcementLevel       *string    `json:"pull_request_reviews_enforcement_level,omitempty"` | ||||||
|  | 	RequiredApprovingReviewCount             *int       `json:"required_approving_review_count,omitempty"` | ||||||
|  | 	DismissStaleReviewsOnPush                *bool      `json:"dismiss_stale_reviews_on_push,omitempty"` | ||||||
|  | 	AuthorizedDismissalActorsOnly            *bool      `json:"authorized_dismissal_actors_only,omitempty"` | ||||||
|  | 	IgnoreApprovalsFromContributors          *bool      `json:"ignore_approvals_from_contributors,omitempty"` | ||||||
|  | 	RequireCodeOwnerReview                   *bool      `json:"require_code_owner_review,omitempty"` | ||||||
|  | 	RequiredStatusChecks                     []string   `json:"required_status_checks,omitempty"` | ||||||
|  | 	RequiredStatusChecksEnforcementLevel     *string    `json:"required_status_checks_enforcement_level,omitempty"` | ||||||
|  | 	StrictRequiredStatusChecksPolicy         *bool      `json:"strict_required_status_checks_policy,omitempty"` | ||||||
|  | 	SignatureRequirementEnforcementLevel     *string    `json:"signature_requirement_enforcement_level,omitempty"` | ||||||
|  | 	LinearHistoryRequirementEnforcementLevel *string    `json:"linear_history_requirement_enforcement_level,omitempty"` | ||||||
|  | 	AdminEnforced                            *bool      `json:"admin_enforced,omitempty"` | ||||||
|  | 	AllowForcePushesEnforcementLevel         *string    `json:"allow_force_pushes_enforcement_level,omitempty"` | ||||||
|  | 	AllowDeletionsEnforcementLevel           *string    `json:"allow_deletions_enforcement_level,omitempty"` | ||||||
|  | 	MergeQueueEnforcementLevel               *string    `json:"merge_queue_enforcement_level,omitempty"` | ||||||
|  | 	RequiredDeploymentsEnforcementLevel      *string    `json:"required_deployments_enforcement_level,omitempty"` | ||||||
|  | 	RequiredConversationResolutionLevel      *string    `json:"required_conversation_resolution_level,omitempty"` | ||||||
|  | 	AuthorizedActorsOnly                     *bool      `json:"authorized_actors_only,omitempty"` | ||||||
|  | 	AuthorizedActorNames                     []string   `json:"authorized_actor_names,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ProtectionChanges represents the changes to the rule if the BranchProtection was edited. | ||||||
|  | type ProtectionChanges struct { | ||||||
|  | 	AuthorizedActorsOnly *AuthorizedActorsOnly `json:"authorized_actors_only,omitempty"` | ||||||
|  | 	AuthorizedActorNames *AuthorizedActorNames `json:"authorized_actor_names,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // AuthorizedActorNames represents who are authorized to edit the branch protection rules. | ||||||
|  | type AuthorizedActorNames struct { | ||||||
|  | 	From []string `json:"from,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // AuthorizedActorsOnly represents if the branche rule can be edited by authorized actors only. | ||||||
|  | type AuthorizedActorsOnly struct { | ||||||
|  | 	From *bool `json:"from,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // ProtectionRequest represents a request to create/edit a branch's protection. | // ProtectionRequest represents a request to create/edit a branch's protection. | ||||||
| type ProtectionRequest struct { | type ProtectionRequest struct { | ||||||
| 	RequiredStatusChecks       *RequiredStatusChecks                 `json:"required_status_checks"` | 	RequiredStatusChecks       *RequiredStatusChecks                 `json:"required_status_checks"` | ||||||
| @ -776,6 +823,9 @@ type ProtectionRequest struct { | |||||||
| 	AllowForcePushes *bool `json:"allow_force_pushes,omitempty"` | 	AllowForcePushes *bool `json:"allow_force_pushes,omitempty"` | ||||||
| 	// Allows deletion of the protected branch by anyone with write access to the repository. | 	// Allows deletion of the protected branch by anyone with write access to the repository. | ||||||
| 	AllowDeletions *bool `json:"allow_deletions,omitempty"` | 	AllowDeletions *bool `json:"allow_deletions,omitempty"` | ||||||
|  | 	// RequiredConversationResolution, if set to true, requires all comments | ||||||
|  | 	// on the pull request to be resolved before it can be merged to a protected branch. | ||||||
|  | 	RequiredConversationResolution *bool `json:"required_conversation_resolution,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // RequiredStatusChecks represents the protection status of a individual branch. | // RequiredStatusChecks represents the protection status of a individual branch. | ||||||
							
								
								
									
										102
									
								
								vendor/github.com/google/go-github/v39/github/repos_autolinks.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/github.com/google/go-github/v39/github/repos_autolinks.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | |||||||
|  | // Copyright 2021 The go-github AUTHORS. All rights reserved. | ||||||
|  | // | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | package github | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // AutolinkOptions specifies parameters for RepositoriesService.AddAutolink method. | ||||||
|  | type AutolinkOptions struct { | ||||||
|  | 	KeyPrefix   *string `json:"key_prefix,omitempty"` | ||||||
|  | 	URLTemplate *string `json:"url_template,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Autolink represents autolinks to external resources like JIRA issues and Zendesk tickets. | ||||||
|  | type Autolink struct { | ||||||
|  | 	ID          *int64  `json:"id,omitempty"` | ||||||
|  | 	KeyPrefix   *string `json:"key_prefix,omitempty"` | ||||||
|  | 	URLTemplate *string `json:"url_template,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ListAutolinks returns a list of autolinks configured for the given repository. | ||||||
|  | // Information about autolinks are only available to repository administrators. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#list-all-autolinks-of-a-repository | ||||||
|  | func (s *RepositoriesService) ListAutolinks(ctx context.Context, owner, repo string, opts *ListOptions) ([]*Autolink, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/autolinks", owner, repo) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var autolinks []*Autolink | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &autolinks) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return autolinks, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // AddAutolink creates an autolink reference for a repository. | ||||||
|  | // Users with admin access to the repository can create an autolink. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#create-an-autolink-reference-for-a-repository | ||||||
|  | func (s *RepositoriesService) AddAutolink(ctx context.Context, owner, repo string, opts *AutolinkOptions) (*Autolink, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/autolinks", owner, repo) | ||||||
|  | 	req, err := s.client.NewRequest("POST", u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	al := new(Autolink) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, al) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 	return al, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetAutolink returns a single autolink reference by ID that was configured for the given repository. | ||||||
|  | // Information about autolinks are only available to repository administrators. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-an-autolink-reference-of-a-repository | ||||||
|  | func (s *RepositoriesService) GetAutolink(ctx context.Context, owner, repo string, id int64) (*Autolink, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/autolinks/%v", owner, repo, id) | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var autolink *Autolink | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &autolink) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return autolink, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // DeleteAutolink deletes a single autolink reference by ID that was configured for the given repository. | ||||||
|  | // Information about autolinks are only available to repository administrators. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#delete-an-autolink-reference-from-a-repository | ||||||
|  | func (s *RepositoriesService) DeleteAutolink(ctx context.Context, owner, repo string, id int64) (*Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/autolinks/%v", owner, repo, id) | ||||||
|  | 	req, err := s.client.NewRequest("DELETE", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return s.client.Do(ctx, req, nil) | ||||||
|  | } | ||||||
| @ -150,8 +150,12 @@ func (s *RepositoriesService) ListCommits(ctx context.Context, owner, repo strin | |||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-single-commit | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-single-commit | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-a-commit | ||||||
| func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string) (*RepositoryCommit, *Response, error) { | func (s *RepositoriesService) GetCommit(ctx context.Context, owner, repo, sha string, opts *ListOptions) (*RepositoryCommit, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) | 	u := fmt.Sprintf("repos/%v/%v/commits/%v", owner, repo, sha) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	req, err := s.client.NewRequest("GET", u, nil) | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -224,11 +228,15 @@ func (s *RepositoriesService) GetCommitSHA1(ctx context.Context, owner, repo, re | |||||||
| // CompareCommits compares a range of commits with each other. | // CompareCommits compares a range of commits with each other. | ||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#compare-two-commits | // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#compare-two-commits | ||||||
| func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string) (*CommitsComparison, *Response, error) { | func (s *RepositoriesService) CompareCommits(ctx context.Context, owner, repo string, base, head string, opts *ListOptions) (*CommitsComparison, *Response, error) { | ||||||
| 	escapedBase := url.QueryEscape(base) | 	escapedBase := url.QueryEscape(base) | ||||||
| 	escapedHead := url.QueryEscape(head) | 	escapedHead := url.QueryEscape(head) | ||||||
| 
 | 
 | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, escapedBase, escapedHead) | 	u := fmt.Sprintf("repos/%v/%v/compare/%v...%v", owner, repo, escapedBase, escapedHead) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	req, err := s.client.NewRequest("GET", u, nil) | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -15,13 +15,16 @@ import ( | |||||||
| type Metric struct { | type Metric struct { | ||||||
| 	Name    *string `json:"name"` | 	Name    *string `json:"name"` | ||||||
| 	Key     *string `json:"key"` | 	Key     *string `json:"key"` | ||||||
|  | 	SPDXID  *string `json:"spdx_id"` | ||||||
| 	URL     *string `json:"url"` | 	URL     *string `json:"url"` | ||||||
| 	HTMLURL *string `json:"html_url"` | 	HTMLURL *string `json:"html_url"` | ||||||
|  | 	NodeID  *string `json:"node_id"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // CommunityHealthFiles represents the different files in the community health metrics response. | // CommunityHealthFiles represents the different files in the community health metrics response. | ||||||
| type CommunityHealthFiles struct { | type CommunityHealthFiles struct { | ||||||
| 	CodeOfConduct       *Metric `json:"code_of_conduct"` | 	CodeOfConduct       *Metric `json:"code_of_conduct"` | ||||||
|  | 	CodeOfConductFile   *Metric `json:"code_of_conduct_file"` | ||||||
| 	Contributing        *Metric `json:"contributing"` | 	Contributing        *Metric `json:"contributing"` | ||||||
| 	IssueTemplate       *Metric `json:"issue_template"` | 	IssueTemplate       *Metric `json:"issue_template"` | ||||||
| 	PullRequestTemplate *Metric `json:"pull_request_template"` | 	PullRequestTemplate *Metric `json:"pull_request_template"` | ||||||
| @ -31,14 +34,17 @@ type CommunityHealthFiles struct { | |||||||
| 
 | 
 | ||||||
| // CommunityHealthMetrics represents a response containing the community metrics of a repository. | // CommunityHealthMetrics represents a response containing the community metrics of a repository. | ||||||
| type CommunityHealthMetrics struct { | type CommunityHealthMetrics struct { | ||||||
| 	HealthPercentage *int                  `json:"health_percentage"` | 	HealthPercentage      *int                  `json:"health_percentage"` | ||||||
| 	Files            *CommunityHealthFiles `json:"files"` | 	Description           *string               `json:"description"` | ||||||
| 	UpdatedAt        *time.Time            `json:"updated_at"` | 	Documentation         *string               `json:"documentation"` | ||||||
|  | 	Files                 *CommunityHealthFiles `json:"files"` | ||||||
|  | 	UpdatedAt             *time.Time            `json:"updated_at"` | ||||||
|  | 	ContentReportsEnabled *bool                 `json:"content_reports_enabled"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetCommunityHealthMetrics retrieves all the community health  metrics for a  repository. | // GetCommunityHealthMetrics retrieves all the community health  metrics for a  repository. | ||||||
| // | // | ||||||
| // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/repos/#get-community-profile-metrics | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-community-profile-metrics | ||||||
| func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) { | func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, owner, repo string) (*CommunityHealthMetrics, *Response, error) { | ||||||
| 	u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo) | 	u := fmt.Sprintf("repos/%v/%v/community/profile", owner, repo) | ||||||
| 	req, err := s.client.NewRequest("GET", u, nil) | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
| @ -46,9 +52,6 @@ func (s *RepositoriesService) GetCommunityHealthMetrics(ctx context.Context, own | |||||||
| 		return nil, nil, err | 		return nil, nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// TODO: remove custom Accept header when this API fully launches. |  | ||||||
| 	req.Header.Set("Accept", mediaTypeRepositoryCommunityHealthMetricsPreview) |  | ||||||
| 
 |  | ||||||
| 	metrics := &CommunityHealthMetrics{} | 	metrics := &CommunityHealthMetrics{} | ||||||
| 	resp, err := s.client.Do(ctx, req, metrics) | 	resp, err := s.client.Do(ctx, req, metrics) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @ -132,7 +132,7 @@ func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, | |||||||
| 	for _, contents := range dirContents { | 	for _, contents := range dirContents { | ||||||
| 		if *contents.Name == filename { | 		if *contents.Name == filename { | ||||||
| 			if contents.DownloadURL == nil || *contents.DownloadURL == "" { | 			if contents.DownloadURL == nil || *contents.DownloadURL == "" { | ||||||
| 				return nil, resp, fmt.Errorf("No download link found for %s", filepath) | 				return nil, resp, fmt.Errorf("no download link found for %s", filepath) | ||||||
| 			} | 			} | ||||||
| 			dlResp, err := s.client.client.Get(*contents.DownloadURL) | 			dlResp, err := s.client.client.Get(*contents.DownloadURL) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @ -141,7 +141,7 @@ func (s *RepositoriesService) DownloadContents(ctx context.Context, owner, repo, | |||||||
| 			return dlResp.Body, &Response{Response: dlResp}, nil | 			return dlResp.Body, &Response{Response: dlResp}, nil | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir) | 	return nil, resp, fmt.Errorf("no file named %s found in %s", filename, dir) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // DownloadContentsWithMeta is identical to DownloadContents but additionally | // DownloadContentsWithMeta is identical to DownloadContents but additionally | ||||||
| @ -162,7 +162,7 @@ func (s *RepositoriesService) DownloadContentsWithMeta(ctx context.Context, owne | |||||||
| 	for _, contents := range dirContents { | 	for _, contents := range dirContents { | ||||||
| 		if *contents.Name == filename { | 		if *contents.Name == filename { | ||||||
| 			if contents.DownloadURL == nil || *contents.DownloadURL == "" { | 			if contents.DownloadURL == nil || *contents.DownloadURL == "" { | ||||||
| 				return nil, contents, resp, fmt.Errorf("No download link found for %s", filepath) | 				return nil, contents, resp, fmt.Errorf("no download link found for %s", filepath) | ||||||
| 			} | 			} | ||||||
| 			dlResp, err := s.client.client.Get(*contents.DownloadURL) | 			dlResp, err := s.client.client.Get(*contents.DownloadURL) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @ -171,7 +171,7 @@ func (s *RepositoriesService) DownloadContentsWithMeta(ctx context.Context, owne | |||||||
| 			return dlResp.Body, contents, &Response{Response: dlResp}, nil | 			return dlResp.Body, contents, &Response{Response: dlResp}, nil | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return nil, nil, resp, fmt.Errorf("No file named %s found in %s", filename, dir) | 	return nil, nil, resp, fmt.Errorf("no file named %s found in %s", filename, dir) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetContents can return either the metadata and content of a single file | // GetContents can return either the metadata and content of a single file | ||||||
							
								
								
									
										117
									
								
								vendor/github.com/google/go-github/v39/github/repos_hooks_deliveries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								vendor/github.com/google/go-github/v39/github/repos_hooks_deliveries.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,117 @@ | |||||||
|  | // Copyright 2021 The go-github AUTHORS. All rights reserved. | ||||||
|  | // | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | package github | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // HookDelivery represents the data that is received from GitHub's Webhook Delivery API | ||||||
|  | // | ||||||
|  | // GitHub API docs: | ||||||
|  | // - https://docs.github.com/en/rest/reference/repos#list-deliveries-for-a-repository-webhook | ||||||
|  | // - https://docs.github.com/en/rest/reference/repos#get-a-delivery-for-a-repository-webhook | ||||||
|  | type HookDelivery struct { | ||||||
|  | 	ID             *int64     `json:"id"` | ||||||
|  | 	GUID           *string    `json:"guid"` | ||||||
|  | 	DeliveredAt    *Timestamp `json:"delivered_at"` | ||||||
|  | 	Redelivery     *bool      `json:"redelivery"` | ||||||
|  | 	Duration       *float64   `json:"duration"` | ||||||
|  | 	Status         *string    `json:"status"` | ||||||
|  | 	StatusCode     *int       `json:"status_code"` | ||||||
|  | 	Event          *string    `json:"event"` | ||||||
|  | 	Action         *string    `json:"action"` | ||||||
|  | 	InstallationID *string    `json:"installation_id"` | ||||||
|  | 	RepositoryID   *int64     `json:"repository_id"` | ||||||
|  | 
 | ||||||
|  | 	// Request is populated by GetHookDelivery. | ||||||
|  | 	Request *HookRequest `json:"request,omitempty"` | ||||||
|  | 	// Response is populated by GetHookDelivery. | ||||||
|  | 	Response *HookResponse `json:"response,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (d HookDelivery) String() string { | ||||||
|  | 	return Stringify(d) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // HookRequest is a part of HookDelivery that contains | ||||||
|  | // the HTTP headers and the JSON payload of the webhook request. | ||||||
|  | type HookRequest struct { | ||||||
|  | 	Headers    map[string]string `json:"headers,omitempty"` | ||||||
|  | 	RawPayload *json.RawMessage  `json:"payload,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (r HookRequest) String() string { | ||||||
|  | 	return Stringify(r) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // HookResponse is a part of HookDelivery that contains | ||||||
|  | // the HTTP headers and the response body served by the webhook endpoint. | ||||||
|  | type HookResponse struct { | ||||||
|  | 	Headers    map[string]string `json:"headers,omitempty"` | ||||||
|  | 	RawPayload *json.RawMessage  `json:"payload,omitempty"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (r HookResponse) String() string { | ||||||
|  | 	return Stringify(r) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ListHookDeliveries lists webhook deliveries for a webhook configured in a repository. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#list-deliveries-for-a-repository-webhook | ||||||
|  | func (s *RepositoriesService) ListHookDeliveries(ctx context.Context, owner, repo string, id int64, opts *ListCursorOptions) ([]*HookDelivery, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/hooks/%v/deliveries", owner, repo, id) | ||||||
|  | 	u, err := addOptions(u, opts) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	deliveries := []*HookDelivery{} | ||||||
|  | 	resp, err := s.client.Do(ctx, req, &deliveries) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return deliveries, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetHookDelivery returns a delivery for a webhook configured in a repository. | ||||||
|  | // | ||||||
|  | // GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-a-delivery-for-a-repository-webhook | ||||||
|  | func (s *RepositoriesService) GetHookDelivery(ctx context.Context, owner, repo string, hookID, deliveryID int64) (*HookDelivery, *Response, error) { | ||||||
|  | 	u := fmt.Sprintf("repos/%v/%v/hooks/%v/deliveries/%v", owner, repo, hookID, deliveryID) | ||||||
|  | 	req, err := s.client.NewRequest("GET", u, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	h := new(HookDelivery) | ||||||
|  | 	resp, err := s.client.Do(ctx, req, h) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, resp, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return h, resp, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // ParseRequestPayload parses the request payload. For recognized event types, | ||||||
|  | // a value of the corresponding struct type will be returned. | ||||||
|  | func (d *HookDelivery) ParseRequestPayload() (interface{}, error) { | ||||||
|  | 	eType, ok := eventTypeMapping[*d.Event] | ||||||
|  | 	if !ok { | ||||||
|  | 		return nil, fmt.Errorf("unsupported event type %q", *d.Event) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	e := &Event{Type: &eType, RawPayload: d.Request.RawPayload} | ||||||
|  | 	return e.ParsePayload() | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user