mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-10 17:45:36 +00:00
Update github.com/xanzy/go-gitlab v0.51.1 -> v0.52.2 (#599)
This commit is contained in:
parent
fe6c999160
commit
70fcc173b9
32 changed files with 1431 additions and 345 deletions
9
go.mod
9
go.mod
|
@ -26,6 +26,7 @@ require (
|
||||||
github.com/google/go-github/v39 v39.2.0
|
github.com/google/go-github/v39 v39.2.0
|
||||||
github.com/gorilla/securecookie v1.1.1
|
github.com/gorilla/securecookie v1.1.1
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0 // indirect
|
||||||
github.com/joho/godotenv v1.4.0
|
github.com/joho/godotenv v1.4.0
|
||||||
github.com/lib/pq v1.10.3
|
github.com/lib/pq v1.10.3
|
||||||
github.com/mattn/go-sqlite3 v1.14.9
|
github.com/mattn/go-sqlite3 v1.14.9
|
||||||
|
@ -42,15 +43,15 @@ require (
|
||||||
github.com/ugorji/go v1.2.6 // indirect
|
github.com/ugorji/go v1.2.6 // indirect
|
||||||
github.com/urfave/cli/v2 v2.3.0
|
github.com/urfave/cli/v2 v2.3.0
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915
|
||||||
github.com/xanzy/go-gitlab v0.51.1
|
github.com/xanzy/go-gitlab v0.52.2
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||||
github.com/xeipuuv/gojsonschema v1.2.0
|
github.com/xeipuuv/gojsonschema v1.2.0
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519
|
||||||
golang.org/x/net v0.0.0-20211020060615-d418f374d309
|
golang.org/x/net v0.0.0-20211209124913-491a49abca63
|
||||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 // indirect
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 // indirect
|
||||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20211027162914-98a5263abeca // indirect
|
google.golang.org/genproto v0.0.0-20211027162914-98a5263abeca // indirect
|
||||||
google.golang.org/grpc v1.41.0
|
google.golang.org/grpc v1.41.0
|
||||||
google.golang.org/protobuf v1.27.1
|
google.golang.org/protobuf v1.27.1
|
||||||
|
|
19
go.sum
19
go.sum
|
@ -694,8 +694,9 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh
|
||||||
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
|
github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
|
||||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs=
|
|
||||||
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
|
@ -1342,8 +1343,8 @@ github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT
|
||||||
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915 h1:9zBOoKSR9CBeYoKQv6LFIuImg8lorCjh8XzK72bJMRg=
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915 h1:9zBOoKSR9CBeYoKQv6LFIuImg8lorCjh8XzK72bJMRg=
|
||||||
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915/go.mod h1:PbzlZ93HrA1cf16OUP1vckAPq57gtF+ccnwZeDkmC9s=
|
github.com/woodpecker-ci/expr v0.0.0-20210628233344-164b8b3d0915/go.mod h1:PbzlZ93HrA1cf16OUP1vckAPq57gtF+ccnwZeDkmC9s=
|
||||||
github.com/xanzy/go-gitlab v0.51.1 h1:wWKLalwx4omxFoHh3PLs9zDgAD4GXDP/uoxwMRCSiWM=
|
github.com/xanzy/go-gitlab v0.52.2 h1:gkgg1z4ON70sphibtD86Bfmt1qV3mZ0pU0CBBCFAEvQ=
|
||||||
github.com/xanzy/go-gitlab v0.51.1/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
|
github.com/xanzy/go-gitlab v0.52.2/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
|
||||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||||
|
@ -1533,8 +1534,8 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT
|
||||||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211020060615-d418f374d309 h1:A0lJIi+hcTR6aajJH4YqKWwohY4aW9RO7oRMcdv+HKI=
|
golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
|
||||||
golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -1552,8 +1553,8 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ
|
||||||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 h1:B333XXssMuKQeBwiNODx4TupZy7bf4sxFZnN2ZOcvUE=
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
|
||||||
golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
@ -1694,8 +1695,8 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11 h1:GZokNIeuVkl3aZHJchRrr13WCsols02MLUcz1U9is6M=
|
||||||
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
|
2
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
2
vendor/github.com/hashicorp/go-retryablehttp/client.go
generated
vendored
|
@ -471,7 +471,7 @@ func baseRetryPolicy(resp *http.Response, err error) (bool, error) {
|
||||||
// seconds the server states it may be ready to process more requests from this client.
|
// seconds the server states it may be ready to process more requests from this client.
|
||||||
func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration {
|
func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration {
|
||||||
if resp != nil {
|
if resp != nil {
|
||||||
if resp.StatusCode == http.StatusTooManyRequests {
|
if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable {
|
||||||
if s, ok := resp.Header["Retry-After"]; ok {
|
if s, ok := resp.Header["Retry-After"]; ok {
|
||||||
if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil {
|
||||||
return time.Second * time.Duration(sleep)
|
return time.Second * time.Duration(sleep)
|
||||||
|
|
3
vendor/github.com/xanzy/go-gitlab/README.md
generated
vendored
3
vendor/github.com/xanzy/go-gitlab/README.md
generated
vendored
|
@ -34,6 +34,7 @@ to add new and/or missing endpoints. Currently the following services are suppor
|
||||||
- [x] Events
|
- [x] Events
|
||||||
- [x] Feature Flags
|
- [x] Feature Flags
|
||||||
- [ ] Geo Nodes
|
- [ ] Geo Nodes
|
||||||
|
- [x] Generic Packages
|
||||||
- [x] GitLab CI Config Templates
|
- [x] GitLab CI Config Templates
|
||||||
- [x] Gitignores Templates
|
- [x] Gitignores Templates
|
||||||
- [x] Group Access Requests
|
- [x] Group Access Requests
|
||||||
|
@ -57,12 +58,14 @@ to add new and/or missing endpoints. Currently the following services are suppor
|
||||||
- [x] Notes (comments)
|
- [x] Notes (comments)
|
||||||
- [x] Notification Settings
|
- [x] Notification Settings
|
||||||
- [x] Open Source License Templates
|
- [x] Open Source License Templates
|
||||||
|
- [x] Packages
|
||||||
- [x] Pages
|
- [x] Pages
|
||||||
- [x] Pages Domains
|
- [x] Pages Domains
|
||||||
- [x] Personal Access Tokens
|
- [x] Personal Access Tokens
|
||||||
- [x] Pipeline Schedules
|
- [x] Pipeline Schedules
|
||||||
- [x] Pipeline Triggers
|
- [x] Pipeline Triggers
|
||||||
- [x] Pipelines
|
- [x] Pipelines
|
||||||
|
- [x] Plan limits
|
||||||
- [x] Project Access Requests
|
- [x] Project Access Requests
|
||||||
- [x] Project Badges
|
- [x] Project Badges
|
||||||
- [x] Project Clusters
|
- [x] Project Clusters
|
||||||
|
|
4
vendor/github.com/xanzy/go-gitlab/award_emojis.go
generated
vendored
4
vendor/github.com/xanzy/go-gitlab/award_emojis.go
generated
vendored
|
@ -225,7 +225,7 @@ func (s *AwardEmojiService) createAwardEmoji(pid interface{}, resource string, r
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
|
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
|
||||||
func (s *AwardEmojiService) DeleteIssueAwardEmoji(pid interface{}, issueIID, awardID int, options ...RequestOptionFunc) (*Response, error) {
|
func (s *AwardEmojiService) DeleteIssueAwardEmoji(pid interface{}, issueIID, awardID int, options ...RequestOptionFunc) (*Response, error) {
|
||||||
return s.deleteAwardEmoji(pid, awardMergeRequest, issueIID, awardID, options...)
|
return s.deleteAwardEmoji(pid, awardIssue, issueIID, awardID, options...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteMergeRequestAwardEmoji delete award emoji on a merge request.
|
// DeleteMergeRequestAwardEmoji delete award emoji on a merge request.
|
||||||
|
@ -241,7 +241,7 @@ func (s *AwardEmojiService) DeleteMergeRequestAwardEmoji(pid interface{}, mergeR
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
|
// https://docs.gitlab.com/ce/api/award_emoji.html#award-a-new-emoji-on-a-note
|
||||||
func (s *AwardEmojiService) DeleteSnippetAwardEmoji(pid interface{}, snippetID, awardID int, options ...RequestOptionFunc) (*Response, error) {
|
func (s *AwardEmojiService) DeleteSnippetAwardEmoji(pid interface{}, snippetID, awardID int, options ...RequestOptionFunc) (*Response, error) {
|
||||||
return s.deleteAwardEmoji(pid, awardMergeRequest, snippetID, awardID, options...)
|
return s.deleteAwardEmoji(pid, awardSnippets, snippetID, awardID, options...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteAwardEmoji Delete an award emoji on the specified resource.
|
// DeleteAwardEmoji Delete an award emoji on the specified resource.
|
||||||
|
|
4
vendor/github.com/xanzy/go-gitlab/commits.go
generated
vendored
4
vendor/github.com/xanzy/go-gitlab/commits.go
generated
vendored
|
@ -466,11 +466,11 @@ func (s *CommitsService) SetCommitStatus(pid interface{}, sha string, opt *SetCo
|
||||||
return cs, resp, err
|
return cs, resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMergeRequestsByCommit gets merge request associated with a commit.
|
// ListMergeRequestsByCommit gets merge request associated with a commit.
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/commits.html#list-merge-requests-associated-with-a-commit
|
// https://docs.gitlab.com/ce/api/commits.html#list-merge-requests-associated-with-a-commit
|
||||||
func (s *CommitsService) GetMergeRequestsByCommit(pid interface{}, sha string, options ...RequestOptionFunc) ([]*MergeRequest, *Response, error) {
|
func (s *CommitsService) ListMergeRequestsByCommit(pid interface{}, sha string, options ...RequestOptionFunc) ([]*MergeRequest, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
24
vendor/github.com/xanzy/go-gitlab/discussions.go
generated
vendored
24
vendor/github.com/xanzy/go-gitlab/discussions.go
generated
vendored
|
@ -917,12 +917,12 @@ type ListCommitDiscussionsOptions ListOptions
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#list-project-commit-discussion-items
|
// https://docs.gitlab.com/ce/api/discussions.html#list-project-commit-discussion-items
|
||||||
func (s *DiscussionsService) ListCommitDiscussions(pid interface{}, commit string, opt *ListCommitDiscussionsOptions, options ...RequestOptionFunc) ([]*Discussion, *Response, error) {
|
func (s *DiscussionsService) ListCommitDiscussions(pid interface{}, commit int, opt *ListCommitDiscussionsOptions, options ...RequestOptionFunc) ([]*Discussion, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
)
|
)
|
||||||
|
@ -946,12 +946,12 @@ func (s *DiscussionsService) ListCommitDiscussions(pid interface{}, commit strin
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#get-single-commit-discussion-item
|
// https://docs.gitlab.com/ce/api/discussions.html#get-single-commit-discussion-item
|
||||||
func (s *DiscussionsService) GetCommitDiscussion(pid interface{}, commit string, discussion string, options ...RequestOptionFunc) (*Discussion, *Response, error) {
|
func (s *DiscussionsService) GetCommitDiscussion(pid interface{}, commit int, discussion string, options ...RequestOptionFunc) (*Discussion, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions/%s",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions/%s",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
discussion,
|
discussion,
|
||||||
|
@ -986,12 +986,12 @@ type CreateCommitDiscussionOptions struct {
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#create-new-commit-thread
|
// https://docs.gitlab.com/ce/api/discussions.html#create-new-commit-thread
|
||||||
func (s *DiscussionsService) CreateCommitDiscussion(pid interface{}, commit string, opt *CreateCommitDiscussionOptions, options ...RequestOptionFunc) (*Discussion, *Response, error) {
|
func (s *DiscussionsService) CreateCommitDiscussion(pid interface{}, commit int, opt *CreateCommitDiscussionOptions, options ...RequestOptionFunc) (*Discussion, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
)
|
)
|
||||||
|
@ -1024,12 +1024,12 @@ type AddCommitDiscussionNoteOptions struct {
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-commit-thread
|
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-commit-thread
|
||||||
func (s *DiscussionsService) AddCommitDiscussionNote(pid interface{}, commit string, discussion string, opt *AddCommitDiscussionNoteOptions, options ...RequestOptionFunc) (*Note, *Response, error) {
|
func (s *DiscussionsService) AddCommitDiscussionNote(pid interface{}, commit int, discussion string, opt *AddCommitDiscussionNoteOptions, options ...RequestOptionFunc) (*Note, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions/%s/notes",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions/%s/notes",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
discussion,
|
discussion,
|
||||||
|
@ -1063,12 +1063,12 @@ type UpdateCommitDiscussionNoteOptions struct {
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#modify-an-existing-commit-thread-note
|
// https://docs.gitlab.com/ce/api/discussions.html#modify-an-existing-commit-thread-note
|
||||||
func (s *DiscussionsService) UpdateCommitDiscussionNote(pid interface{}, commit string, discussion string, note int, opt *UpdateCommitDiscussionNoteOptions, options ...RequestOptionFunc) (*Note, *Response, error) {
|
func (s *DiscussionsService) UpdateCommitDiscussionNote(pid interface{}, commit int, discussion string, note int, opt *UpdateCommitDiscussionNoteOptions, options ...RequestOptionFunc) (*Note, *Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions/%s/notes/%d",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions/%s/notes/%d",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
discussion,
|
discussion,
|
||||||
|
@ -1093,12 +1093,12 @@ func (s *DiscussionsService) UpdateCommitDiscussionNote(pid interface{}, commit
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
// https://docs.gitlab.com/ce/api/discussions.html#delete-a-commit-thread-note
|
// https://docs.gitlab.com/ce/api/discussions.html#delete-a-commit-thread-note
|
||||||
func (s *DiscussionsService) DeleteCommitDiscussionNote(pid interface{}, commit string, discussion string, note int, options ...RequestOptionFunc) (*Response, error) {
|
func (s *DiscussionsService) DeleteCommitDiscussionNote(pid interface{}, commit int, discussion string, note int, options ...RequestOptionFunc) (*Response, error) {
|
||||||
project, err := parseID(pid)
|
project, err := parseID(pid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
u := fmt.Sprintf("projects/%s/repository/commits/%s/discussions/%s/notes/%d",
|
u := fmt.Sprintf("projects/%s/repository/commits/%d/discussions/%s/notes/%d",
|
||||||
pathEscape(project),
|
pathEscape(project),
|
||||||
commit,
|
commit,
|
||||||
discussion,
|
discussion,
|
||||||
|
|
58
vendor/github.com/xanzy/go-gitlab/event_parsing.go
generated
vendored
58
vendor/github.com/xanzy/go-gitlab/event_parsing.go
generated
vendored
|
@ -27,26 +27,33 @@ type EventType string
|
||||||
|
|
||||||
// List of available event types.
|
// List of available event types.
|
||||||
const (
|
const (
|
||||||
|
EventConfidentialIssue EventType = "Confidential Issue Hook"
|
||||||
|
EventConfidentialNote EventType = "Confidential Note Hook"
|
||||||
EventTypeBuild EventType = "Build Hook"
|
EventTypeBuild EventType = "Build Hook"
|
||||||
EventTypeDeployment EventType = "Deployment Hook"
|
EventTypeDeployment EventType = "Deployment Hook"
|
||||||
EventTypeIssue EventType = "Issue Hook"
|
EventTypeIssue EventType = "Issue Hook"
|
||||||
EventConfidentialIssue EventType = "Confidential Issue Hook"
|
|
||||||
EventTypeJob EventType = "Job Hook"
|
EventTypeJob EventType = "Job Hook"
|
||||||
EventTypeMergeRequest EventType = "Merge Request Hook"
|
EventTypeMergeRequest EventType = "Merge Request Hook"
|
||||||
EventTypeNote EventType = "Note Hook"
|
EventTypeNote EventType = "Note Hook"
|
||||||
EventConfidentialNote EventType = "Confidential Note Hook"
|
|
||||||
EventTypePipeline EventType = "Pipeline Hook"
|
EventTypePipeline EventType = "Pipeline Hook"
|
||||||
EventTypePush EventType = "Push Hook"
|
EventTypePush EventType = "Push Hook"
|
||||||
EventTypeRelease EventType = "Release Hook"
|
EventTypeRelease EventType = "Release Hook"
|
||||||
|
EventTypeServiceHook EventType = "Service Hook"
|
||||||
EventTypeSystemHook EventType = "System Hook"
|
EventTypeSystemHook EventType = "System Hook"
|
||||||
EventTypeTagPush EventType = "Tag Push Hook"
|
EventTypeTagPush EventType = "Tag Push Hook"
|
||||||
EventTypeWikiPage EventType = "Wiki Page Hook"
|
EventTypeWikiPage EventType = "Wiki Page Hook"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
eventObjectKindPush = "push"
|
||||||
|
eventObjectKindTagPush = "tag_push"
|
||||||
|
eventObjectKindMergeRequest = "merge_request"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
noteableTypeCommit = "Commit"
|
noteableTypeCommit = "Commit"
|
||||||
noteableTypeMergeRequest = "MergeRequest"
|
|
||||||
noteableTypeIssue = "Issue"
|
noteableTypeIssue = "Issue"
|
||||||
|
noteableTypeMergeRequest = "MergeRequest"
|
||||||
noteableTypeSnippet = "Snippet"
|
noteableTypeSnippet = "Snippet"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -57,6 +64,10 @@ type noteEvent struct {
|
||||||
} `json:"object_attributes"`
|
} `json:"object_attributes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type serviceEvent struct {
|
||||||
|
ObjectKind string `json:"object_kind"`
|
||||||
|
}
|
||||||
|
|
||||||
const eventTypeHeader = "X-Gitlab-Event"
|
const eventTypeHeader = "X-Gitlab-Event"
|
||||||
|
|
||||||
// HookEventType returns the event type for the given request.
|
// HookEventType returns the event type for the given request.
|
||||||
|
@ -119,9 +130,9 @@ func ParseSystemhook(payload []byte) (event interface{}, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch e.EventName {
|
switch e.EventName {
|
||||||
case "push":
|
case eventObjectKindPush:
|
||||||
event = &PushSystemEvent{}
|
event = &PushSystemEvent{}
|
||||||
case "tag_push":
|
case eventObjectKindTagPush:
|
||||||
event = &TagPushSystemEvent{}
|
event = &TagPushSystemEvent{}
|
||||||
case "repository_update":
|
case "repository_update":
|
||||||
event = &RepositoryUpdateSystemEvent{}
|
event = &RepositoryUpdateSystemEvent{}
|
||||||
|
@ -209,16 +220,6 @@ func ParseWebhook(eventType EventType, payload []byte) (event interface{}, err e
|
||||||
event = &JobEvent{}
|
event = &JobEvent{}
|
||||||
case EventTypeMergeRequest:
|
case EventTypeMergeRequest:
|
||||||
event = &MergeEvent{}
|
event = &MergeEvent{}
|
||||||
case EventTypePipeline:
|
|
||||||
event = &PipelineEvent{}
|
|
||||||
case EventTypePush:
|
|
||||||
event = &PushEvent{}
|
|
||||||
case EventTypeRelease:
|
|
||||||
event = &ReleaseEvent{}
|
|
||||||
case EventTypeTagPush:
|
|
||||||
event = &TagEvent{}
|
|
||||||
case EventTypeWikiPage:
|
|
||||||
event = &WikiPageEvent{}
|
|
||||||
case EventTypeNote, EventConfidentialNote:
|
case EventTypeNote, EventConfidentialNote:
|
||||||
note := ¬eEvent{}
|
note := ¬eEvent{}
|
||||||
err := json.Unmarshal(payload, note)
|
err := json.Unmarshal(payload, note)
|
||||||
|
@ -242,7 +243,32 @@ func ParseWebhook(eventType EventType, payload []byte) (event interface{}, err e
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unexpected noteable type %s", note.ObjectAttributes.NoteableType)
|
return nil, fmt.Errorf("unexpected noteable type %s", note.ObjectAttributes.NoteableType)
|
||||||
}
|
}
|
||||||
|
case EventTypePipeline:
|
||||||
|
event = &PipelineEvent{}
|
||||||
|
case EventTypePush:
|
||||||
|
event = &PushEvent{}
|
||||||
|
case EventTypeRelease:
|
||||||
|
event = &ReleaseEvent{}
|
||||||
|
case EventTypeServiceHook:
|
||||||
|
service := &serviceEvent{}
|
||||||
|
err := json.Unmarshal(payload, service)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch service.ObjectKind {
|
||||||
|
case eventObjectKindPush:
|
||||||
|
event = &PushEvent{}
|
||||||
|
case eventObjectKindTagPush:
|
||||||
|
event = &TagEvent{}
|
||||||
|
case eventObjectKindMergeRequest:
|
||||||
|
event = &MergeEvent{}
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unexpected service type %s", service.ObjectKind)
|
||||||
|
}
|
||||||
|
case EventTypeTagPush:
|
||||||
|
event = &TagEvent{}
|
||||||
|
case EventTypeWikiPage:
|
||||||
|
event = &WikiPageEvent{}
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unexpected event type: %s", eventType)
|
return nil, fmt.Errorf("unexpected event type: %s", eventType)
|
||||||
}
|
}
|
||||||
|
|
21
vendor/github.com/xanzy/go-gitlab/event_webhook_types.go
generated
vendored
21
vendor/github.com/xanzy/go-gitlab/event_webhook_types.go
generated
vendored
|
@ -640,6 +640,10 @@ type PipelineEvent struct {
|
||||||
FinishedAt string `json:"finished_at"`
|
FinishedAt string `json:"finished_at"`
|
||||||
Duration int `json:"duration"`
|
Duration int `json:"duration"`
|
||||||
QueuedDuration int `json:"queued_duration"`
|
QueuedDuration int `json:"queued_duration"`
|
||||||
|
Variables []struct {
|
||||||
|
Key string `json:"key"`
|
||||||
|
Value string `json:"value"`
|
||||||
|
} `json:"variables"`
|
||||||
} `json:"object_attributes"`
|
} `json:"object_attributes"`
|
||||||
MergeRequest struct {
|
MergeRequest struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
|
@ -694,15 +698,22 @@ type PipelineEvent struct {
|
||||||
AllowFailure bool `json:"allow_failure"`
|
AllowFailure bool `json:"allow_failure"`
|
||||||
User *EventUser `json:"user"`
|
User *EventUser `json:"user"`
|
||||||
Runner struct {
|
Runner struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
Active bool `json:"active"`
|
Active bool `json:"active"`
|
||||||
IsShared bool `json:"is_shared"`
|
IsShared bool `json:"is_shared"`
|
||||||
|
RunnerType string `json:"runner_type"`
|
||||||
|
Tags []string `json:"tags"`
|
||||||
} `json:"runner"`
|
} `json:"runner"`
|
||||||
ArtifactsFile struct {
|
ArtifactsFile struct {
|
||||||
Filename string `json:"filename"`
|
Filename string `json:"filename"`
|
||||||
Size int `json:"size"`
|
Size int `json:"size"`
|
||||||
} `json:"artifacts_file"`
|
} `json:"artifacts_file"`
|
||||||
|
Environment struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Action string `json:"action"`
|
||||||
|
DeploymentTier string `json:"deployment_tier"`
|
||||||
|
} `json:"environment"`
|
||||||
} `json:"builds"`
|
} `json:"builds"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,6 +753,7 @@ type PushEvent struct {
|
||||||
Commits []*struct {
|
Commits []*struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
|
Title string `json:"title"`
|
||||||
Timestamp *time.Time `json:"timestamp"`
|
Timestamp *time.Time `json:"timestamp"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Author struct {
|
Author struct {
|
||||||
|
@ -896,6 +908,7 @@ type TagEvent struct {
|
||||||
Commits []*struct {
|
Commits []*struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
|
Title string `json:"title"`
|
||||||
Timestamp *time.Time `json:"timestamp"`
|
Timestamp *time.Time `json:"timestamp"`
|
||||||
URL string `json:"url"`
|
URL string `json:"url"`
|
||||||
Author struct {
|
Author struct {
|
||||||
|
|
90
vendor/github.com/xanzy/go-gitlab/external_status_checks.go
generated
vendored
Normal file
90
vendor/github.com/xanzy/go-gitlab/external_status_checks.go
generated
vendored
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
package gitlab
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ExternalStatusChecksService handles communication with the external
|
||||||
|
// status check related methods of the GitLab API.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/status_checks.html
|
||||||
|
type ExternalStatusChecksService struct {
|
||||||
|
client *Client
|
||||||
|
}
|
||||||
|
|
||||||
|
type MergeStatusCheck struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
ExternalURL string `json:"external_url"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProjectStatusCheck struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
ProjectID int `json:"project_id"`
|
||||||
|
ExternalURL string `json:"external_url"`
|
||||||
|
ProtectedBranches []StatusCheckProtectedBranch `json:"protected_branches"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusCheckProtectedBranch struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
ProjectID int `json:"project_id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
CreatedAt *time.Time `json:"created_at"`
|
||||||
|
UpdatedAt *time.Time `json:"updated_at"`
|
||||||
|
CodeOwnerApprovalRequired bool `json:"code_owner_approval_required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListMergeStatusChecks lists the external status checks that apply to it
|
||||||
|
// and their status for a single merge request.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/status_checks.html#list-status-checks-for-a-merge-request
|
||||||
|
func (s *ExternalStatusChecksService) ListMergeStatusChecks(pid interface{}, mr int, opt *ListOptions, options ...RequestOptionFunc) ([]*MergeStatusCheck, *Response, error) {
|
||||||
|
project, err := parseID(pid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
u := fmt.Sprintf("projects/%s/merge_requests/%d/status_checks", pathEscape(project), mr)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var mscs []*MergeStatusCheck
|
||||||
|
resp, err := s.client.Do(req, &mscs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mscs, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListProjectStatusChecks lists the project external status checks.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/status_checks.html#get-project-external-status-checks
|
||||||
|
func (s *ExternalStatusChecksService) ListProjectStatusChecks(pid interface{}, opt *ListOptions, options ...RequestOptionFunc) ([]*ProjectStatusCheck, *Response, error) {
|
||||||
|
project, err := parseID(pid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
u := fmt.Sprintf("projects/%s/external_status_checks", pathEscape(project))
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var pscs []*ProjectStatusCheck
|
||||||
|
resp, err := s.client.Do(req, &pscs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return pscs, resp, err
|
||||||
|
}
|
158
vendor/github.com/xanzy/go-gitlab/generic_packages.go
generated
vendored
Normal file
158
vendor/github.com/xanzy/go-gitlab/generic_packages.go
generated
vendored
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
//
|
||||||
|
// Copyright 2021, Sune Keller
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
package gitlab
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenericPackagesService handles communication with the packages related
|
||||||
|
// methods of the GitLab API.
|
||||||
|
//
|
||||||
|
// GitLab docs:
|
||||||
|
// https://docs.gitlab.com/ee/user/packages/generic_packages/index.html
|
||||||
|
type GenericPackagesService struct {
|
||||||
|
client *Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenericPackagesFile represents a GitLab generic package file.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#publish-a-package-file
|
||||||
|
type GenericPackagesFile struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
PackageID int `json:"package_id"`
|
||||||
|
CreatedAt *time.Time `json:"created_at"`
|
||||||
|
UpdatedAt *time.Time `json:"updated_at"`
|
||||||
|
Size int `json:"size"`
|
||||||
|
FileStore int `json:"file_store"`
|
||||||
|
FileMD5 string `json:"file_md5"`
|
||||||
|
FileSHA1 string `json:"file_sha1"`
|
||||||
|
FileName string `json:"file_name"`
|
||||||
|
File struct {
|
||||||
|
URL string `json:"url"`
|
||||||
|
} `json:"file"`
|
||||||
|
FileSHA256 string `json:"file_sha256"`
|
||||||
|
VerificationRetryAt *time.Time `json:"verification_retry_at"`
|
||||||
|
VerifiedAt *time.Time `json:"verified_at"`
|
||||||
|
VerificationFailure bool `json:"verification_failure"`
|
||||||
|
VerificationRetryCount int `json:"verification_retry_count"`
|
||||||
|
VerificationChecksum string `json:"verification_checksum"`
|
||||||
|
VerificationState int `json:"verification_state"`
|
||||||
|
VerificationStartedAt *time.Time `json:"verification_started_at"`
|
||||||
|
NewFilePath string `json:"new_file_path"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FormatPackageURL returns the GitLab Package Registry URL for the given artifact metadata, without the BaseURL.
|
||||||
|
// This does not make a GitLab API request, but rather computes it based on their documentation.
|
||||||
|
func (s *GenericPackagesService) FormatPackageURL(pid interface{}, packageName, packageVersion, fileName string) (string, error) {
|
||||||
|
project, err := parseID(pid)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
u := fmt.Sprintf(
|
||||||
|
"projects/%s/packages/generic/%s/%s/%s",
|
||||||
|
pathEscape(project),
|
||||||
|
pathEscape(packageName),
|
||||||
|
pathEscape(packageVersion),
|
||||||
|
pathEscape(fileName),
|
||||||
|
)
|
||||||
|
return u, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PublishPackageFileOptions represents the available PublishPackageFile()
|
||||||
|
// options.
|
||||||
|
//
|
||||||
|
// GitLab docs:
|
||||||
|
// https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#publish-a-package-file
|
||||||
|
type PublishPackageFileOptions struct {
|
||||||
|
Status *GenericPackageStatusValue `url:"status,omitempty" json:"status,omitempty"`
|
||||||
|
Select *GenericPackageSelectValue `url:"select,omitempty" json:"select,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PublishPackageFile uploads a file to a project's package registry.
|
||||||
|
//
|
||||||
|
// GitLab docs:
|
||||||
|
// https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#publish-a-package-file
|
||||||
|
func (s *GenericPackagesService) PublishPackageFile(pid interface{}, packageName, packageVersion, fileName string, content io.Reader, opt *PublishPackageFileOptions, options ...RequestOptionFunc) (*GenericPackagesFile, *Response, error) {
|
||||||
|
project, err := parseID(pid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
u := fmt.Sprintf(
|
||||||
|
"projects/%s/packages/generic/%s/%s/%s",
|
||||||
|
pathEscape(project),
|
||||||
|
pathEscape(packageName),
|
||||||
|
pathEscape(packageVersion),
|
||||||
|
pathEscape(fileName),
|
||||||
|
)
|
||||||
|
|
||||||
|
// We need to create the request as a GET request to make sure the options
|
||||||
|
// are set correctly. After the request is created we will overwrite both
|
||||||
|
// the method and the body.
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overwrite the method and body.
|
||||||
|
req.Method = http.MethodPut
|
||||||
|
req.SetBody(content)
|
||||||
|
|
||||||
|
f := new(GenericPackagesFile)
|
||||||
|
resp, err := s.client.Do(req, f)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return f, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// DownloadPackageFile allows you to download the package file.
|
||||||
|
//
|
||||||
|
// GitLab docs:
|
||||||
|
// https://docs.gitlab.com/ee/user/packages/generic_packages/index.html#download-package-file
|
||||||
|
func (s *GenericPackagesService) DownloadPackageFile(pid interface{}, packageName, packageVersion, fileName string, options ...RequestOptionFunc) ([]byte, *Response, error) {
|
||||||
|
project, err := parseID(pid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
u := fmt.Sprintf(
|
||||||
|
"projects/%s/packages/generic/%s/%s/%s",
|
||||||
|
pathEscape(project),
|
||||||
|
pathEscape(packageName),
|
||||||
|
pathEscape(packageVersion),
|
||||||
|
pathEscape(fileName),
|
||||||
|
)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var f bytes.Buffer
|
||||||
|
resp, err := s.client.Do(req, &f)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return f.Bytes(), resp, err
|
||||||
|
}
|
433
vendor/github.com/xanzy/go-gitlab/geo_nodes.go
generated
vendored
Normal file
433
vendor/github.com/xanzy/go-gitlab/geo_nodes.go
generated
vendored
Normal file
|
@ -0,0 +1,433 @@
|
||||||
|
//
|
||||||
|
// Copyright 2021, Sander van Harmelen
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
package gitlab
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GeoNode represents a GitLab Geo Node.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
|
||||||
|
type GeoNode struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
InternalURL string `json:"internal_url"`
|
||||||
|
Primary bool `json:"primary"`
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
Current bool `json:"current"`
|
||||||
|
FilesMaxCapacity int `json:"files_max_capacity"`
|
||||||
|
ReposMaxCapacity int `json:"repos_max_capacity"`
|
||||||
|
VerificationMaxCapacity int `json:"verification_max_capacity"`
|
||||||
|
SelectiveSyncType string `json:"selective_sync_type"`
|
||||||
|
SelectiveSyncShards []string `json:"selective_sync_shards"`
|
||||||
|
SelectiveSyncNamespaceIds []int `json:"selective_sync_namespace_ids"`
|
||||||
|
MinimumReverificationInterval int `json:"minimum_reverification_interval"`
|
||||||
|
ContainerRepositoriesMaxCapacity int `json:"container_repositories_max_capacity"`
|
||||||
|
SyncObjectStorage bool `json:"sync_object_storage"`
|
||||||
|
CloneProtocol string `json:"clone_protocol"`
|
||||||
|
WebEditURL string `json:"web_edit_url"`
|
||||||
|
WebGeoProjectsURL string `json:"web_geo_projects_url"`
|
||||||
|
Links GeoNodeLinks `json:"_links"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GeoNodeLinks represents links for GitLab GeoNode.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
|
||||||
|
type GeoNodeLinks struct {
|
||||||
|
Self string `json:"self"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
Repair string `json:"repair"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GeoNodesService handles communication with Geo Nodes related methods
|
||||||
|
// of GitLab API.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/geo_nodes.html
|
||||||
|
type GeoNodesService struct {
|
||||||
|
client *Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGeoNodesOptions represents the available CreateGeoNode() options.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#create-a-new-geo-node
|
||||||
|
type CreateGeoNodesOptions struct {
|
||||||
|
Primary *bool `url:"primary,omitempty" json:"primary,omitempty"`
|
||||||
|
Enabled *bool `url:"enabled,omitempty" json:"enabled,omitempty"`
|
||||||
|
Name *string `url:"name,omitempty" json:"name,omitempty"`
|
||||||
|
URL *string `url:"url,omitempty" json:"url,omitempty"`
|
||||||
|
InternalURL *string `url:"internal_url,omitempty" json:"internal_url,omitempty"`
|
||||||
|
FilesMaxCapacity *int `url:"files_max_capacity,omitempty" json:"files_max_capacity,omitempty"`
|
||||||
|
ReposMaxCapacity *int `url:"repos_max_capacity,omitempty" json:"repos_max_capacity,omitempty"`
|
||||||
|
VerificationMaxCapacity *int `url:"verification_max_capacity,omitempty" json:"verification_max_capacity,omitempty"`
|
||||||
|
ContainerRepositoriesMaxCapacity *int `url:"container_repositories_max_capacity,omitempty" json:"container_repositories_max_capacity,omitempty"`
|
||||||
|
SyncObjectStorage *bool `url:"sync_object_storage,omitempty" json:"sync_object_storage,omitempty"`
|
||||||
|
SelectiveSyncType *string `url:"selective_sync_type,omitempty" json:"selective_sync_type,omitempty"`
|
||||||
|
SelectiveSyncShards []string `url:"selective_sync_shards,omitempty" json:"selective_sync_shards,omitempty"`
|
||||||
|
SelectiveSyncNamespaceIds []int `url:"selective_sync_namespace_ids,omitempty" json:"selective_sync_namespace_ids,omitempty"`
|
||||||
|
MinimumReverificationInterval *int `url:"minimum_reverification_interval,omitempty" json:"minimum_reverification_interval,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGeoNode creates a new Geo Node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#create-a-new-geo-node
|
||||||
|
func (s *GeoNodesService) CreateGeoNode(opt *CreateGeoNodesOptions, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, "geo_nodes", opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
g := new(GeoNode)
|
||||||
|
resp, err := s.client.Do(req, g)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return g, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListGeoNodesOptions represents the available ListGeoNodes() options.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-all-geo-nodes
|
||||||
|
type ListGeoNodesOptions ListOptions
|
||||||
|
|
||||||
|
// ListGeoNodes gets a list of geo nodes.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-all-geo-nodes
|
||||||
|
func (s *GeoNodesService) ListGeoNodes(opt *ListGeoNodesOptions, options ...RequestOptionFunc) ([]*GeoNode, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, "geo_nodes", opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var gs []*GeoNode
|
||||||
|
resp, err := s.client.Do(req, &gs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return gs, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetGeoNode gets a specific geo node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-configuration-about-a-specific-geo-node
|
||||||
|
func (s *GeoNodesService) GetGeoNode(id int, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
|
||||||
|
u := fmt.Sprintf("geo_nodes/%d", id)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
g := new(GeoNode)
|
||||||
|
resp, err := s.client.Do(req, g)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return g, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateGeoNodesOptions represents the available EditGeoNode() options.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#edit-a-geo-node
|
||||||
|
type UpdateGeoNodesOptions struct {
|
||||||
|
ID *int `url:"primary,omitempty" json:"primary,omitempty"`
|
||||||
|
Enabled *bool `url:"enabled,omitempty" json:"enabled,omitempty"`
|
||||||
|
Name *string `url:"name,omitempty" json:"name,omitempty"`
|
||||||
|
URL *string `url:"url,omitempty" json:"url,omitempty"`
|
||||||
|
InternalURL *string `url:"internal_url,omitempty" json:"internal_url,omitempty"`
|
||||||
|
FilesMaxCapacity *int `url:"files_max_capacity,omitempty" json:"files_max_capacity,omitempty"`
|
||||||
|
ReposMaxCapacity *int `url:"repos_max_capacity,omitempty" json:"repos_max_capacity,omitempty"`
|
||||||
|
VerificationMaxCapacity *int `url:"verification_max_capacity,omitempty" json:"verification_max_capacity,omitempty"`
|
||||||
|
ContainerRepositoriesMaxCapacity *int `url:"container_repositories_max_capacity,omitempty" json:"container_repositories_max_capacity,omitempty"`
|
||||||
|
SyncObjectStorage *bool `url:"sync_object_storage,omitempty" json:"sync_object_storage,omitempty"`
|
||||||
|
SelectiveSyncType *string `url:"selective_sync_type,omitempty" json:"selective_sync_type,omitempty"`
|
||||||
|
SelectiveSyncShards []string `url:"selective_sync_shards,omitempty" json:"selective_sync_shards,omitempty"`
|
||||||
|
SelectiveSyncNamespaceIds []int `url:"selective_sync_namespace_ids,omitempty" json:"selective_sync_namespace_ids,omitempty"`
|
||||||
|
MinimumReverificationInterval *int `url:"minimum_reverification_interval,omitempty" json:"minimum_reverification_interval,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditGeoNode updates settings of an existing Geo node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#edit-a-geo-node
|
||||||
|
func (s *GeoNodesService) EditGeoNode(id int, opt *UpdateGeoNodesOptions, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
|
||||||
|
u := fmt.Sprintf("geo_nodes/%d", id)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPut, u, opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
g := new(GeoNode)
|
||||||
|
resp, err := s.client.Do(req, g)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return g, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteGeoNode removes the Geo node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#delete-a-geo-node
|
||||||
|
func (s *GeoNodesService) DeleteGeoNode(id int, options ...RequestOptionFunc) (*Response, error) {
|
||||||
|
u := fmt.Sprintf("geo_nodes/%d", id)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodDelete, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.client.Do(req, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RepairGeoNode to repair the OAuth authentication of a Geo node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#repair-a-geo-node
|
||||||
|
func (s *GeoNodesService) RepairGeoNode(id int, options ...RequestOptionFunc) (*GeoNode, *Response, error) {
|
||||||
|
u := fmt.Sprintf("geo_nodes/%d/repair", id)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
g := new(GeoNode)
|
||||||
|
resp, err := s.client.Do(req, g)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return g, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GeoNodeStatus represents the status of Geo Node.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-all-geo-nodes
|
||||||
|
type GeoNodeStatus struct {
|
||||||
|
GeoNodeID int `json:"geo_node_id"`
|
||||||
|
Healthy bool `json:"healthy"`
|
||||||
|
Health string `json:"health"`
|
||||||
|
HealthStatus string `json:"health_status"`
|
||||||
|
MissingOauthApplication bool `json:"missing_oauth_application"`
|
||||||
|
AttachmentsCount int `json:"attachments_count"`
|
||||||
|
AttachmentsSyncedCount int `json:"attachments_synced_count"`
|
||||||
|
AttachmentsFailedCount int `json:"attachments_failed_count"`
|
||||||
|
AttachmentsSyncedMissingOnPrimaryCount int `json:"attachments_synced_missing_on_primary_count"`
|
||||||
|
AttachmentsSyncedInPercentage string `json:"attachments_synced_in_percentage"`
|
||||||
|
DbReplicationLagSeconds int `json:"db_replication_lag_seconds"`
|
||||||
|
LfsObjectsCount int `json:"lfs_objects_count"`
|
||||||
|
LfsObjectsSyncedCount int `json:"lfs_objects_synced_count"`
|
||||||
|
LfsObjectsFailedCount int `json:"lfs_objects_failed_count"`
|
||||||
|
LfsObjectsSyncedMissingOnPrimaryCount int `json:"lfs_objects_synced_missing_on_primary_count"`
|
||||||
|
LfsObjectsSyncedInPercentage string `json:"lfs_objects_synced_in_percentage"`
|
||||||
|
JobArtifactsCount int `json:"job_artifacts_count"`
|
||||||
|
JobArtifactsSyncedCount int `json:"job_artifacts_synced_count"`
|
||||||
|
JobArtifactsFailedCount int `json:"job_artifacts_failed_count"`
|
||||||
|
JobArtifactsSyncedMissingOnPrimaryCount int `json:"job_artifacts_synced_missing_on_primary_count"`
|
||||||
|
JobArtifactsSyncedInPercentage string `json:"job_artifacts_synced_in_percentage"`
|
||||||
|
ContainerRepositoriesCount int `json:"container_repositories_count"`
|
||||||
|
ContainerRepositoriesSyncedCount int `json:"container_repositories_synced_count"`
|
||||||
|
ContainerRepositoriesFailedCount int `json:"container_repositories_failed_count"`
|
||||||
|
ContainerRepositoriesSyncedInPercentage string `json:"container_repositories_synced_in_percentage"`
|
||||||
|
DesignRepositoriesCount int `json:"design_repositories_count"`
|
||||||
|
DesignRepositoriesSyncedCount int `json:"design_repositories_synced_count"`
|
||||||
|
DesignRepositoriesFailedCount int `json:"design_repositories_failed_count"`
|
||||||
|
DesignRepositoriesSyncedInPercentage string `json:"design_repositories_synced_in_percentage"`
|
||||||
|
ProjectsCount int `json:"projects_count"`
|
||||||
|
RepositoriesCount int `json:"repositories_count"`
|
||||||
|
RepositoriesFailedCount int `json:"repositories_failed_count"`
|
||||||
|
RepositoriesSyncedCount int `json:"repositories_synced_count"`
|
||||||
|
RepositoriesSyncedInPercentage string `json:"repositories_synced_in_percentage"`
|
||||||
|
WikisCount int `json:"wikis_count"`
|
||||||
|
WikisFailedCount int `json:"wikis_failed_count"`
|
||||||
|
WikisSyncedCount int `json:"wikis_synced_count"`
|
||||||
|
WikisSyncedInPercentage string `json:"wikis_synced_in_percentage"`
|
||||||
|
ReplicationSlotsCount int `json:"replication_slots_count"`
|
||||||
|
ReplicationSlotsUsedCount int `json:"replication_slots_used_count"`
|
||||||
|
ReplicationSlotsUsedInPercentage string `json:"replication_slots_used_in_percentage"`
|
||||||
|
ReplicationSlotsMaxRetainedWalBytes int `json:"replication_slots_max_retained_wal_bytes"`
|
||||||
|
RepositoriesCheckedCount int `json:"repositories_checked_count"`
|
||||||
|
RepositoriesCheckedFailedCount int `json:"repositories_checked_failed_count"`
|
||||||
|
RepositoriesCheckedInPercentage string `json:"repositories_checked_in_percentage"`
|
||||||
|
RepositoriesChecksummedCount int `json:"repositories_checksummed_count"`
|
||||||
|
RepositoriesChecksumFailedCount int `json:"repositories_checksum_failed_count"`
|
||||||
|
RepositoriesChecksummedInPercentage string `json:"repositories_checksummed_in_percentage"`
|
||||||
|
WikisChecksummedCount int `json:"wikis_checksummed_count"`
|
||||||
|
WikisChecksumFailedCount int `json:"wikis_checksum_failed_count"`
|
||||||
|
WikisChecksummedInPercentage string `json:"wikis_checksummed_in_percentage"`
|
||||||
|
RepositoriesVerifiedCount int `json:"repositories_verified_count"`
|
||||||
|
RepositoriesVerificationFailedCount int `json:"repositories_verification_failed_count"`
|
||||||
|
RepositoriesVerifiedInPercentage string `json:"repositories_verified_in_percentage"`
|
||||||
|
RepositoriesChecksumMismatchCount int `json:"repositories_checksum_mismatch_count"`
|
||||||
|
WikisVerifiedCount int `json:"wikis_verified_count"`
|
||||||
|
WikisVerificationFailedCount int `json:"wikis_verification_failed_count"`
|
||||||
|
WikisVerifiedInPercentage string `json:"wikis_verified_in_percentage"`
|
||||||
|
WikisChecksumMismatchCount int `json:"wikis_checksum_mismatch_count"`
|
||||||
|
RepositoriesRetryingVerificationCount int `json:"repositories_retrying_verification_count"`
|
||||||
|
WikisRetryingVerificationCount int `json:"wikis_retrying_verification_count"`
|
||||||
|
LastEventID int `json:"last_event_id"`
|
||||||
|
LastEventTimestamp int `json:"last_event_timestamp"`
|
||||||
|
CursorLastEventID int `json:"cursor_last_event_id"`
|
||||||
|
CursorLastEventTimestamp int `json:"cursor_last_event_timestamp"`
|
||||||
|
LastSuccessfulStatusCheckTimestamp int `json:"last_successful_status_check_timestamp"`
|
||||||
|
Version string `json:"version"`
|
||||||
|
Revision string `json:"revision"`
|
||||||
|
MergeRequestDiffsCount int `json:"merge_request_diffs_count"`
|
||||||
|
MergeRequestDiffsChecksumTotalCount int `json:"merge_request_diffs_checksum_total_count"`
|
||||||
|
MergeRequestDiffsChecksummedCount int `json:"merge_request_diffs_checksummed_count"`
|
||||||
|
MergeRequestDiffsChecksumFailedCount int `json:"merge_request_diffs_checksum_failed_count"`
|
||||||
|
MergeRequestDiffsSyncedCount int `json:"merge_request_diffs_synced_count"`
|
||||||
|
MergeRequestDiffsFailedCount int `json:"merge_request_diffs_failed_count"`
|
||||||
|
MergeRequestDiffsRegistryCount int `json:"merge_request_diffs_registry_count"`
|
||||||
|
MergeRequestDiffsVerificationTotalCount int `json:"merge_request_diffs_verification_total_count"`
|
||||||
|
MergeRequestDiffsVerifiedCount int `json:"merge_request_diffs_verified_count"`
|
||||||
|
MergeRequestDiffsVerificationFailedCount int `json:"merge_request_diffs_verification_failed_count"`
|
||||||
|
MergeRequestDiffsSyncedInPercentage string `json:"merge_request_diffs_synced_in_percentage"`
|
||||||
|
MergeRequestDiffsVerifiedInPercentage string `json:"merge_request_diffs_verified_in_percentage"`
|
||||||
|
PackageFilesCount int `json:"package_files_count"`
|
||||||
|
PackageFilesChecksumTotalCount int `json:"package_files_checksum_total_count"`
|
||||||
|
PackageFilesChecksummedCount int `json:"package_files_checksummed_count"`
|
||||||
|
PackageFilesChecksumFailedCount int `json:"package_files_checksum_failed_count"`
|
||||||
|
PackageFilesSyncedCount int `json:"package_files_synced_count"`
|
||||||
|
PackageFilesFailedCount int `json:"package_files_failed_count"`
|
||||||
|
PackageFilesRegistryCount int `json:"package_files_registry_count"`
|
||||||
|
PackageFilesVerificationTotalCount int `json:"package_files_verification_total_count"`
|
||||||
|
PackageFilesVerifiedCount int `json:"package_files_verified_count"`
|
||||||
|
PackageFilesVerificationFailedCount int `json:"package_files_verification_failed_count"`
|
||||||
|
PackageFilesSyncedInPercentage string `json:"package_files_synced_in_percentage"`
|
||||||
|
PackageFilesVerifiedInPercentage string `json:"package_files_verified_in_percentage"`
|
||||||
|
PagesDeploymentsCount int `json:"pages_deployments_count"`
|
||||||
|
PagesDeploymentsChecksumTotalCount int `json:"pages_deployments_checksum_total_count"`
|
||||||
|
PagesDeploymentsChecksummedCount int `json:"pages_deployments_checksummed_count"`
|
||||||
|
PagesDeploymentsChecksumFailedCount int `json:"pages_deployments_checksum_failed_count"`
|
||||||
|
PagesDeploymentsSyncedCount int `json:"pages_deployments_synced_count"`
|
||||||
|
PagesDeploymentsFailedCount int `json:"pages_deployments_failed_count"`
|
||||||
|
PagesDeploymentsRegistryCount int `json:"pages_deployments_registry_count"`
|
||||||
|
PagesDeploymentsVerificationTotalCount int `json:"pages_deployments_verification_total_count"`
|
||||||
|
PagesDeploymentsVerifiedCount int `json:"pages_deployments_verified_count"`
|
||||||
|
PagesDeploymentsVerificationFailedCount int `json:"pages_deployments_verification_failed_count"`
|
||||||
|
PagesDeploymentsSyncedInPercentage string `json:"pages_deployments_synced_in_percentage"`
|
||||||
|
PagesDeploymentsVerifiedInPercentage string `json:"pages_deployments_verified_in_percentage"`
|
||||||
|
TerraformStateVersionsCount int `json:"terraform_state_versions_count"`
|
||||||
|
TerraformStateVersionsChecksumTotalCount int `json:"terraform_state_versions_checksum_total_count"`
|
||||||
|
TerraformStateVersionsChecksummedCount int `json:"terraform_state_versions_checksummed_count"`
|
||||||
|
TerraformStateVersionsChecksumFailedCount int `json:"terraform_state_versions_checksum_failed_count"`
|
||||||
|
TerraformStateVersionsSyncedCount int `json:"terraform_state_versions_synced_count"`
|
||||||
|
TerraformStateVersionsFailedCount int `json:"terraform_state_versions_failed_count"`
|
||||||
|
TerraformStateVersionsRegistryCount int `json:"terraform_state_versions_registry_count"`
|
||||||
|
TerraformStateVersionsVerificationTotalCount int `json:"terraform_state_versions_verification_total_count"`
|
||||||
|
TerraformStateVersionsVerifiedCount int `json:"terraform_state_versions_verified_count"`
|
||||||
|
TerraformStateVersionsVerificationFailedCount int `json:"terraform_state_versions_verification_failed_count"`
|
||||||
|
TerraformStateVersionsSyncedInPercentage string `json:"terraform_state_versions_synced_in_percentage"`
|
||||||
|
TerraformStateVersionsVerifiedInPercentage string `json:"terraform_state_versions_verified_in_percentage"`
|
||||||
|
SnippetRepositoriesCount int `json:"snippet_repositories_count"`
|
||||||
|
SnippetRepositoriesChecksumTotalCount int `json:"snippet_repositories_checksum_total_count"`
|
||||||
|
SnippetRepositoriesChecksummedCount int `json:"snippet_repositories_checksummed_count"`
|
||||||
|
SnippetRepositoriesChecksumFailedCount int `json:"snippet_repositories_checksum_failed_count"`
|
||||||
|
SnippetRepositoriesSyncedCount int `json:"snippet_repositories_synced_count"`
|
||||||
|
SnippetRepositoriesFailedCount int `json:"snippet_repositories_failed_count"`
|
||||||
|
SnippetRepositoriesRegistryCount int `json:"snippet_repositories_registry_count"`
|
||||||
|
SnippetRepositoriesVerificationTotalCount int `json:"snippet_repositories_verification_total_count"`
|
||||||
|
SnippetRepositoriesVerifiedCount int `json:"snippet_repositories_verified_count"`
|
||||||
|
SnippetRepositoriesVerificationFailedCount int `json:"snippet_repositories_verification_failed_count"`
|
||||||
|
SnippetRepositoriesSyncedInPercentage string `json:"snippet_repositories_synced_in_percentage"`
|
||||||
|
SnippetRepositoriesVerifiedInPercentage string `json:"snippet_repositories_verified_in_percentage"`
|
||||||
|
GroupWikiRepositoriesCount int `json:"group_wiki_repositories_count"`
|
||||||
|
GroupWikiRepositoriesChecksumTotalCount int `json:"group_wiki_repositories_checksum_total_count"`
|
||||||
|
GroupWikiRepositoriesChecksummedCount int `json:"group_wiki_repositories_checksummed_count"`
|
||||||
|
GroupWikiRepositoriesChecksumFailedCount int `json:"group_wiki_repositories_checksum_failed_count"`
|
||||||
|
GroupWikiRepositoriesSyncedCount int `json:"group_wiki_repositories_synced_count"`
|
||||||
|
GroupWikiRepositoriesFailedCount int `json:"group_wiki_repositories_failed_count"`
|
||||||
|
GroupWikiRepositoriesRegistryCount int `json:"group_wiki_repositories_registry_count"`
|
||||||
|
GroupWikiRepositoriesVerificationTotalCount int `json:"group_wiki_repositories_verification_total_count"`
|
||||||
|
GroupWikiRepositoriesVerifiedCount int `json:"group_wiki_repositories_verified_count"`
|
||||||
|
GroupWikiRepositoriesVerificationFailedCount int `json:"group_wiki_repositories_verification_failed_count"`
|
||||||
|
GroupWikiRepositoriesSyncedInPercentage string `json:"group_wiki_repositories_synced_in_percentage"`
|
||||||
|
GroupWikiRepositoriesVerifiedInPercentage string `json:"group_wiki_repositories_verified_in_percentage"`
|
||||||
|
PipelineArtifactsCount int `json:"pipeline_artifacts_count"`
|
||||||
|
PipelineArtifactsChecksumTotalCount int `json:"pipeline_artifacts_checksum_total_count"`
|
||||||
|
PipelineArtifactsChecksummedCount int `json:"pipeline_artifacts_checksummed_count"`
|
||||||
|
PipelineArtifactsChecksumFailedCount int `json:"pipeline_artifacts_checksum_failed_count"`
|
||||||
|
PipelineArtifactsSyncedCount int `json:"pipeline_artifacts_synced_count"`
|
||||||
|
PipelineArtifactsFailedCount int `json:"pipeline_artifacts_failed_count"`
|
||||||
|
PipelineArtifactsRegistryCount int `json:"pipeline_artifacts_registry_count"`
|
||||||
|
PipelineArtifactsVerificationTotalCount int `json:"pipeline_artifacts_verification_total_count"`
|
||||||
|
PipelineArtifactsVerifiedCount int `json:"pipeline_artifacts_verified_count"`
|
||||||
|
PipelineArtifactsVerificationFailedCount int `json:"pipeline_artifacts_verification_failed_count"`
|
||||||
|
PipelineArtifactsSyncedInPercentage string `json:"pipeline_artifacts_synced_in_percentage"`
|
||||||
|
PipelineArtifactsVerifiedInPercentage string `json:"pipeline_artifacts_verified_in_percentage"`
|
||||||
|
UploadsCount int `json:"uploads_count"`
|
||||||
|
UploadsSyncedCount int `json:"uploads_synced_count"`
|
||||||
|
UploadsFailedCount int `json:"uploads_failed_count"`
|
||||||
|
UploadsRegistryCount int `json:"uploads_registry_count"`
|
||||||
|
UploadsSyncedInPercentage string `json:"uploads_synced_in_percentage"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetrieveStatusOfAllGeoNodes get the list of status of all Geo Nodes.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-all-geo-nodes
|
||||||
|
func (s *GeoNodesService) RetrieveStatusOfAllGeoNodes(options ...RequestOptionFunc) ([]*GeoNodeStatus, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, "geo_nodes/status", nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var gnss []*GeoNodeStatus
|
||||||
|
resp, err := s.client.Do(req, &gnss)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return gnss, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetrieveStatusOfGeoNode get the of status of a specific Geo Nodes.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/geo_nodes.html#retrieve-status-about-a-specific-geo-node
|
||||||
|
func (s *GeoNodesService) RetrieveStatusOfGeoNode(id int, options ...RequestOptionFunc) (*GeoNodeStatus, *Response, error) {
|
||||||
|
u := fmt.Sprintf("geo_nodes/%d/status", id)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
gns := new(GeoNodeStatus)
|
||||||
|
resp, err := s.client.Do(req, gns)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return gns, resp, err
|
||||||
|
}
|
66
vendor/github.com/xanzy/go-gitlab/gitlab.go
generated
vendored
66
vendor/github.com/xanzy/go-gitlab/gitlab.go
generated
vendored
|
@ -48,19 +48,19 @@ const (
|
||||||
headerRateReset = "RateLimit-Reset"
|
headerRateReset = "RateLimit-Reset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// authType represents an authentication type within GitLab.
|
// AuthType represents an authentication type within GitLab.
|
||||||
//
|
//
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/
|
// GitLab API docs: https://docs.gitlab.com/ce/api/
|
||||||
type authType int
|
type AuthType int
|
||||||
|
|
||||||
// List of available authentication types.
|
// List of available authentication types.
|
||||||
//
|
//
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/
|
// GitLab API docs: https://docs.gitlab.com/ce/api/
|
||||||
const (
|
const (
|
||||||
basicAuth authType = iota
|
BasicAuth AuthType = iota
|
||||||
jobToken
|
JobToken
|
||||||
oAuthToken
|
OAuthToken
|
||||||
privateToken
|
PrivateToken
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Client manages communication with the GitLab API.
|
// A Client manages communication with the GitLab API.
|
||||||
|
@ -84,7 +84,7 @@ type Client struct {
|
||||||
limiter RateLimiter
|
limiter RateLimiter
|
||||||
|
|
||||||
// Token type used to make authenticated API calls.
|
// Token type used to make authenticated API calls.
|
||||||
authType authType
|
authType AuthType
|
||||||
|
|
||||||
// Username and password used for basix authentication.
|
// Username and password used for basix authentication.
|
||||||
username, password string
|
username, password string
|
||||||
|
@ -119,8 +119,11 @@ type Client struct {
|
||||||
EpicIssues *EpicIssuesService
|
EpicIssues *EpicIssuesService
|
||||||
Epics *EpicsService
|
Epics *EpicsService
|
||||||
Events *EventsService
|
Events *EventsService
|
||||||
|
ExternalStatusChecks *ExternalStatusChecksService
|
||||||
Features *FeaturesService
|
Features *FeaturesService
|
||||||
FreezePeriods *FreezePeriodsService
|
FreezePeriods *FreezePeriodsService
|
||||||
|
GenericPackages *GenericPackagesService
|
||||||
|
GeoNodes *GeoNodesService
|
||||||
GitIgnoreTemplates *GitIgnoreTemplatesService
|
GitIgnoreTemplates *GitIgnoreTemplatesService
|
||||||
GroupBadges *GroupBadgesService
|
GroupBadges *GroupBadgesService
|
||||||
GroupCluster *GroupClustersService
|
GroupCluster *GroupClustersService
|
||||||
|
@ -156,6 +159,7 @@ type Client struct {
|
||||||
PipelineSchedules *PipelineSchedulesService
|
PipelineSchedules *PipelineSchedulesService
|
||||||
PipelineTriggers *PipelineTriggersService
|
PipelineTriggers *PipelineTriggersService
|
||||||
Pipelines *PipelinesService
|
Pipelines *PipelinesService
|
||||||
|
PlanLimits *PlanLimitsService
|
||||||
ProjectBadges *ProjectBadgesService
|
ProjectBadges *ProjectBadgesService
|
||||||
ProjectAccessTokens *ProjectAccessTokensService
|
ProjectAccessTokens *ProjectAccessTokensService
|
||||||
ProjectCluster *ProjectClustersService
|
ProjectCluster *ProjectClustersService
|
||||||
|
@ -211,7 +215,7 @@ func NewClient(token string, options ...ClientOptionFunc) (*Client, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client.authType = privateToken
|
client.authType = PrivateToken
|
||||||
client.token = token
|
client.token = token
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
@ -224,7 +228,7 @@ func NewBasicAuthClient(username, password string, options ...ClientOptionFunc)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
client.authType = basicAuth
|
client.authType = BasicAuth
|
||||||
client.username = username
|
client.username = username
|
||||||
client.password = password
|
client.password = password
|
||||||
|
|
||||||
|
@ -238,7 +242,7 @@ func NewJobClient(token string, options ...ClientOptionFunc) (*Client, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client.authType = jobToken
|
client.authType = JobToken
|
||||||
client.token = token
|
client.token = token
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
@ -250,7 +254,7 @@ func NewOAuthClient(token string, options ...ClientOptionFunc) (*Client, error)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client.authType = oAuthToken
|
client.authType = OAuthToken
|
||||||
client.token = token
|
client.token = token
|
||||||
return client, nil
|
return client, nil
|
||||||
}
|
}
|
||||||
|
@ -306,8 +310,11 @@ func newClient(options ...ClientOptionFunc) (*Client, error) {
|
||||||
c.EpicIssues = &EpicIssuesService{client: c}
|
c.EpicIssues = &EpicIssuesService{client: c}
|
||||||
c.Epics = &EpicsService{client: c}
|
c.Epics = &EpicsService{client: c}
|
||||||
c.Events = &EventsService{client: c}
|
c.Events = &EventsService{client: c}
|
||||||
|
c.ExternalStatusChecks = &ExternalStatusChecksService{client: c}
|
||||||
c.Features = &FeaturesService{client: c}
|
c.Features = &FeaturesService{client: c}
|
||||||
c.FreezePeriods = &FreezePeriodsService{client: c}
|
c.FreezePeriods = &FreezePeriodsService{client: c}
|
||||||
|
c.GenericPackages = &GenericPackagesService{client: c}
|
||||||
|
c.GeoNodes = &GeoNodesService{client: c}
|
||||||
c.GitIgnoreTemplates = &GitIgnoreTemplatesService{client: c}
|
c.GitIgnoreTemplates = &GitIgnoreTemplatesService{client: c}
|
||||||
c.GroupBadges = &GroupBadgesService{client: c}
|
c.GroupBadges = &GroupBadgesService{client: c}
|
||||||
c.GroupCluster = &GroupClustersService{client: c}
|
c.GroupCluster = &GroupClustersService{client: c}
|
||||||
|
@ -343,6 +350,7 @@ func newClient(options ...ClientOptionFunc) (*Client, error) {
|
||||||
c.PipelineSchedules = &PipelineSchedulesService{client: c}
|
c.PipelineSchedules = &PipelineSchedulesService{client: c}
|
||||||
c.PipelineTriggers = &PipelineTriggersService{client: c}
|
c.PipelineTriggers = &PipelineTriggersService{client: c}
|
||||||
c.Pipelines = &PipelinesService{client: c}
|
c.Pipelines = &PipelinesService{client: c}
|
||||||
|
c.PlanLimits = &PlanLimitsService{client: c}
|
||||||
c.ProjectBadges = &ProjectBadgesService{client: c}
|
c.ProjectBadges = &ProjectBadgesService{client: c}
|
||||||
c.ProjectAccessTokens = &ProjectAccessTokensService{client: c}
|
c.ProjectAccessTokens = &ProjectAccessTokensService{client: c}
|
||||||
c.ProjectCluster = &ProjectClustersService{client: c}
|
c.ProjectCluster = &ProjectClustersService{client: c}
|
||||||
|
@ -608,22 +616,22 @@ const (
|
||||||
// populatePageValues parses the HTTP Link response headers and populates the
|
// populatePageValues parses the HTTP Link response headers and populates the
|
||||||
// various pagination link values in the Response.
|
// various pagination link values in the Response.
|
||||||
func (r *Response) populatePageValues() {
|
func (r *Response) populatePageValues() {
|
||||||
if totalItems := r.Response.Header.Get(xTotal); totalItems != "" {
|
if totalItems := r.Header.Get(xTotal); totalItems != "" {
|
||||||
r.TotalItems, _ = strconv.Atoi(totalItems)
|
r.TotalItems, _ = strconv.Atoi(totalItems)
|
||||||
}
|
}
|
||||||
if totalPages := r.Response.Header.Get(xTotalPages); totalPages != "" {
|
if totalPages := r.Header.Get(xTotalPages); totalPages != "" {
|
||||||
r.TotalPages, _ = strconv.Atoi(totalPages)
|
r.TotalPages, _ = strconv.Atoi(totalPages)
|
||||||
}
|
}
|
||||||
if itemsPerPage := r.Response.Header.Get(xPerPage); itemsPerPage != "" {
|
if itemsPerPage := r.Header.Get(xPerPage); itemsPerPage != "" {
|
||||||
r.ItemsPerPage, _ = strconv.Atoi(itemsPerPage)
|
r.ItemsPerPage, _ = strconv.Atoi(itemsPerPage)
|
||||||
}
|
}
|
||||||
if currentPage := r.Response.Header.Get(xPage); currentPage != "" {
|
if currentPage := r.Header.Get(xPage); currentPage != "" {
|
||||||
r.CurrentPage, _ = strconv.Atoi(currentPage)
|
r.CurrentPage, _ = strconv.Atoi(currentPage)
|
||||||
}
|
}
|
||||||
if nextPage := r.Response.Header.Get(xNextPage); nextPage != "" {
|
if nextPage := r.Header.Get(xNextPage); nextPage != "" {
|
||||||
r.NextPage, _ = strconv.Atoi(nextPage)
|
r.NextPage, _ = strconv.Atoi(nextPage)
|
||||||
}
|
}
|
||||||
if previousPage := r.Response.Header.Get(xPrevPage); previousPage != "" {
|
if previousPage := r.Header.Get(xPrevPage); previousPage != "" {
|
||||||
r.PreviousPage, _ = strconv.Atoi(previousPage)
|
r.PreviousPage, _ = strconv.Atoi(previousPage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -648,7 +656,7 @@ func (c *Client) Do(req *retryablehttp.Request, v interface{}) (*Response, error
|
||||||
// if we already have a token and if not first authenticate and get one.
|
// if we already have a token and if not first authenticate and get one.
|
||||||
var basicAuthToken string
|
var basicAuthToken string
|
||||||
switch c.authType {
|
switch c.authType {
|
||||||
case basicAuth:
|
case BasicAuth:
|
||||||
c.tokenLock.RLock()
|
c.tokenLock.RLock()
|
||||||
basicAuthToken = c.token
|
basicAuthToken = c.token
|
||||||
c.tokenLock.RUnlock()
|
c.tokenLock.RUnlock()
|
||||||
|
@ -660,12 +668,18 @@ func (c *Client) Do(req *retryablehttp.Request, v interface{}) (*Response, error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
req.Header.Set("Authorization", "Bearer "+basicAuthToken)
|
req.Header.Set("Authorization", "Bearer "+basicAuthToken)
|
||||||
case jobToken:
|
case JobToken:
|
||||||
req.Header.Set("JOB-TOKEN", c.token)
|
if values := req.Header.Values("JOB-TOKEN"); len(values) == 0 {
|
||||||
case oAuthToken:
|
req.Header.Set("JOB-TOKEN", c.token)
|
||||||
req.Header.Set("Authorization", "Bearer "+c.token)
|
}
|
||||||
case privateToken:
|
case OAuthToken:
|
||||||
req.Header.Set("PRIVATE-TOKEN", c.token)
|
if values := req.Header.Values("Authorization"); len(values) == 0 {
|
||||||
|
req.Header.Set("Authorization", "Bearer "+c.token)
|
||||||
|
}
|
||||||
|
case PrivateToken:
|
||||||
|
if values := req.Header.Values("PRIVATE-TOKEN"); len(values) == 0 {
|
||||||
|
req.Header.Set("PRIVATE-TOKEN", c.token)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := c.client.Do(req)
|
resp, err := c.client.Do(req)
|
||||||
|
@ -673,7 +687,7 @@ func (c *Client) Do(req *retryablehttp.Request, v interface{}) (*Response, error
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode == http.StatusUnauthorized && c.authType == basicAuth {
|
if resp.StatusCode == http.StatusUnauthorized && c.authType == BasicAuth {
|
||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
// The token most likely expired, so we need to request a new one and try again.
|
// The token most likely expired, so we need to request a new one and try again.
|
||||||
if _, err := c.requestOAuthToken(req.Context(), basicAuthToken); err != nil {
|
if _, err := c.requestOAuthToken(req.Context(), basicAuthToken); err != nil {
|
||||||
|
@ -744,7 +758,7 @@ func parseID(id interface{}) (string, error) {
|
||||||
|
|
||||||
// Helper function to escape a project identifier.
|
// Helper function to escape a project identifier.
|
||||||
func pathEscape(s string) string {
|
func pathEscape(s string) string {
|
||||||
return strings.Replace(url.PathEscape(s), ".", "%2E", -1)
|
return strings.ReplaceAll(url.PathEscape(s), ".", "%2E")
|
||||||
}
|
}
|
||||||
|
|
||||||
// An ErrorResponse reports one or more errors caused by an API request.
|
// An ErrorResponse reports one or more errors caused by an API request.
|
||||||
|
|
2
vendor/github.com/xanzy/go-gitlab/group_boards.go
generated
vendored
2
vendor/github.com/xanzy/go-gitlab/group_boards.go
generated
vendored
|
@ -319,7 +319,7 @@ func (s *GroupIssueBoardsService) UpdateIssueBoardList(gid interface{}, board, l
|
||||||
}
|
}
|
||||||
|
|
||||||
var gbl []*BoardList
|
var gbl []*BoardList
|
||||||
resp, err := s.client.Do(req, gbl)
|
resp, err := s.client.Do(req, &gbl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, resp, err
|
return nil, resp, err
|
||||||
}
|
}
|
||||||
|
|
6
vendor/github.com/xanzy/go-gitlab/merge_requests.go
generated
vendored
6
vendor/github.com/xanzy/go-gitlab/merge_requests.go
generated
vendored
|
@ -154,6 +154,7 @@ type ListMergeRequestsOptions struct {
|
||||||
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
||||||
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
||||||
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
||||||
|
AuthorUsername *string `url:"author_username,omitempty" json:"author_username,omitempty"`
|
||||||
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
||||||
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
||||||
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
||||||
|
@ -162,6 +163,7 @@ type ListMergeRequestsOptions struct {
|
||||||
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
||||||
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
||||||
In *string `url:"in,omitempty" json:"in,omitempty"`
|
In *string `url:"in,omitempty" json:"in,omitempty"`
|
||||||
|
Draft *bool `url:"draft,omitempty" json:"draft,omitempty"`
|
||||||
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +211,7 @@ type ListGroupMergeRequestsOptions struct {
|
||||||
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
||||||
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
||||||
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
||||||
|
AuthorUsername *string `url:"author_username,omitempty" json:"author_username,omitempty"`
|
||||||
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
||||||
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
||||||
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
||||||
|
@ -217,6 +220,7 @@ type ListGroupMergeRequestsOptions struct {
|
||||||
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
||||||
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
||||||
In *string `url:"in,omitempty" json:"in,omitempty"`
|
In *string `url:"in,omitempty" json:"in,omitempty"`
|
||||||
|
Draft *bool `url:"draft,omitempty" json:"draft,omitempty"`
|
||||||
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,6 +272,7 @@ type ListProjectMergeRequestsOptions struct {
|
||||||
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
UpdatedBefore *time.Time `url:"updated_before,omitempty" json:"updated_before,omitempty"`
|
||||||
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
Scope *string `url:"scope,omitempty" json:"scope,omitempty"`
|
||||||
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
AuthorID *int `url:"author_id,omitempty" json:"author_id,omitempty"`
|
||||||
|
AuthorUsername *string `url:"author_username,omitempty" json:"author_username,omitempty"`
|
||||||
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
AssigneeID *int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
|
||||||
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
ReviewerID *int `url:"reviewer_id,omitempty" json:"reviewer_id,omitempty"`
|
||||||
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
ReviewerUsername *string `url:"reviewer_username,omitempty" json:"reviewer_username,omitempty"`
|
||||||
|
@ -275,6 +280,7 @@ type ListProjectMergeRequestsOptions struct {
|
||||||
SourceBranch *string `url:"source_branch,omitempty" json:"source_branch,omitempty"`
|
SourceBranch *string `url:"source_branch,omitempty" json:"source_branch,omitempty"`
|
||||||
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
TargetBranch *string `url:"target_branch,omitempty" json:"target_branch,omitempty"`
|
||||||
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
||||||
|
Draft *bool `url:"draft,omitempty" json:"draft,omitempty"`
|
||||||
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
WIP *string `url:"wip,omitempty" json:"wip,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
104
vendor/github.com/xanzy/go-gitlab/plan_limits.go
generated
vendored
Normal file
104
vendor/github.com/xanzy/go-gitlab/plan_limits.go
generated
vendored
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
//
|
||||||
|
// Copyright 2021, Igor Varavko
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
package gitlab
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
// PlanLimitsService handles communication with the repositories related
|
||||||
|
// methods of the GitLab API.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/plan_limits.html
|
||||||
|
type PlanLimitsService struct {
|
||||||
|
client *Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// PlanLimit represents a GitLab pipeline.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ee/api/plan_limits.html
|
||||||
|
type PlanLimit struct {
|
||||||
|
ConanMaxFileSize int `json:"conan_max_file_size,omitempty"`
|
||||||
|
GenericPackagesMaxFileSize int `json:"generic_packages_max_file_size,omitempty"`
|
||||||
|
HelmMaxFileSize int `json:"helm_max_file_size,omitempty"`
|
||||||
|
MavenMaxFileSize int `json:"maven_max_file_size,omitempty"`
|
||||||
|
NPMMaxFileSize int `json:"npm_max_file_size,omitempty"`
|
||||||
|
NugetMaxFileSize int `json:"nuget_max_file_size,omitempty"`
|
||||||
|
PyPiMaxFileSize int `json:"pypi_max_file_size,omitempty"`
|
||||||
|
TerraformModuleMaxFileSize int `json:"terraform_module_max_file_size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCurrentPlanLimitsOptions represents the available GetCurrentPlanLimits()
|
||||||
|
// options.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/plan_limits.html#get-current-plan-limits
|
||||||
|
type GetCurrentPlanLimitsOptions struct {
|
||||||
|
PlanName *string `url:"plan_name,omitempty" json:"plan_name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List the current limits of a plan on the GitLab instance.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/plan_limits.html#get-current-plan-limits
|
||||||
|
func (s *PlanLimitsService) GetCurrentPlanLimits(opt *GetCurrentPlanLimitsOptions, options ...RequestOptionFunc) (*PlanLimit, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, "application/plan_limits", opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pl := new(PlanLimit)
|
||||||
|
resp, err := s.client.Do(req, pl)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return pl, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangePlanLimitOptions represents the available ChangePlanLimits() options.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/plan_limits.html#change-plan-limits
|
||||||
|
type ChangePlanLimitOptions struct {
|
||||||
|
PlanName *string `url:"plan_name,omitempty" json:"plan_name,omitempty"`
|
||||||
|
ConanMaxFileSize *int `url:"conan_max_file_size,omitempty" json:"conan_max_file_size,omitempty"`
|
||||||
|
GenericPackagesMaxFileSize *int `url:"generic_packages_max_file_size,omitempty" json:"generic_packages_max_file_size,omitempty"`
|
||||||
|
HelmMaxFileSize *int `url:"helm_max_file_size,omitempty" json:"helm_max_file_size,omitempty"`
|
||||||
|
MavenMaxFileSize *int `url:"maven_max_file_size,omitempty" json:"maven_max_file_size,omitempty"`
|
||||||
|
NPMMaxFileSize *int `url:"npm_max_file_size,omitempty" json:"npm_max_file_size,omitempty"`
|
||||||
|
NugetMaxFileSize *int `url:"nuget_max_file_size,omitempty" json:"nuget_max_file_size,omitempty"`
|
||||||
|
PyPiMaxFileSize *int `url:"pypi_max_file_size,omitempty" json:"pypi_max_file_size,omitempty"`
|
||||||
|
TerraformModuleMaxFileSize *int `url:"terraform_module_max_file_size,omitempty" json:"terraform_module_max_file_size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangePlanLimits modifies the limits of a plan on the GitLab instance.
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ee/api/plan_limits.html#change-plan-limits
|
||||||
|
func (s *PlanLimitsService) ChangePlanLimits(opt *ChangePlanLimitOptions, options ...RequestOptionFunc) (*PlanLimit, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodPut, "application/plan_limits", opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pl := new(PlanLimit)
|
||||||
|
resp, err := s.client.Do(req, pl)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return pl, resp, err
|
||||||
|
}
|
4
vendor/github.com/xanzy/go-gitlab/projects.go
generated
vendored
4
vendor/github.com/xanzy/go-gitlab/projects.go
generated
vendored
|
@ -88,6 +88,7 @@ type Project struct {
|
||||||
OnlyAllowMergeIfAllDiscussionsAreResolved bool `json:"only_allow_merge_if_all_discussions_are_resolved"`
|
OnlyAllowMergeIfAllDiscussionsAreResolved bool `json:"only_allow_merge_if_all_discussions_are_resolved"`
|
||||||
RemoveSourceBranchAfterMerge bool `json:"remove_source_branch_after_merge"`
|
RemoveSourceBranchAfterMerge bool `json:"remove_source_branch_after_merge"`
|
||||||
LFSEnabled bool `json:"lfs_enabled"`
|
LFSEnabled bool `json:"lfs_enabled"`
|
||||||
|
RepositoryStorage string `json:"repository_storage"`
|
||||||
RequestAccessEnabled bool `json:"request_access_enabled"`
|
RequestAccessEnabled bool `json:"request_access_enabled"`
|
||||||
MergeMethod MergeMethodValue `json:"merge_method"`
|
MergeMethod MergeMethodValue `json:"merge_method"`
|
||||||
ForkedFromProject *ForkParent `json:"forked_from_project"`
|
ForkedFromProject *ForkParent `json:"forked_from_project"`
|
||||||
|
@ -282,6 +283,7 @@ type ListProjectsOptions struct {
|
||||||
OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"`
|
OrderBy *string `url:"order_by,omitempty" json:"order_by,omitempty"`
|
||||||
Owned *bool `url:"owned,omitempty" json:"owned,omitempty"`
|
Owned *bool `url:"owned,omitempty" json:"owned,omitempty"`
|
||||||
RepositoryChecksumFailed *bool `url:"repository_checksum_failed,omitempty" json:"repository_checksum_failed,omitempty"`
|
RepositoryChecksumFailed *bool `url:"repository_checksum_failed,omitempty" json:"repository_checksum_failed,omitempty"`
|
||||||
|
RepositoryStorage *string `url:"repository_storage,omitempty" json:"repository_storage,omitempty"`
|
||||||
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
Search *string `url:"search,omitempty" json:"search,omitempty"`
|
||||||
SearchNamespaces *bool `url:"search_namespaces,omitempty" json:"search_namespaces,omitempty"`
|
SearchNamespaces *bool `url:"search_namespaces,omitempty" json:"search_namespaces,omitempty"`
|
||||||
Simple *bool `url:"simple,omitempty" json:"simple,omitempty"`
|
Simple *bool `url:"simple,omitempty" json:"simple,omitempty"`
|
||||||
|
@ -598,6 +600,7 @@ type CreateProjectOptions struct {
|
||||||
PublicBuilds *bool `url:"public_builds,omitempty" json:"public_builds,omitempty"`
|
PublicBuilds *bool `url:"public_builds,omitempty" json:"public_builds,omitempty"`
|
||||||
RemoveSourceBranchAfterMerge *bool `url:"remove_source_branch_after_merge,omitempty" json:"remove_source_branch_after_merge,omitempty"`
|
RemoveSourceBranchAfterMerge *bool `url:"remove_source_branch_after_merge,omitempty" json:"remove_source_branch_after_merge,omitempty"`
|
||||||
RepositoryAccessLevel *AccessControlValue `url:"repository_access_level,omitempty" json:"repository_access_level,omitempty"`
|
RepositoryAccessLevel *AccessControlValue `url:"repository_access_level,omitempty" json:"repository_access_level,omitempty"`
|
||||||
|
RepositoryStorage *string `url:"repository_storage,omitempty" json:"repository_storage,omitempty"`
|
||||||
RequestAccessEnabled *bool `url:"request_access_enabled,omitempty" json:"request_access_enabled,omitempty"`
|
RequestAccessEnabled *bool `url:"request_access_enabled,omitempty" json:"request_access_enabled,omitempty"`
|
||||||
RequirementsAccessLevel *AccessControlValue `url:"requirements_access_level,omitempty" json:"requirements_access_level,omitempty"`
|
RequirementsAccessLevel *AccessControlValue `url:"requirements_access_level,omitempty" json:"requirements_access_level,omitempty"`
|
||||||
ResolveOutdatedDiffDiscussions *bool `url:"resolve_outdated_diff_discussions,omitempty" json:"resolve_outdated_diff_discussions,omitempty"`
|
ResolveOutdatedDiffDiscussions *bool `url:"resolve_outdated_diff_discussions,omitempty" json:"resolve_outdated_diff_discussions,omitempty"`
|
||||||
|
@ -746,6 +749,7 @@ type EditProjectOptions struct {
|
||||||
PublicBuilds *bool `url:"public_builds,omitempty" json:"public_builds,omitempty"`
|
PublicBuilds *bool `url:"public_builds,omitempty" json:"public_builds,omitempty"`
|
||||||
RemoveSourceBranchAfterMerge *bool `url:"remove_source_branch_after_merge,omitempty" json:"remove_source_branch_after_merge,omitempty"`
|
RemoveSourceBranchAfterMerge *bool `url:"remove_source_branch_after_merge,omitempty" json:"remove_source_branch_after_merge,omitempty"`
|
||||||
RepositoryAccessLevel *AccessControlValue `url:"repository_access_level,omitempty" json:"repository_access_level,omitempty"`
|
RepositoryAccessLevel *AccessControlValue `url:"repository_access_level,omitempty" json:"repository_access_level,omitempty"`
|
||||||
|
RepositoryStorage *string `url:"repository_storage,omitempty" json:"repository_storage,omitempty"`
|
||||||
RequestAccessEnabled *bool `url:"request_access_enabled,omitempty" json:"request_access_enabled,omitempty"`
|
RequestAccessEnabled *bool `url:"request_access_enabled,omitempty" json:"request_access_enabled,omitempty"`
|
||||||
RequirementsAccessLevel *AccessControlValue `url:"requirements_access_level,omitempty" json:"requirements_access_level,omitempty"`
|
RequirementsAccessLevel *AccessControlValue `url:"requirements_access_level,omitempty" json:"requirements_access_level,omitempty"`
|
||||||
ResolveOutdatedDiffDiscussions *bool `url:"resolve_outdated_diff_discussions,omitempty" json:"resolve_outdated_diff_discussions,omitempty"`
|
ResolveOutdatedDiffDiscussions *bool `url:"resolve_outdated_diff_discussions,omitempty" json:"resolve_outdated_diff_discussions,omitempty"`
|
||||||
|
|
23
vendor/github.com/xanzy/go-gitlab/request_options.go
generated
vendored
23
vendor/github.com/xanzy/go-gitlab/request_options.go
generated
vendored
|
@ -25,7 +25,15 @@ import (
|
||||||
// RequestOptionFunc can be passed to all API requests to customize the API request.
|
// RequestOptionFunc can be passed to all API requests to customize the API request.
|
||||||
type RequestOptionFunc func(*retryablehttp.Request) error
|
type RequestOptionFunc func(*retryablehttp.Request) error
|
||||||
|
|
||||||
// WithSudo takes either a username or user ID and sets the SUDO request header
|
// WithContext runs the request with the provided context
|
||||||
|
func WithContext(ctx context.Context) RequestOptionFunc {
|
||||||
|
return func(req *retryablehttp.Request) error {
|
||||||
|
*req = *req.WithContext(ctx)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithSudo takes either a username or user ID and sets the SUDO request header.
|
||||||
func WithSudo(uid interface{}) RequestOptionFunc {
|
func WithSudo(uid interface{}) RequestOptionFunc {
|
||||||
return func(req *retryablehttp.Request) error {
|
return func(req *retryablehttp.Request) error {
|
||||||
user, err := parseID(uid)
|
user, err := parseID(uid)
|
||||||
|
@ -37,10 +45,17 @@ func WithSudo(uid interface{}) RequestOptionFunc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WithContext runs the request with the provided context
|
// WithToken takes a token which is then used when making this one request.
|
||||||
func WithContext(ctx context.Context) RequestOptionFunc {
|
func WithToken(authType AuthType, token string) RequestOptionFunc {
|
||||||
return func(req *retryablehttp.Request) error {
|
return func(req *retryablehttp.Request) error {
|
||||||
*req = *req.WithContext(ctx)
|
switch authType {
|
||||||
|
case JobToken:
|
||||||
|
req.Header.Set("JOB-TOKEN", token)
|
||||||
|
case OAuthToken:
|
||||||
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
|
case PrivateToken:
|
||||||
|
req.Header.Set("PRIVATE-TOKEN", token)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
vendor/github.com/xanzy/go-gitlab/types.go
generated
vendored
33
vendor/github.com/xanzy/go-gitlab/types.go
generated
vendored
|
@ -199,6 +199,39 @@ func FileAction(v FileActionValue) *FileActionValue {
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GenericPackageSelectValue represents a generic package select value.
|
||||||
|
type GenericPackageSelectValue string
|
||||||
|
|
||||||
|
// The available generic package select values.
|
||||||
|
const (
|
||||||
|
SelectPackageFile GenericPackageSelectValue = "package_file"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenericPackageSelect is a helper routine that allocates a new
|
||||||
|
// GenericPackageSelectValue value to store v and returns a pointer to it.
|
||||||
|
func GenericPackageSelect(v GenericPackageSelectValue) *GenericPackageSelectValue {
|
||||||
|
p := new(GenericPackageSelectValue)
|
||||||
|
*p = v
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenericPackageStatusValue represents a generic package status.
|
||||||
|
type GenericPackageStatusValue string
|
||||||
|
|
||||||
|
// The available generic package statuses.
|
||||||
|
const (
|
||||||
|
PackageDefault GenericPackageStatusValue = "default"
|
||||||
|
PackageHidden GenericPackageStatusValue = "hidden"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenericPackageStatus is a helper routine that allocates a new
|
||||||
|
// GenericPackageStatusValue value to store v and returns a pointer to it.
|
||||||
|
func GenericPackageStatus(v GenericPackageStatusValue) *GenericPackageStatusValue {
|
||||||
|
p := new(GenericPackageStatusValue)
|
||||||
|
*p = v
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
// ISOTime represents an ISO 8601 formatted date
|
// ISOTime represents an ISO 8601 formatted date
|
||||||
type ISOTime time.Time
|
type ISOTime time.Time
|
||||||
|
|
||||||
|
|
450
vendor/github.com/xanzy/go-gitlab/users.go
generated
vendored
450
vendor/github.com/xanzy/go-gitlab/users.go
generated
vendored
|
@ -26,9 +26,12 @@ import (
|
||||||
// List a couple of standard errors.
|
// List a couple of standard errors.
|
||||||
var (
|
var (
|
||||||
ErrUserActivatePrevented = errors.New("Cannot activate a user that is blocked by admin or by LDAP synchronization")
|
ErrUserActivatePrevented = errors.New("Cannot activate a user that is blocked by admin or by LDAP synchronization")
|
||||||
|
ErrUserApprovePrevented = errors.New("Cannot approve a user that is blocked by admin or by LDAP synchronization")
|
||||||
ErrUserBlockPrevented = errors.New("Cannot block a user that is already blocked by LDAP synchronization")
|
ErrUserBlockPrevented = errors.New("Cannot block a user that is already blocked by LDAP synchronization")
|
||||||
ErrUserDeactivatePrevented = errors.New("Cannot deactivate a user that is blocked by admin or by LDAP synchronization, or that has any activity in past 180 days")
|
ErrUserConflict = errors.New("User does not have a pending request")
|
||||||
|
ErrUserDeactivatePrevented = errors.New("Cannot deactivate a user that is blocked by admin or by LDAP synchronization")
|
||||||
ErrUserNotFound = errors.New("User does not exist")
|
ErrUserNotFound = errors.New("User does not exist")
|
||||||
|
ErrUserRejectPrevented = errors.New("Cannot reject a user if not authenticated as administrator")
|
||||||
ErrUserUnblockPrevented = errors.New("Cannot unblock a user that is blocked by LDAP synchronization")
|
ErrUserUnblockPrevented = errors.New("Cannot unblock a user that is blocked by LDAP synchronization")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -70,6 +73,7 @@ type User struct {
|
||||||
Twitter string `json:"twitter"`
|
Twitter string `json:"twitter"`
|
||||||
WebsiteURL string `json:"website_url"`
|
WebsiteURL string `json:"website_url"`
|
||||||
Organization string `json:"organization"`
|
Organization string `json:"organization"`
|
||||||
|
JobTitle string `json:"job_title"`
|
||||||
ExternUID string `json:"extern_uid"`
|
ExternUID string `json:"extern_uid"`
|
||||||
Provider string `json:"provider"`
|
Provider string `json:"provider"`
|
||||||
ThemeID int `json:"theme_id"`
|
ThemeID int `json:"theme_id"`
|
||||||
|
@ -185,6 +189,7 @@ type CreateUserOptions struct {
|
||||||
Twitter *string `url:"twitter,omitempty" json:"twitter,omitempty"`
|
Twitter *string `url:"twitter,omitempty" json:"twitter,omitempty"`
|
||||||
WebsiteURL *string `url:"website_url,omitempty" json:"website_url,omitempty"`
|
WebsiteURL *string `url:"website_url,omitempty" json:"website_url,omitempty"`
|
||||||
Organization *string `url:"organization,omitempty" json:"organization,omitempty"`
|
Organization *string `url:"organization,omitempty" json:"organization,omitempty"`
|
||||||
|
JobTitle *string `url:"job_title,omitempty" json:"job_title,omitempty"`
|
||||||
ProjectsLimit *int `url:"projects_limit,omitempty" json:"projects_limit,omitempty"`
|
ProjectsLimit *int `url:"projects_limit,omitempty" json:"projects_limit,omitempty"`
|
||||||
ExternUID *string `url:"extern_uid,omitempty" json:"extern_uid,omitempty"`
|
ExternUID *string `url:"extern_uid,omitempty" json:"extern_uid,omitempty"`
|
||||||
Provider *string `url:"provider,omitempty" json:"provider,omitempty"`
|
Provider *string `url:"provider,omitempty" json:"provider,omitempty"`
|
||||||
|
@ -229,6 +234,7 @@ type ModifyUserOptions struct {
|
||||||
Twitter *string `url:"twitter,omitempty" json:"twitter,omitempty"`
|
Twitter *string `url:"twitter,omitempty" json:"twitter,omitempty"`
|
||||||
WebsiteURL *string `url:"website_url,omitempty" json:"website_url,omitempty"`
|
WebsiteURL *string `url:"website_url,omitempty" json:"website_url,omitempty"`
|
||||||
Organization *string `url:"organization,omitempty" json:"organization,omitempty"`
|
Organization *string `url:"organization,omitempty" json:"organization,omitempty"`
|
||||||
|
JobTitle *string `url:"job_title,omitempty" json:"job_title,omitempty"`
|
||||||
ProjectsLimit *int `url:"projects_limit,omitempty" json:"projects_limit,omitempty"`
|
ProjectsLimit *int `url:"projects_limit,omitempty" json:"projects_limit,omitempty"`
|
||||||
ExternUID *string `url:"extern_uid,omitempty" json:"extern_uid,omitempty"`
|
ExternUID *string `url:"extern_uid,omitempty" json:"extern_uid,omitempty"`
|
||||||
Provider *string `url:"provider,omitempty" json:"provider,omitempty"`
|
Provider *string `url:"provider,omitempty" json:"provider,omitempty"`
|
||||||
|
@ -299,6 +305,86 @@ func (s *UsersService) CurrentUser(options ...RequestOptionFunc) (*User, *Respon
|
||||||
return usr, resp, err
|
return usr, resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UserStatus represents the current status of a user
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ce/api/users.html#user-status
|
||||||
|
type UserStatus struct {
|
||||||
|
Emoji string `json:"emoji"`
|
||||||
|
Availability AvailabilityValue `json:"availability"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
MessageHTML string `json:"message_html"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CurrentUserStatus retrieves the user status
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ce/api/users.html#user-status
|
||||||
|
func (s *UsersService) CurrentUserStatus(options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, "user/status", nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
status := new(UserStatus)
|
||||||
|
resp, err := s.client.Do(req, status)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return status, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserStatus retrieves a user's status
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ce/api/users.html#get-the-status-of-a-user
|
||||||
|
func (s *UsersService) GetUserStatus(user int, options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
||||||
|
u := fmt.Sprintf("users/%d/status", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
status := new(UserStatus)
|
||||||
|
resp, err := s.client.Do(req, status)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return status, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserStatusOptions represents the options required to set the status
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ce/api/users.html#set-user-status
|
||||||
|
type UserStatusOptions struct {
|
||||||
|
Emoji *string `url:"emoji,omitempty" json:"emoji,omitempty"`
|
||||||
|
Availability *AvailabilityValue `url:"availability,omitempty" json:"availability,omitempty"`
|
||||||
|
Message *string `url:"message,omitempty" json:"message,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetUserStatus sets the user's status
|
||||||
|
//
|
||||||
|
// GitLab API docs:
|
||||||
|
// https://docs.gitlab.com/ce/api/users.html#set-user-status
|
||||||
|
func (s *UsersService) SetUserStatus(opt *UserStatusOptions, options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
||||||
|
req, err := s.client.NewRequest(http.MethodPut, "user/status", opt, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
status := new(UserStatus)
|
||||||
|
resp, err := s.client.Do(req, status)
|
||||||
|
if err != nil {
|
||||||
|
return nil, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return status, resp, err
|
||||||
|
}
|
||||||
|
|
||||||
// SSHKey represents a SSH key.
|
// SSHKey represents a SSH key.
|
||||||
//
|
//
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#list-ssh-keys
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#list-ssh-keys
|
||||||
|
@ -456,118 +542,6 @@ func (s *UsersService) DeleteSSHKeyForUser(user, key int, options ...RequestOpti
|
||||||
return s.client.Do(req, nil)
|
return s.client.Do(req, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockUser blocks the specified user. Available only for admin.
|
|
||||||
//
|
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#block-user
|
|
||||||
func (s *UsersService) BlockUser(user int, options ...RequestOptionFunc) error {
|
|
||||||
u := fmt.Sprintf("users/%d/block", user)
|
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := s.client.Do(req, nil)
|
|
||||||
if err != nil && resp == nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch resp.StatusCode {
|
|
||||||
case 201:
|
|
||||||
return nil
|
|
||||||
case 403:
|
|
||||||
return ErrUserBlockPrevented
|
|
||||||
case 404:
|
|
||||||
return ErrUserNotFound
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnblockUser unblocks the specified user. Available only for admin.
|
|
||||||
//
|
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#unblock-user
|
|
||||||
func (s *UsersService) UnblockUser(user int, options ...RequestOptionFunc) error {
|
|
||||||
u := fmt.Sprintf("users/%d/unblock", user)
|
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := s.client.Do(req, nil)
|
|
||||||
if err != nil && resp == nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch resp.StatusCode {
|
|
||||||
case 201:
|
|
||||||
return nil
|
|
||||||
case 403:
|
|
||||||
return ErrUserUnblockPrevented
|
|
||||||
case 404:
|
|
||||||
return ErrUserNotFound
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeactivateUser deactivate the specified user. Available only for admin.
|
|
||||||
//
|
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#deactivate-user
|
|
||||||
func (s *UsersService) DeactivateUser(user int, options ...RequestOptionFunc) error {
|
|
||||||
u := fmt.Sprintf("users/%d/deactivate", user)
|
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := s.client.Do(req, nil)
|
|
||||||
if err != nil && resp == nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch resp.StatusCode {
|
|
||||||
case 201:
|
|
||||||
return nil
|
|
||||||
case 403:
|
|
||||||
return ErrUserDeactivatePrevented
|
|
||||||
case 404:
|
|
||||||
return ErrUserNotFound
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActivateUser activate the specified user. Available only for admin.
|
|
||||||
//
|
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#activate-user
|
|
||||||
func (s *UsersService) ActivateUser(user int, options ...RequestOptionFunc) error {
|
|
||||||
u := fmt.Sprintf("users/%d/activate", user)
|
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := s.client.Do(req, nil)
|
|
||||||
if err != nil && resp == nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
switch resp.StatusCode {
|
|
||||||
case 201:
|
|
||||||
return nil
|
|
||||||
case 403:
|
|
||||||
return ErrUserActivatePrevented
|
|
||||||
case 404:
|
|
||||||
return ErrUserNotFound
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Email represents an Email.
|
// Email represents an Email.
|
||||||
//
|
//
|
||||||
// GitLab API docs: https://doc.gitlab.com/ce/api/users.html#list-emails
|
// GitLab API docs: https://doc.gitlab.com/ce/api/users.html#list-emails
|
||||||
|
@ -721,6 +695,176 @@ func (s *UsersService) DeleteEmailForUser(user, email int, options ...RequestOpt
|
||||||
return s.client.Do(req, nil)
|
return s.client.Do(req, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BlockUser blocks the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#block-user
|
||||||
|
func (s *UsersService) BlockUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/block", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 201:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserBlockPrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnblockUser unblocks the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#unblock-user
|
||||||
|
func (s *UsersService) UnblockUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/unblock", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 201:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserUnblockPrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeactivateUser deactivate the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#deactivate-user
|
||||||
|
func (s *UsersService) DeactivateUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/deactivate", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 201:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserDeactivatePrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ActivateUser activate the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#activate-user
|
||||||
|
func (s *UsersService) ActivateUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/activate", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 201:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserActivatePrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ApproveUser approve the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#approve-user
|
||||||
|
func (s *UsersService) ApproveUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/approve", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 201:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserApprovePrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RejectUser reject the specified user. Available only for admin.
|
||||||
|
//
|
||||||
|
// GitLab API docs: https://docs.gitlab.com/ce/api/users.html#reject-user
|
||||||
|
func (s *UsersService) RejectUser(user int, options ...RequestOptionFunc) error {
|
||||||
|
u := fmt.Sprintf("users/%d/reject", user)
|
||||||
|
|
||||||
|
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := s.client.Do(req, nil)
|
||||||
|
if err != nil && resp == nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
switch resp.StatusCode {
|
||||||
|
case 200:
|
||||||
|
return nil
|
||||||
|
case 403:
|
||||||
|
return ErrUserRejectPrevented
|
||||||
|
case 404:
|
||||||
|
return ErrUserNotFound
|
||||||
|
case 409:
|
||||||
|
return ErrUserConflict
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("Received unexpected result code: %d", resp.StatusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ImpersonationToken represents an impersonation token.
|
// ImpersonationToken represents an impersonation token.
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
|
@ -920,86 +1064,6 @@ func (s *UsersService) GetUserActivities(opt *GetUserActivitiesOptions, options
|
||||||
return t, resp, err
|
return t, resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserStatus represents the current status of a user
|
|
||||||
//
|
|
||||||
// GitLab API docs:
|
|
||||||
// https://docs.gitlab.com/ce/api/users.html#user-status
|
|
||||||
type UserStatus struct {
|
|
||||||
Emoji string `json:"emoji"`
|
|
||||||
Availability AvailabilityValue `json:"availability"`
|
|
||||||
Message string `json:"message"`
|
|
||||||
MessageHTML string `json:"message_html"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CurrentUserStatus retrieves the user status
|
|
||||||
//
|
|
||||||
// GitLab API docs:
|
|
||||||
// https://docs.gitlab.com/ce/api/users.html#user-status
|
|
||||||
func (s *UsersService) CurrentUserStatus(options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, "user/status", nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
status := new(UserStatus)
|
|
||||||
resp, err := s.client.Do(req, status)
|
|
||||||
if err != nil {
|
|
||||||
return nil, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return status, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserStatus retrieves a user's status
|
|
||||||
//
|
|
||||||
// GitLab API docs:
|
|
||||||
// https://docs.gitlab.com/ce/api/users.html#get-the-status-of-a-user
|
|
||||||
func (s *UsersService) GetUserStatus(user int, options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
|
||||||
u := fmt.Sprintf("users/%d/status", user)
|
|
||||||
|
|
||||||
req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
status := new(UserStatus)
|
|
||||||
resp, err := s.client.Do(req, status)
|
|
||||||
if err != nil {
|
|
||||||
return nil, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return status, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UserStatusOptions represents the options required to set the status
|
|
||||||
//
|
|
||||||
// GitLab API docs:
|
|
||||||
// https://docs.gitlab.com/ce/api/users.html#set-user-status
|
|
||||||
type UserStatusOptions struct {
|
|
||||||
Emoji *string `url:"emoji,omitempty" json:"emoji,omitempty"`
|
|
||||||
Availability *AvailabilityValue `url:"availability,omitempty" json:"availability,omitempty"`
|
|
||||||
Message *string `url:"message,omitempty" json:"message,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetUserStatus sets the user's status
|
|
||||||
//
|
|
||||||
// GitLab API docs:
|
|
||||||
// https://docs.gitlab.com/ce/api/users.html#set-user-status
|
|
||||||
func (s *UsersService) SetUserStatus(opt *UserStatusOptions, options ...RequestOptionFunc) (*UserStatus, *Response, error) {
|
|
||||||
req, err := s.client.NewRequest(http.MethodPut, "user/status", opt, options)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
status := new(UserStatus)
|
|
||||||
resp, err := s.client.Do(req, status)
|
|
||||||
if err != nil {
|
|
||||||
return nil, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return status, resp, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// UserMembership represents a membership of the user in a namespace or project.
|
// UserMembership represents a membership of the user in a namespace or project.
|
||||||
//
|
//
|
||||||
// GitLab API docs:
|
// GitLab API docs:
|
||||||
|
|
7
vendor/github.com/xanzy/go-gitlab/validate.go
generated
vendored
7
vendor/github.com/xanzy/go-gitlab/validate.go
generated
vendored
|
@ -33,9 +33,10 @@ type ValidateService struct {
|
||||||
//
|
//
|
||||||
// GitLab API docs: https://docs.gitlab.com/ce/api/lint.html
|
// GitLab API docs: https://docs.gitlab.com/ce/api/lint.html
|
||||||
type LintResult struct {
|
type LintResult struct {
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
Errors []string `json:"errors"`
|
Errors []string `json:"errors"`
|
||||||
Warnings []string `json:"warnings"`
|
Warnings []string `json:"warnings"`
|
||||||
|
MergedYaml string `json:"merged_yaml"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProjectLintResult represents the linting results by project.
|
// ProjectLintResult represents the linting results by project.
|
||||||
|
|
10
vendor/golang.org/x/net/http2/server.go
generated
vendored
10
vendor/golang.org/x/net/http2/server.go
generated
vendored
|
@ -719,7 +719,15 @@ func (sc *serverConn) canonicalHeader(v string) string {
|
||||||
sc.canonHeader = make(map[string]string)
|
sc.canonHeader = make(map[string]string)
|
||||||
}
|
}
|
||||||
cv = http.CanonicalHeaderKey(v)
|
cv = http.CanonicalHeaderKey(v)
|
||||||
sc.canonHeader[v] = cv
|
// maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of
|
||||||
|
// entries in the canonHeader cache. This should be larger than the number
|
||||||
|
// of unique, uncommon header keys likely to be sent by the peer, while not
|
||||||
|
// so high as to permit unreaasonable memory usage if the peer sends an unbounded
|
||||||
|
// number of unique header keys.
|
||||||
|
const maxCachedCanonicalHeaders = 32
|
||||||
|
if len(sc.canonHeader) < maxCachedCanonicalHeaders {
|
||||||
|
sc.canonHeader[v] = cv
|
||||||
|
}
|
||||||
return cv
|
return cv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
132
vendor/golang.org/x/net/http2/transport.go
generated
vendored
132
vendor/golang.org/x/net/http2/transport.go
generated
vendored
|
@ -24,6 +24,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptrace"
|
"net/http/httptrace"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -130,6 +131,11 @@ type Transport struct {
|
||||||
// Defaults to 15s.
|
// Defaults to 15s.
|
||||||
PingTimeout time.Duration
|
PingTimeout time.Duration
|
||||||
|
|
||||||
|
// WriteByteTimeout is the timeout after which the connection will be
|
||||||
|
// closed no data can be written to it. The timeout begins when data is
|
||||||
|
// available to write, and is extended whenever any bytes are written.
|
||||||
|
WriteByteTimeout time.Duration
|
||||||
|
|
||||||
// CountError, if non-nil, is called on HTTP/2 transport errors.
|
// CountError, if non-nil, is called on HTTP/2 transport errors.
|
||||||
// It's intended to increment a metric for monitoring, such
|
// It's intended to increment a metric for monitoring, such
|
||||||
// as an expvar or Prometheus metric.
|
// as an expvar or Prometheus metric.
|
||||||
|
@ -393,17 +399,31 @@ func (cs *clientStream) abortRequestBodyWrite() {
|
||||||
}
|
}
|
||||||
|
|
||||||
type stickyErrWriter struct {
|
type stickyErrWriter struct {
|
||||||
w io.Writer
|
conn net.Conn
|
||||||
err *error
|
timeout time.Duration
|
||||||
|
err *error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
|
func (sew stickyErrWriter) Write(p []byte) (n int, err error) {
|
||||||
if *sew.err != nil {
|
if *sew.err != nil {
|
||||||
return 0, *sew.err
|
return 0, *sew.err
|
||||||
}
|
}
|
||||||
n, err = sew.w.Write(p)
|
for {
|
||||||
*sew.err = err
|
if sew.timeout != 0 {
|
||||||
return
|
sew.conn.SetWriteDeadline(time.Now().Add(sew.timeout))
|
||||||
|
}
|
||||||
|
nn, err := sew.conn.Write(p[n:])
|
||||||
|
n += nn
|
||||||
|
if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) {
|
||||||
|
// Keep extending the deadline so long as we're making progress.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if sew.timeout != 0 {
|
||||||
|
sew.conn.SetWriteDeadline(time.Time{})
|
||||||
|
}
|
||||||
|
*sew.err = err
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// noCachedConnError is the concrete type of ErrNoCachedConn, which
|
// noCachedConnError is the concrete type of ErrNoCachedConn, which
|
||||||
|
@ -658,7 +678,11 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro
|
||||||
|
|
||||||
// TODO: adjust this writer size to account for frame size +
|
// TODO: adjust this writer size to account for frame size +
|
||||||
// MTU + crypto/tls record padding.
|
// MTU + crypto/tls record padding.
|
||||||
cc.bw = bufio.NewWriter(stickyErrWriter{c, &cc.werr})
|
cc.bw = bufio.NewWriter(stickyErrWriter{
|
||||||
|
conn: c,
|
||||||
|
timeout: t.WriteByteTimeout,
|
||||||
|
err: &cc.werr,
|
||||||
|
})
|
||||||
cc.br = bufio.NewReader(c)
|
cc.br = bufio.NewReader(c)
|
||||||
cc.fr = NewFramer(cc.bw, cc.br)
|
cc.fr = NewFramer(cc.bw, cc.br)
|
||||||
if t.CountError != nil {
|
if t.CountError != nil {
|
||||||
|
@ -1100,36 +1124,49 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleResponseHeaders := func() (*http.Response, error) {
|
||||||
|
res := cs.res
|
||||||
|
if res.StatusCode > 299 {
|
||||||
|
// On error or status code 3xx, 4xx, 5xx, etc abort any
|
||||||
|
// ongoing write, assuming that the server doesn't care
|
||||||
|
// about our request body. If the server replied with 1xx or
|
||||||
|
// 2xx, however, then assume the server DOES potentially
|
||||||
|
// want our body (e.g. full-duplex streaming:
|
||||||
|
// golang.org/issue/13444). If it turns out the server
|
||||||
|
// doesn't, they'll RST_STREAM us soon enough. This is a
|
||||||
|
// heuristic to avoid adding knobs to Transport. Hopefully
|
||||||
|
// we can keep it.
|
||||||
|
cs.abortRequestBodyWrite()
|
||||||
|
}
|
||||||
|
res.Request = req
|
||||||
|
res.TLS = cc.tlsState
|
||||||
|
if res.Body == noBody && actualContentLength(req) == 0 {
|
||||||
|
// If there isn't a request or response body still being
|
||||||
|
// written, then wait for the stream to be closed before
|
||||||
|
// RoundTrip returns.
|
||||||
|
if err := waitDone(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-cs.respHeaderRecv:
|
case <-cs.respHeaderRecv:
|
||||||
res := cs.res
|
return handleResponseHeaders()
|
||||||
if res.StatusCode > 299 {
|
|
||||||
// On error or status code 3xx, 4xx, 5xx, etc abort any
|
|
||||||
// ongoing write, assuming that the server doesn't care
|
|
||||||
// about our request body. If the server replied with 1xx or
|
|
||||||
// 2xx, however, then assume the server DOES potentially
|
|
||||||
// want our body (e.g. full-duplex streaming:
|
|
||||||
// golang.org/issue/13444). If it turns out the server
|
|
||||||
// doesn't, they'll RST_STREAM us soon enough. This is a
|
|
||||||
// heuristic to avoid adding knobs to Transport. Hopefully
|
|
||||||
// we can keep it.
|
|
||||||
cs.abortRequestBodyWrite()
|
|
||||||
}
|
|
||||||
res.Request = req
|
|
||||||
res.TLS = cc.tlsState
|
|
||||||
if res.Body == noBody && actualContentLength(req) == 0 {
|
|
||||||
// If there isn't a request or response body still being
|
|
||||||
// written, then wait for the stream to be closed before
|
|
||||||
// RoundTrip returns.
|
|
||||||
if err := waitDone(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res, nil
|
|
||||||
case <-cs.abort:
|
case <-cs.abort:
|
||||||
waitDone()
|
select {
|
||||||
return nil, cs.abortErr
|
case <-cs.respHeaderRecv:
|
||||||
|
// If both cs.respHeaderRecv and cs.abort are signaling,
|
||||||
|
// pick respHeaderRecv. The server probably wrote the
|
||||||
|
// response and immediately reset the stream.
|
||||||
|
// golang.org/issue/49645
|
||||||
|
return handleResponseHeaders()
|
||||||
|
default:
|
||||||
|
waitDone()
|
||||||
|
return nil, cs.abortErr
|
||||||
|
}
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
err := ctx.Err()
|
err := ctx.Err()
|
||||||
cs.abortStream(err)
|
cs.abortStream(err)
|
||||||
|
@ -1189,6 +1226,9 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cc.addStreamLocked(cs) // assigns stream ID
|
cc.addStreamLocked(cs) // assigns stream ID
|
||||||
|
if isConnectionCloseRequest(req) {
|
||||||
|
cc.doNotReuse = true
|
||||||
|
}
|
||||||
cc.mu.Unlock()
|
cc.mu.Unlock()
|
||||||
|
|
||||||
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
|
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?
|
||||||
|
@ -1212,12 +1252,12 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
continueTimeout := cc.t.expectContinueTimeout()
|
continueTimeout := cc.t.expectContinueTimeout()
|
||||||
if continueTimeout != 0 &&
|
if continueTimeout != 0 {
|
||||||
!httpguts.HeaderValuesContainsToken(
|
if !httpguts.HeaderValuesContainsToken(req.Header["Expect"], "100-continue") {
|
||||||
req.Header["Expect"],
|
continueTimeout = 0
|
||||||
"100-continue") {
|
} else {
|
||||||
continueTimeout = 0
|
cs.on100 = make(chan struct{}, 1)
|
||||||
cs.on100 = make(chan struct{}, 1)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Past this point (where we send request headers), it is possible for
|
// Past this point (where we send request headers), it is possible for
|
||||||
|
@ -1286,6 +1326,7 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) {
|
||||||
case <-respHeaderTimer:
|
case <-respHeaderTimer:
|
||||||
return errTimeout
|
return errTimeout
|
||||||
case <-respHeaderRecv:
|
case <-respHeaderRecv:
|
||||||
|
respHeaderRecv = nil
|
||||||
respHeaderTimer = nil // keep waiting for END_STREAM
|
respHeaderTimer = nil // keep waiting for END_STREAM
|
||||||
case <-cs.abort:
|
case <-cs.abort:
|
||||||
return cs.abortErr
|
return cs.abortErr
|
||||||
|
@ -2267,6 +2308,8 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
||||||
} else if len(clens) > 1 {
|
} else if len(clens) > 1 {
|
||||||
// TODO: care? unlike http/1, it won't mess up our framing, so it's
|
// TODO: care? unlike http/1, it won't mess up our framing, so it's
|
||||||
// more safe smuggling-wise to ignore.
|
// more safe smuggling-wise to ignore.
|
||||||
|
} else if f.StreamEnded() && !cs.isHead {
|
||||||
|
res.ContentLength = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if cs.isHead {
|
if cs.isHead {
|
||||||
|
@ -2287,7 +2330,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra
|
||||||
cs.bytesRemain = res.ContentLength
|
cs.bytesRemain = res.ContentLength
|
||||||
res.Body = transportResponseBody{cs}
|
res.Body = transportResponseBody{cs}
|
||||||
|
|
||||||
if cs.requestedGzip && res.Header.Get("Content-Encoding") == "gzip" {
|
if cs.requestedGzip && asciiEqualFold(res.Header.Get("Content-Encoding"), "gzip") {
|
||||||
res.Header.Del("Content-Encoding")
|
res.Header.Del("Content-Encoding")
|
||||||
res.Header.Del("Content-Length")
|
res.Header.Del("Content-Length")
|
||||||
res.ContentLength = -1
|
res.ContentLength = -1
|
||||||
|
@ -2426,7 +2469,10 @@ func (b transportResponseBody) Close() error {
|
||||||
select {
|
select {
|
||||||
case <-cs.donec:
|
case <-cs.donec:
|
||||||
case <-cs.ctx.Done():
|
case <-cs.ctx.Done():
|
||||||
return cs.ctx.Err()
|
// See golang/go#49366: The net/http package can cancel the
|
||||||
|
// request context after the response body is fully read.
|
||||||
|
// Don't treat this as an error.
|
||||||
|
return nil
|
||||||
case <-cs.reqCancel:
|
case <-cs.reqCancel:
|
||||||
return errRequestCanceled
|
return errRequestCanceled
|
||||||
}
|
}
|
||||||
|
@ -2550,6 +2596,12 @@ func (rl *clientConnReadLoop) endStream(cs *clientStream) {
|
||||||
// server.go's (*stream).endStream method.
|
// server.go's (*stream).endStream method.
|
||||||
if !cs.readClosed {
|
if !cs.readClosed {
|
||||||
cs.readClosed = true
|
cs.readClosed = true
|
||||||
|
// Close cs.bufPipe and cs.peerClosed with cc.mu held to avoid a
|
||||||
|
// race condition: The caller can read io.EOF from Response.Body
|
||||||
|
// and close the body before we close cs.peerClosed, causing
|
||||||
|
// cleanupWriteRequest to send a RST_STREAM.
|
||||||
|
rl.cc.mu.Lock()
|
||||||
|
defer rl.cc.mu.Unlock()
|
||||||
cs.bufPipe.closeWithErrorAndCode(io.EOF, cs.copyTrailers)
|
cs.bufPipe.closeWithErrorAndCode(io.EOF, cs.copyTrailers)
|
||||||
close(cs.peerClosed)
|
close(cs.peerClosed)
|
||||||
}
|
}
|
||||||
|
|
4
vendor/golang.org/x/net/http2/writesched.go
generated
vendored
4
vendor/golang.org/x/net/http2/writesched.go
generated
vendored
|
@ -32,7 +32,8 @@ type WriteScheduler interface {
|
||||||
|
|
||||||
// Pop dequeues the next frame to write. Returns false if no frames can
|
// Pop dequeues the next frame to write. Returns false if no frames can
|
||||||
// be written. Frames with a given wr.StreamID() are Pop'd in the same
|
// be written. Frames with a given wr.StreamID() are Pop'd in the same
|
||||||
// order they are Push'd. No frames should be discarded except by CloseStream.
|
// order they are Push'd, except RST_STREAM frames. No frames should be
|
||||||
|
// discarded except by CloseStream.
|
||||||
Pop() (wr FrameWriteRequest, ok bool)
|
Pop() (wr FrameWriteRequest, ok bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ type FrameWriteRequest struct {
|
||||||
|
|
||||||
// stream is the stream on which this frame will be written.
|
// stream is the stream on which this frame will be written.
|
||||||
// nil for non-stream frames like PING and SETTINGS.
|
// nil for non-stream frames like PING and SETTINGS.
|
||||||
|
// nil for RST_STREAM streams, which use the StreamError.StreamID field instead.
|
||||||
stream *stream
|
stream *stream
|
||||||
|
|
||||||
// done, if non-nil, must be a buffered channel with space for
|
// done, if non-nil, must be a buffered channel with space for
|
||||||
|
|
6
vendor/golang.org/x/net/http2/writesched_random.go
generated
vendored
6
vendor/golang.org/x/net/http2/writesched_random.go
generated
vendored
|
@ -45,11 +45,11 @@ func (ws *randomWriteScheduler) AdjustStream(streamID uint32, priority PriorityP
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {
|
func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {
|
||||||
id := wr.StreamID()
|
if wr.isControl() {
|
||||||
if id == 0 {
|
|
||||||
ws.zero.push(wr)
|
ws.zero.push(wr)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
id := wr.StreamID()
|
||||||
q, ok := ws.sq[id]
|
q, ok := ws.sq[id]
|
||||||
if !ok {
|
if !ok {
|
||||||
q = ws.queuePool.get()
|
q = ws.queuePool.get()
|
||||||
|
@ -59,7 +59,7 @@ func (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) {
|
func (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) {
|
||||||
// Control frames first.
|
// Control and RST_STREAM frames first.
|
||||||
if !ws.zero.empty() {
|
if !ws.zero.empty() {
|
||||||
return ws.zero.shift(), true
|
return ws.zero.shift(), true
|
||||||
}
|
}
|
||||||
|
|
14
vendor/golang.org/x/net/idna/go118.go
generated
vendored
Normal file
14
vendor/golang.org/x/net/idna/go118.go
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
|
||||||
|
|
||||||
|
// Copyright 2021 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build go1.18
|
||||||
|
// +build go1.18
|
||||||
|
|
||||||
|
package idna
|
||||||
|
|
||||||
|
// Transitional processing is disabled by default in Go 1.18.
|
||||||
|
// https://golang.org/issue/47510
|
||||||
|
const transitionalLookup = false
|
6
vendor/golang.org/x/net/idna/idna10.0.0.go
generated
vendored
6
vendor/golang.org/x/net/idna/idna10.0.0.go
generated
vendored
|
@ -59,10 +59,10 @@ type Option func(*options)
|
||||||
// Transitional sets a Profile to use the Transitional mapping as defined in UTS
|
// Transitional sets a Profile to use the Transitional mapping as defined in UTS
|
||||||
// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
|
// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
|
||||||
// transitional mapping provides a compromise between IDNA2003 and IDNA2008
|
// transitional mapping provides a compromise between IDNA2003 and IDNA2008
|
||||||
// compatibility. It is used by most browsers when resolving domain names. This
|
// compatibility. It is used by some browsers when resolving domain names. This
|
||||||
// option is only meaningful if combined with MapForLookup.
|
// option is only meaningful if combined with MapForLookup.
|
||||||
func Transitional(transitional bool) Option {
|
func Transitional(transitional bool) Option {
|
||||||
return func(o *options) { o.transitional = true }
|
return func(o *options) { o.transitional = transitional }
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
|
// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
|
||||||
|
@ -284,7 +284,7 @@ var (
|
||||||
|
|
||||||
punycode = &Profile{}
|
punycode = &Profile{}
|
||||||
lookup = &Profile{options{
|
lookup = &Profile{options{
|
||||||
transitional: true,
|
transitional: transitionalLookup,
|
||||||
useSTD3Rules: true,
|
useSTD3Rules: true,
|
||||||
checkHyphens: true,
|
checkHyphens: true,
|
||||||
checkJoiners: true,
|
checkJoiners: true,
|
||||||
|
|
4
vendor/golang.org/x/net/idna/idna9.0.0.go
generated
vendored
4
vendor/golang.org/x/net/idna/idna9.0.0.go
generated
vendored
|
@ -58,10 +58,10 @@ type Option func(*options)
|
||||||
// Transitional sets a Profile to use the Transitional mapping as defined in UTS
|
// Transitional sets a Profile to use the Transitional mapping as defined in UTS
|
||||||
// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
|
// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
|
||||||
// transitional mapping provides a compromise between IDNA2003 and IDNA2008
|
// transitional mapping provides a compromise between IDNA2003 and IDNA2008
|
||||||
// compatibility. It is used by most browsers when resolving domain names. This
|
// compatibility. It is used by some browsers when resolving domain names. This
|
||||||
// option is only meaningful if combined with MapForLookup.
|
// option is only meaningful if combined with MapForLookup.
|
||||||
func Transitional(transitional bool) Option {
|
func Transitional(transitional bool) Option {
|
||||||
return func(o *options) { o.transitional = true }
|
return func(o *options) { o.transitional = transitional }
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
|
// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
|
||||||
|
|
12
vendor/golang.org/x/net/idna/pre_go118.go
generated
vendored
Normal file
12
vendor/golang.org/x/net/idna/pre_go118.go
generated
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
|
||||||
|
|
||||||
|
// Copyright 2021 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !go1.18
|
||||||
|
// +build !go1.18
|
||||||
|
|
||||||
|
package idna
|
||||||
|
|
||||||
|
const transitionalLookup = true
|
36
vendor/golang.org/x/net/idna/punycode.go
generated
vendored
36
vendor/golang.org/x/net/idna/punycode.go
generated
vendored
|
@ -49,6 +49,7 @@ func decode(encoded string) (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i, n, bias := int32(0), initialN, initialBias
|
i, n, bias := int32(0), initialN, initialBias
|
||||||
|
overflow := false
|
||||||
for pos < len(encoded) {
|
for pos < len(encoded) {
|
||||||
oldI, w := i, int32(1)
|
oldI, w := i, int32(1)
|
||||||
for k := base; ; k += base {
|
for k := base; ; k += base {
|
||||||
|
@ -60,29 +61,32 @@ func decode(encoded string) (string, error) {
|
||||||
return "", punyError(encoded)
|
return "", punyError(encoded)
|
||||||
}
|
}
|
||||||
pos++
|
pos++
|
||||||
i += digit * w
|
i, overflow = madd(i, digit, w)
|
||||||
if i < 0 {
|
if overflow {
|
||||||
return "", punyError(encoded)
|
return "", punyError(encoded)
|
||||||
}
|
}
|
||||||
t := k - bias
|
t := k - bias
|
||||||
if t < tmin {
|
if k <= bias {
|
||||||
t = tmin
|
t = tmin
|
||||||
} else if t > tmax {
|
} else if k >= bias+tmax {
|
||||||
t = tmax
|
t = tmax
|
||||||
}
|
}
|
||||||
if digit < t {
|
if digit < t {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
w *= base - t
|
w, overflow = madd(0, w, base-t)
|
||||||
if w >= math.MaxInt32/base {
|
if overflow {
|
||||||
return "", punyError(encoded)
|
return "", punyError(encoded)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(output) >= 1024 {
|
||||||
|
return "", punyError(encoded)
|
||||||
|
}
|
||||||
x := int32(len(output) + 1)
|
x := int32(len(output) + 1)
|
||||||
bias = adapt(i-oldI, x, oldI == 0)
|
bias = adapt(i-oldI, x, oldI == 0)
|
||||||
n += i / x
|
n += i / x
|
||||||
i %= x
|
i %= x
|
||||||
if n > utf8.MaxRune || len(output) >= 1024 {
|
if n < 0 || n > utf8.MaxRune {
|
||||||
return "", punyError(encoded)
|
return "", punyError(encoded)
|
||||||
}
|
}
|
||||||
output = append(output, 0)
|
output = append(output, 0)
|
||||||
|
@ -115,6 +119,7 @@ func encode(prefix, s string) (string, error) {
|
||||||
if b > 0 {
|
if b > 0 {
|
||||||
output = append(output, '-')
|
output = append(output, '-')
|
||||||
}
|
}
|
||||||
|
overflow := false
|
||||||
for remaining != 0 {
|
for remaining != 0 {
|
||||||
m := int32(0x7fffffff)
|
m := int32(0x7fffffff)
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
|
@ -122,8 +127,8 @@ func encode(prefix, s string) (string, error) {
|
||||||
m = r
|
m = r
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delta += (m - n) * (h + 1)
|
delta, overflow = madd(delta, m-n, h+1)
|
||||||
if delta < 0 {
|
if overflow {
|
||||||
return "", punyError(s)
|
return "", punyError(s)
|
||||||
}
|
}
|
||||||
n = m
|
n = m
|
||||||
|
@ -141,9 +146,9 @@ func encode(prefix, s string) (string, error) {
|
||||||
q := delta
|
q := delta
|
||||||
for k := base; ; k += base {
|
for k := base; ; k += base {
|
||||||
t := k - bias
|
t := k - bias
|
||||||
if t < tmin {
|
if k <= bias {
|
||||||
t = tmin
|
t = tmin
|
||||||
} else if t > tmax {
|
} else if k >= bias+tmax {
|
||||||
t = tmax
|
t = tmax
|
||||||
}
|
}
|
||||||
if q < t {
|
if q < t {
|
||||||
|
@ -164,6 +169,15 @@ func encode(prefix, s string) (string, error) {
|
||||||
return string(output), nil
|
return string(output), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// madd computes a + (b * c), detecting overflow.
|
||||||
|
func madd(a, b, c int32) (next int32, overflow bool) {
|
||||||
|
p := int64(b) * int64(c)
|
||||||
|
if p > math.MaxInt32-int64(a) {
|
||||||
|
return 0, true
|
||||||
|
}
|
||||||
|
return a + int32(p), false
|
||||||
|
}
|
||||||
|
|
||||||
func decodeDigit(x byte) (digit int32, ok bool) {
|
func decodeDigit(x byte) (digit int32, ok bool) {
|
||||||
switch {
|
switch {
|
||||||
case '0' <= x && x <= '9':
|
case '0' <= x && x <= '9':
|
||||||
|
|
21
vendor/golang.org/x/time/rate/rate.go
generated
vendored
21
vendor/golang.org/x/time/rate/rate.go
generated
vendored
|
@ -306,15 +306,27 @@ func (lim *Limiter) SetBurstAt(now time.Time, newBurst int) {
|
||||||
// reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN.
|
// reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN.
|
||||||
func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation {
|
func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation {
|
||||||
lim.mu.Lock()
|
lim.mu.Lock()
|
||||||
|
defer lim.mu.Unlock()
|
||||||
|
|
||||||
if lim.limit == Inf {
|
if lim.limit == Inf {
|
||||||
lim.mu.Unlock()
|
|
||||||
return Reservation{
|
return Reservation{
|
||||||
ok: true,
|
ok: true,
|
||||||
lim: lim,
|
lim: lim,
|
||||||
tokens: n,
|
tokens: n,
|
||||||
timeToAct: now,
|
timeToAct: now,
|
||||||
}
|
}
|
||||||
|
} else if lim.limit == 0 {
|
||||||
|
var ok bool
|
||||||
|
if lim.burst >= n {
|
||||||
|
ok = true
|
||||||
|
lim.burst -= n
|
||||||
|
}
|
||||||
|
return Reservation{
|
||||||
|
ok: ok,
|
||||||
|
lim: lim,
|
||||||
|
tokens: lim.burst,
|
||||||
|
timeToAct: now,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
now, last, tokens := lim.advance(now)
|
now, last, tokens := lim.advance(now)
|
||||||
|
@ -351,7 +363,6 @@ func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duratio
|
||||||
lim.last = last
|
lim.last = last
|
||||||
}
|
}
|
||||||
|
|
||||||
lim.mu.Unlock()
|
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,6 +388,9 @@ func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time,
|
||||||
// durationFromTokens is a unit conversion function from the number of tokens to the duration
|
// durationFromTokens is a unit conversion function from the number of tokens to the duration
|
||||||
// of time it takes to accumulate them at a rate of limit tokens per second.
|
// of time it takes to accumulate them at a rate of limit tokens per second.
|
||||||
func (limit Limit) durationFromTokens(tokens float64) time.Duration {
|
func (limit Limit) durationFromTokens(tokens float64) time.Duration {
|
||||||
|
if limit <= 0 {
|
||||||
|
return InfDuration
|
||||||
|
}
|
||||||
seconds := tokens / float64(limit)
|
seconds := tokens / float64(limit)
|
||||||
return time.Duration(float64(time.Second) * seconds)
|
return time.Duration(float64(time.Second) * seconds)
|
||||||
}
|
}
|
||||||
|
@ -384,5 +398,8 @@ func (limit Limit) durationFromTokens(tokens float64) time.Duration {
|
||||||
// tokensFromDuration is a unit conversion function from a time duration to the number of tokens
|
// tokensFromDuration is a unit conversion function from a time duration to the number of tokens
|
||||||
// which could be accumulated during that duration at a rate of limit tokens per second.
|
// which could be accumulated during that duration at a rate of limit tokens per second.
|
||||||
func (limit Limit) tokensFromDuration(d time.Duration) float64 {
|
func (limit Limit) tokensFromDuration(d time.Duration) float64 {
|
||||||
|
if limit <= 0 {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
return d.Seconds() * float64(limit)
|
return d.Seconds() * float64(limit)
|
||||||
}
|
}
|
||||||
|
|
11
vendor/modules.txt
vendored
11
vendor/modules.txt
vendored
|
@ -294,7 +294,8 @@ github.com/hashicorp/errwrap
|
||||||
github.com/hashicorp/go-cleanhttp
|
github.com/hashicorp/go-cleanhttp
|
||||||
# github.com/hashicorp/go-multierror v1.1.1
|
# github.com/hashicorp/go-multierror v1.1.1
|
||||||
github.com/hashicorp/go-multierror
|
github.com/hashicorp/go-multierror
|
||||||
# github.com/hashicorp/go-retryablehttp v0.6.8
|
# github.com/hashicorp/go-retryablehttp v0.7.0
|
||||||
|
## explicit
|
||||||
github.com/hashicorp/go-retryablehttp
|
github.com/hashicorp/go-retryablehttp
|
||||||
# github.com/hashicorp/go-version v1.2.1
|
# github.com/hashicorp/go-version v1.2.1
|
||||||
github.com/hashicorp/go-version
|
github.com/hashicorp/go-version
|
||||||
|
@ -575,7 +576,7 @@ github.com/uudashr/gocognit
|
||||||
## explicit
|
## explicit
|
||||||
github.com/woodpecker-ci/expr
|
github.com/woodpecker-ci/expr
|
||||||
github.com/woodpecker-ci/expr/parse
|
github.com/woodpecker-ci/expr/parse
|
||||||
# github.com/xanzy/go-gitlab v0.51.1
|
# github.com/xanzy/go-gitlab v0.52.2
|
||||||
## explicit
|
## explicit
|
||||||
github.com/xanzy/go-gitlab
|
github.com/xanzy/go-gitlab
|
||||||
# github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
|
# github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
|
||||||
|
@ -605,7 +606,7 @@ golang.org/x/mod/internal/lazyregexp
|
||||||
golang.org/x/mod/modfile
|
golang.org/x/mod/modfile
|
||||||
golang.org/x/mod/module
|
golang.org/x/mod/module
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.0.0-20211020060615-d418f374d309
|
# golang.org/x/net v0.0.0-20211209124913-491a49abca63
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/net/context
|
golang.org/x/net/context
|
||||||
golang.org/x/net/context/ctxhttp
|
golang.org/x/net/context/ctxhttp
|
||||||
|
@ -617,7 +618,7 @@ golang.org/x/net/internal/socks
|
||||||
golang.org/x/net/internal/timeseries
|
golang.org/x/net/internal/timeseries
|
||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
golang.org/x/net/trace
|
golang.org/x/net/trace
|
||||||
# golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1
|
# golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/oauth2
|
golang.org/x/oauth2
|
||||||
golang.org/x/oauth2/bitbucket
|
golang.org/x/oauth2/bitbucket
|
||||||
|
@ -642,7 +643,7 @@ golang.org/x/text/transform
|
||||||
golang.org/x/text/unicode/bidi
|
golang.org/x/text/unicode/bidi
|
||||||
golang.org/x/text/unicode/norm
|
golang.org/x/text/unicode/norm
|
||||||
golang.org/x/text/width
|
golang.org/x/text/width
|
||||||
# golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac
|
# golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/time/rate
|
golang.org/x/time/rate
|
||||||
# golang.org/x/tools v0.1.7
|
# golang.org/x/tools v0.1.7
|
||||||
|
|
Loading…
Reference in a new issue