From 76de14a65d2174f2bd720720572835d5492a766f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 18:05:34 +0000 Subject: [PATCH] build(deps): bump code.gitea.io/sdk/gitea from 0.21.0 to 0.22.1 Bumps code.gitea.io/sdk/gitea from 0.21.0 to 0.22.1. --- updated-dependencies: - dependency-name: code.gitea.io/sdk/gitea dependency-version: 0.22.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 +- go.sum | 8 +- vendor/code.gitea.io/sdk/gitea/admin_cron.go | 3 +- vendor/code.gitea.io/sdk/gitea/admin_user.go | 9 +- vendor/code.gitea.io/sdk/gitea/attachment.go | 3 +- vendor/code.gitea.io/sdk/gitea/client.go | 48 +++++- vendor/code.gitea.io/sdk/gitea/git_hook.go | 6 +- vendor/code.gitea.io/sdk/gitea/hook.go | 18 +-- vendor/code.gitea.io/sdk/gitea/httpsign.go | 34 ++-- vendor/code.gitea.io/sdk/gitea/issue.go | 3 +- .../code.gitea.io/sdk/gitea/issue_comment.go | 3 +- vendor/code.gitea.io/sdk/gitea/issue_label.go | 143 +---------------- .../sdk/gitea/issue_milestone.go | 6 +- .../code.gitea.io/sdk/gitea/issue_reaction.go | 6 +- .../sdk/gitea/issue_stopwatch.go | 9 +- .../sdk/gitea/issue_tracked_time.go | 6 +- .../code.gitea.io/sdk/gitea/notifications.go | 6 +- vendor/code.gitea.io/sdk/gitea/oauth2.go | 2 +- vendor/code.gitea.io/sdk/gitea/org.go | 6 +- vendor/code.gitea.io/sdk/gitea/org_action.go | 146 ++++++++++++++++- vendor/code.gitea.io/sdk/gitea/org_label.go | 116 ++++++++++++++ vendor/code.gitea.io/sdk/gitea/org_member.go | 3 +- vendor/code.gitea.io/sdk/gitea/org_team.go | 18 +-- vendor/code.gitea.io/sdk/gitea/package.go | 3 +- vendor/code.gitea.io/sdk/gitea/pull.go | 23 +-- vendor/code.gitea.io/sdk/gitea/pull_review.go | 15 +- vendor/code.gitea.io/sdk/gitea/release.go | 6 +- vendor/code.gitea.io/sdk/gitea/repo.go | 10 +- vendor/code.gitea.io/sdk/gitea/repo_action.go | 12 +- vendor/code.gitea.io/sdk/gitea/repo_branch.go | 31 ++++ .../sdk/gitea/repo_branch_protection.go | 3 +- .../sdk/gitea/repo_collaborator.go | 6 +- vendor/code.gitea.io/sdk/gitea/repo_file.go | 6 +- vendor/code.gitea.io/sdk/gitea/repo_key.go | 3 +- vendor/code.gitea.io/sdk/gitea/repo_label.go | 150 ++++++++++++++++++ .../code.gitea.io/sdk/gitea/repo_migrate.go | 8 +- vendor/code.gitea.io/sdk/gitea/repo_mirror.go | 31 ++++ vendor/code.gitea.io/sdk/gitea/repo_stars.go | 6 +- vendor/code.gitea.io/sdk/gitea/repo_tag.go | 3 +- .../sdk/gitea/repo_tag_protection.go | 3 +- vendor/code.gitea.io/sdk/gitea/repo_team.go | 6 +- vendor/code.gitea.io/sdk/gitea/repo_topics.go | 9 +- vendor/code.gitea.io/sdk/gitea/secret.go | 2 + vendor/code.gitea.io/sdk/gitea/user_app.go | 6 +- vendor/code.gitea.io/sdk/gitea/user_email.go | 3 +- vendor/code.gitea.io/sdk/gitea/user_follow.go | 8 +- vendor/code.gitea.io/sdk/gitea/user_gpgkey.go | 3 +- vendor/code.gitea.io/sdk/gitea/user_key.go | 4 +- vendor/modules.txt | 8 +- 49 files changed, 649 insertions(+), 325 deletions(-) create mode 100644 vendor/code.gitea.io/sdk/gitea/org_label.go create mode 100644 vendor/code.gitea.io/sdk/gitea/repo_label.go diff --git a/go.mod b/go.mod index b5b3465316d..74c234716ee 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,7 @@ require ( ) require ( - code.gitea.io/sdk/gitea v0.21.0 + code.gitea.io/sdk/gitea v0.22.1 github.com/go-jose/go-jose/v3 v3.0.4 github.com/goccy/kpoward v0.1.0 github.com/google/cel-go v0.26.0 @@ -63,7 +63,7 @@ require ( cloud.google.com/go/kms v1.21.2 // indirect cloud.google.com/go/longrunning v0.6.6 // indirect fortio.org/safecast v1.0.0 // indirect - github.com/42wim/httpsig v1.2.2 // indirect + github.com/42wim/httpsig v1.2.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect diff --git a/go.sum b/go.sum index 9609f491825..a6adb0e5488 100644 --- a/go.sum +++ b/go.sum @@ -54,8 +54,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -code.gitea.io/sdk/gitea v0.21.0 h1:69n6oz6kEVHRo1+APQQyizkhrZrLsTLXey9142pfkD4= -code.gitea.io/sdk/gitea v0.21.0/go.mod h1:tnBjVhuKJCn8ibdyyhvUyxrR1Ca2KHEoTWoukNhXQPA= +code.gitea.io/sdk/gitea v0.22.1 h1:7K05KjRORyTcTYULQ/AwvlVS6pawLcWyXZcTr7gHFyA= +code.gitea.io/sdk/gitea v0.22.1/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d h1:LblfooH1lKOpp1hIhukktmSAxFkqMPFk9KR6iZ0MJNI= contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d/go.mod h1:IshRmMJBhDfFj5Y67nVhMYTTIze91RUeT73ipWKs/GY= contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= @@ -63,8 +63,8 @@ contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= fortio.org/safecast v1.0.0 h1:dr3131WPX8iS1pTf76+39WeXbTrerDYLvi9s7Oi3wiY= fortio.org/safecast v1.0.0/go.mod h1:xZmcPk3vi4kuUFf+tq4SvnlVdwViqf6ZSZl91Jr9Jdg= -github.com/42wim/httpsig v1.2.2 h1:ofAYoHUNs/MJOLqQ8hIxeyz2QxOz8qdSVvp3PX/oPgA= -github.com/42wim/httpsig v1.2.2/go.mod h1:P/UYo7ytNBFwc+dg35IubuAUIs8zj5zzFIgUCEl55WY= +github.com/42wim/httpsig v1.2.3 h1:xb0YyWhkYj57SPtfSttIobJUPJZB9as1nsfo7KWVcEs= +github.com/42wim/httpsig v1.2.3/go.mod h1:nZq9OlYKDrUBhptd77IHx4/sZZD+IxTBADvAPI9G/EM= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= diff --git a/vendor/code.gitea.io/sdk/gitea/admin_cron.go b/vendor/code.gitea.io/sdk/gitea/admin_cron.go index 84316da2b14..de05ccb38fa 100644 --- a/vendor/code.gitea.io/sdk/gitea/admin_cron.go +++ b/vendor/code.gitea.io/sdk/gitea/admin_cron.go @@ -42,6 +42,5 @@ func (c *Client) RunCronTasks(task string) (*Response, error) { if err := escapeValidatePathSegments(&task); err != nil { return nil, err } - _, resp, err := c.getResponse("POST", fmt.Sprintf("/admin/cron/%s", task), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/admin/cron/%s", task), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/admin_user.go b/vendor/code.gitea.io/sdk/gitea/admin_user.go index 172f0645c9b..e49dbbdc033 100644 --- a/vendor/code.gitea.io/sdk/gitea/admin_user.go +++ b/vendor/code.gitea.io/sdk/gitea/admin_user.go @@ -93,8 +93,7 @@ func (c *Client) AdminEditUser(user string, opt EditUserOption) (*Response, erro if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/admin/users/%s", user), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/admin/users/%s", user), jsonHeader, bytes.NewReader(body)) } // AdminDeleteUser delete one user according name @@ -102,8 +101,7 @@ func (c *Client) AdminDeleteUser(user string) (*Response, error) { if err := escapeValidatePathSegments(&user); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/admin/users/%s", user), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/admin/users/%s", user), nil, nil) } // AdminCreateUserPublicKey adds a public key for the user @@ -125,6 +123,5 @@ func (c *Client) AdminDeleteUserPublicKey(user string, keyID int) (*Response, er if err := escapeValidatePathSegments(&user); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/admin/users/%s/keys/%d", user, keyID), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/admin/users/%s/keys/%d", user, keyID), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/attachment.go b/vendor/code.gitea.io/sdk/gitea/attachment.go index c19a82c85d1..89c3a503bbe 100644 --- a/vendor/code.gitea.io/sdk/gitea/attachment.go +++ b/vendor/code.gitea.io/sdk/gitea/attachment.go @@ -106,6 +106,5 @@ func (c *Client) DeleteReleaseAttachment(user, repo string, release, id int64) ( if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d/assets/%d", user, repo, release, id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d/assets/%d", user, repo, release, id), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/client.go b/vendor/code.gitea.io/sdk/gitea/client.go index f45961a96d9..5bf19c32ec0 100644 --- a/vendor/code.gitea.io/sdk/gitea/client.go +++ b/vendor/code.gitea.io/sdk/gitea/client.go @@ -317,7 +317,12 @@ func (c *Client) getWebResponse(method, path string, body io.Reader) ([]byte, *R return nil, nil, err } - defer resp.Body.Close() + defer func() { + if closeErr := resp.Body.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() + data, err := io.ReadAll(resp.Body) if debug { fmt.Printf("Response: %v\n\n", resp) @@ -397,7 +402,12 @@ func statusCodeToErr(resp *Response) (body []byte, err error) { // // error: body will be read for details // - defer resp.Body.Close() + defer func() { + if closeErr := resp.Body.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() + data, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("body read on HTTP error %d: %v", resp.StatusCode, err) @@ -410,7 +420,7 @@ func statusCodeToErr(resp *Response) (body []byte, err error) { // plain string, so we try to return a helpful error anyway path := resp.Request.URL.Path method := resp.Request.Method - return data, fmt.Errorf("Unknown API Error: %d\nRequest: '%s' with '%s' method and '%s' body", resp.StatusCode, path, method, string(data)) + return data, fmt.Errorf("unknown API error: %d\nRequest: '%s' with '%s' method and '%s' body", resp.StatusCode, path, method, string(data)) } if msg, ok := errMap["message"]; ok { @@ -436,12 +446,36 @@ func (c *Client) getResponseReader(method, path string, header http.Header, body return resp.Body, resp, nil } +func (c *Client) doRequestWithStatusHandle(method, path string, header http.Header, body io.Reader) (*Response, error) { + resp, err := c.doRequest(method, path, header, body) + if err != nil { + return resp, err + } + + // check for errors + if _, err = statusCodeToErr(resp); err != nil { + // resp.Body has already been closed in statusCodeToErr + return resp, err + } + defer func() { + if closeErr := resp.Body.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() + + return resp, err +} + func (c *Client) getResponse(method, path string, header http.Header, body io.Reader) ([]byte, *Response, error) { resp, err := c.doRequest(method, path, header, body) if err != nil { return nil, resp, err } - defer resp.Body.Close() + defer func() { + if closeErr := resp.Body.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() // check for errors data, err := statusCodeToErr(resp) @@ -471,7 +505,11 @@ func (c *Client) getStatusCode(method, path string, header http.Header, body io. if err != nil { return -1, resp, err } - defer resp.Body.Close() + defer func() { + if closeErr := resp.Body.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() return resp.StatusCode, resp, nil } diff --git a/vendor/code.gitea.io/sdk/gitea/git_hook.go b/vendor/code.gitea.io/sdk/gitea/git_hook.go index d8fbf71bd96..6b1f042dc95 100644 --- a/vendor/code.gitea.io/sdk/gitea/git_hook.go +++ b/vendor/code.gitea.io/sdk/gitea/git_hook.go @@ -57,8 +57,7 @@ func (c *Client) EditRepoGitHook(user, repo, id string, opt EditGitHookOption) ( if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/git/%s", user, repo, id), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/git/%s", user, repo, id), jsonHeader, bytes.NewReader(body)) } // DeleteRepoGitHook delete one Git hook from a repository @@ -66,6 +65,5 @@ func (c *Client) DeleteRepoGitHook(user, repo, id string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo, &id); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/git/%s", user, repo, id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/git/%s", user, repo, id), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/hook.go b/vendor/code.gitea.io/sdk/gitea/hook.go index f91b60c37cc..a18635c14db 100644 --- a/vendor/code.gitea.io/sdk/gitea/hook.go +++ b/vendor/code.gitea.io/sdk/gitea/hook.go @@ -191,8 +191,7 @@ func (c *Client) EditOrgHook(org string, id int64, opt EditHookOption) (*Respons if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), jsonHeader, bytes.NewReader(body)) } // EditMyHook modify one hook of the authenticated user, with hook id and options @@ -201,8 +200,7 @@ func (c *Client) EditMyHook(id int64, opt EditHookOption) (*Response, error) { if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/user/hooks/%d", id), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/user/hooks/%d", id), jsonHeader, bytes.NewReader(body)) } // EditRepoHook modify one hook of a repository, with hook id and options @@ -214,8 +212,7 @@ func (c *Client) EditRepoHook(user, repo string, id int64, opt EditHookOption) ( if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), jsonHeader, bytes.NewReader(body)) } // DeleteOrgHook delete one hook from an organization, with hook id @@ -223,14 +220,12 @@ func (c *Client) DeleteOrgHook(org string, id int64) (*Response, error) { if err := escapeValidatePathSegments(&org); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/orgs/%s/hooks/%d", org, id), nil, nil) } // DeleteMyHook delete one hook from the authenticated user, with hook id func (c *Client) DeleteMyHook(id int64) (*Response, error) { - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/hooks/%d", id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/hooks/%d", id), nil, nil) } // DeleteRepoHook delete one hook from a repository, with hook id @@ -238,6 +233,5 @@ func (c *Client) DeleteRepoHook(user, repo string, id int64) (*Response, error) if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/hooks/%d", user, repo, id), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/httpsign.go b/vendor/code.gitea.io/sdk/gitea/httpsign.go index 8aecb454f5d..9b76c6ce5de 100644 --- a/vendor/code.gitea.io/sdk/gitea/httpsign.go +++ b/vendor/code.gitea.io/sdk/gitea/httpsign.go @@ -147,7 +147,7 @@ func (c *Client) SignRequest(r *http.Request) error { if c.httpsigner.cert { // add our certificate to the headers to sign - pubkey, _ := ssh.ParsePublicKey(c.httpsigner.Signer.PublicKey().Marshal()) + pubkey, _ := ssh.ParsePublicKey(c.httpsigner.PublicKey().Marshal()) if cert, ok := pubkey.(*ssh.Certificate); ok { certString := base64.RawStdEncoding.EncodeToString(cert.Marshal()) r.Header.Add("x-ssh-certificate", certString) @@ -175,17 +175,26 @@ func (c *Client) SignRequest(r *http.Request) error { } // create a signer for the request and headers, the signature will be valid for 10 seconds - var ( - signer httpsig.SSHSigner - err error - ) + var err error // use legacyhttpsig to sign with RSA-SHA1 on older gitea releases if err = c.checkServerVersionGreaterThanOrEqual(version1_23_0); err != nil { - signer, _, err = legacyhttpsig.NewSSHSigner(c.httpsigner.Signer, httpsig.DigestSha512, headersToSign, legacyhttpsig.Signature, 10) - } else { - signer, _, err = httpsig.NewSSHSigner(c.httpsigner.Signer, httpsig.DigestSha512, headersToSign, httpsig.Signature, 10) + // Legacy signer + legacySigner, _, err := legacyhttpsig.NewSSHSigner(c.httpsigner, httpsig.DigestSha512, headersToSign, legacyhttpsig.Signature, 10) + if err != nil { + return fmt.Errorf("legacy httpsig.NewSSHSigner failed: %s", err) + } + + // sign the request, use the fingerprint if we don't have a certificate + keyID := "gitea" + if !c.httpsigner.cert { + keyID = ssh.FingerprintSHA256(c.httpsigner.PublicKey()) + } + + return legacySigner.SignRequest(keyID, r, contents) } + // Modern signer + modernSigner, _, err := httpsig.NewSSHSigner(c.httpsigner, httpsig.DigestSha512, headersToSign, httpsig.Signature, 10) if err != nil { return fmt.Errorf("httpsig.NewSSHSigner failed: %s", err) } @@ -193,15 +202,10 @@ func (c *Client) SignRequest(r *http.Request) error { // sign the request, use the fingerprint if we don't have a certificate keyID := "gitea" if !c.httpsigner.cert { - keyID = ssh.FingerprintSHA256(c.httpsigner.Signer.PublicKey()) + keyID = ssh.FingerprintSHA256(c.httpsigner.PublicKey()) } - err = signer.SignRequest(keyID, r, contents) - if err != nil { - return fmt.Errorf("httpsig.Signrequest failed: %s", err) - } - - return nil + return modernSigner.SignRequest(keyID, r, contents) } // findCertSigner returns the Signer containing a valid certificate diff --git a/vendor/code.gitea.io/sdk/gitea/issue.go b/vendor/code.gitea.io/sdk/gitea/issue.go index 603d23de2d4..5f5924fab39 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue.go +++ b/vendor/code.gitea.io/sdk/gitea/issue.go @@ -294,10 +294,9 @@ func (c *Client) DeleteIssue(user, repo string, id int64) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d", user, repo, id), nil, nil) - return resp, err } func (c *Client) issueBackwardsCompatibility(issue *Issue) { diff --git a/vendor/code.gitea.io/sdk/gitea/issue_comment.go b/vendor/code.gitea.io/sdk/gitea/issue_comment.go index 8131a6edc27..cafbc4a6032 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_comment.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_comment.go @@ -149,6 +149,5 @@ func (c *Client) DeleteIssueComment(owner, repo string, commentID int64) (*Respo if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/comments/%d", owner, repo, commentID), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/comments/%d", owner, repo, commentID), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/issue_label.go b/vendor/code.gitea.io/sdk/gitea/issue_label.go index f343ee5ef6a..1868cd06953 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_label.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_label.go @@ -8,145 +8,8 @@ import ( "bytes" "encoding/json" "fmt" - "regexp" - "strings" ) -// Label a label to an issue or a pr -type Label struct { - ID int64 `json:"id"` - Name string `json:"name"` - // example: 00aabb - Color string `json:"color"` - Description string `json:"description"` - URL string `json:"url"` -} - -// ListLabelsOptions options for listing repository's labels -type ListLabelsOptions struct { - ListOptions -} - -// ListRepoLabels list labels of one repository -func (c *Client) ListRepoLabels(owner, repo string, opt ListLabelsOptions) ([]*Label, *Response, error) { - if err := escapeValidatePathSegments(&owner, &repo); err != nil { - return nil, nil, err - } - opt.setDefaults() - labels := make([]*Label, 0, opt.PageSize) - resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels?%s", owner, repo, opt.getURLQuery().Encode()), nil, nil, &labels) - return labels, resp, err -} - -// GetRepoLabel get one label of repository by repo it -func (c *Client) GetRepoLabel(owner, repo string, id int64) (*Label, *Response, error) { - if err := escapeValidatePathSegments(&owner, &repo); err != nil { - return nil, nil, err - } - label := new(Label) - resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil, label) - return label, resp, err -} - -// CreateLabelOption options for creating a label -type CreateLabelOption struct { - Name string `json:"name"` - // example: #00aabb - Color string `json:"color"` - Description string `json:"description"` -} - -// Validate the CreateLabelOption struct -func (opt CreateLabelOption) Validate() error { - aw, err := regexp.MatchString("^#?[0-9,a-f,A-F]{6}$", opt.Color) - if err != nil { - return err - } - if !aw { - return fmt.Errorf("invalid color format") - } - if len(strings.TrimSpace(opt.Name)) == 0 { - return fmt.Errorf("empty name not allowed") - } - return nil -} - -// CreateLabel create one label of repository -func (c *Client) CreateLabel(owner, repo string, opt CreateLabelOption) (*Label, *Response, error) { - if err := escapeValidatePathSegments(&owner, &repo); err != nil { - return nil, nil, err - } - if err := opt.Validate(); err != nil { - return nil, nil, err - } - if len(opt.Color) == 6 { - if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil { - opt.Color = "#" + opt.Color - } - } - body, err := json.Marshal(&opt) - if err != nil { - return nil, nil, err - } - label := new(Label) - resp, err := c.getParsedResponse("POST", - fmt.Sprintf("/repos/%s/%s/labels", owner, repo), - jsonHeader, bytes.NewReader(body), label) - return label, resp, err -} - -// EditLabelOption options for editing a label -type EditLabelOption struct { - Name *string `json:"name"` - Color *string `json:"color"` - Description *string `json:"description"` -} - -// Validate the EditLabelOption struct -func (opt EditLabelOption) Validate() error { - if opt.Color != nil { - aw, err := regexp.MatchString("^#?[0-9,a-f,A-F]{6}$", *opt.Color) - if err != nil { - return err - } - if !aw { - return fmt.Errorf("invalid color format") - } - } - if opt.Name != nil { - if len(strings.TrimSpace(*opt.Name)) == 0 { - return fmt.Errorf("empty name not allowed") - } - } - return nil -} - -// EditLabel modify one label with options -func (c *Client) EditLabel(owner, repo string, id int64, opt EditLabelOption) (*Label, *Response, error) { - if err := escapeValidatePathSegments(&owner, &repo); err != nil { - return nil, nil, err - } - if err := opt.Validate(); err != nil { - return nil, nil, err - } - body, err := json.Marshal(&opt) - if err != nil { - return nil, nil, err - } - label := new(Label) - resp, err := c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), label) - return label, resp, err -} - -// DeleteLabel delete one label of repository by id -func (c *Client) DeleteLabel(owner, repo string, id int64) (*Response, error) { - if err := escapeValidatePathSegments(&owner, &repo); err != nil { - return nil, err - } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil) - return resp, err -} - // GetIssueLabels get labels of one issue via issue id func (c *Client) GetIssueLabels(owner, repo string, index int64, opts ListLabelsOptions) ([]*Label, *Response, error) { if err := escapeValidatePathSegments(&owner, &repo); err != nil { @@ -197,8 +60,7 @@ func (c *Client) DeleteIssueLabel(owner, repo string, index, label int64) (*Resp if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels/%d", owner, repo, index, label), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels/%d", owner, repo, index, label), nil, nil) } // ClearIssueLabels delete all the labels of one issue. @@ -206,6 +68,5 @@ func (c *Client) ClearIssueLabels(owner, repo string, index int64) (*Response, e if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/labels", owner, repo, index), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/issue_milestone.go b/vendor/code.gitea.io/sdk/gitea/issue_milestone.go index 4e0d79a9f93..87fd4936984 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_milestone.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_milestone.go @@ -192,8 +192,7 @@ func (c *Client) DeleteMilestone(owner, repo string, id int64) (*Response, error if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%d", owner, repo, id), nil, nil) } // DeleteMilestoneByName delete one milestone by name @@ -209,8 +208,7 @@ func (c *Client) DeleteMilestoneByName(owner, repo, name string) (*Response, err if err := escapeValidatePathSegments(&owner, &repo, &name); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%s", owner, repo, name), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/milestones/%s", owner, repo, name), nil, nil) } // resolveMilestoneByName is a fallback method to find milestone id by name diff --git a/vendor/code.gitea.io/sdk/gitea/issue_reaction.go b/vendor/code.gitea.io/sdk/gitea/issue_reaction.go index b45c0666466..6c79faffeeb 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_reaction.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_reaction.go @@ -68,8 +68,7 @@ func (c *Client) DeleteIssueReaction(owner, repo string, index int64, reaction s if err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/reactions", owner, repo, index), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/reactions", owner, repo, index), jsonHeader, bytes.NewReader(body)) } // PostIssueCommentReaction add a reaction to a comment of an issue @@ -97,8 +96,7 @@ func (c *Client) DeleteIssueCommentReaction(owner, repo string, commentID int64, if err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/comments/%d/reactions", owner, repo, commentID), jsonHeader, bytes.NewReader(body)) - return resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/issue_stopwatch.go b/vendor/code.gitea.io/sdk/gitea/issue_stopwatch.go index ebb0b8ae404..72f0d7a3269 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_stopwatch.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_stopwatch.go @@ -32,8 +32,7 @@ func (c *Client) DeleteIssueStopwatch(owner, repo string, index int64) (*Respons if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/delete", owner, repo, index), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/delete", owner, repo, index), nil, nil) } // StartIssueStopWatch starts a stopwatch for an existing issue for a given @@ -42,8 +41,7 @@ func (c *Client) StartIssueStopWatch(owner, repo string, index int64) (*Response if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/start", owner, repo, index), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/start", owner, repo, index), nil, nil) } // StopIssueStopWatch stops an existing stopwatch for an issue in a given @@ -52,6 +50,5 @@ func (c *Client) StopIssueStopWatch(owner, repo string, index int64) (*Response, if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/stop", owner, repo, index), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/issues/%d/stopwatch/stop", owner, repo, index), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go b/vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go index c558516237d..164c1f0ee01 100644 --- a/vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go +++ b/vendor/code.gitea.io/sdk/gitea/issue_tracked_time.go @@ -128,8 +128,7 @@ func (c *Client) ResetIssueTime(owner, repo string, index int64) (*Response, err if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times", owner, repo, index), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times", owner, repo, index), jsonHeader, nil) } // DeleteTime delete a specific tracked time by id of a single issue for a given repository @@ -137,6 +136,5 @@ func (c *Client) DeleteTime(owner, repo string, index, timeID int64) (*Response, if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times/%d", owner, repo, index, timeID), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/issues/%d/times/%d", owner, repo, index, timeID), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/notifications.go b/vendor/code.gitea.io/sdk/gitea/notifications.go index 640cc4daece..a75a41e9bc1 100644 --- a/vendor/code.gitea.io/sdk/gitea/notifications.go +++ b/vendor/code.gitea.io/sdk/gitea/notifications.go @@ -174,7 +174,7 @@ func (c *Client) ReadNotification(id int64, status ...NotifyStatus) (*Notificati resp, err := c.getParsedResponse("PATCH", link, nil, nil, thread) return thread, resp, err } - _, resp, err := c.getResponse("PATCH", link, nil, nil) + resp, err := c.doRequestWithStatusHandle("PATCH", link, nil, nil) return nil, resp, err } @@ -210,7 +210,7 @@ func (c *Client) ReadNotifications(opt MarkNotificationOptions) ([]*Notification resp, err := c.getParsedResponse("PUT", link.String(), nil, nil, &threads) return threads, resp, err } - _, resp, err := c.getResponse("PUT", link.String(), nil, nil) + resp, err := c.doRequestWithStatusHandle("PUT", link.String(), nil, nil) return nil, resp, err } @@ -252,6 +252,6 @@ func (c *Client) ReadRepoNotifications(owner, repo string, opt MarkNotificationO resp, err := c.getParsedResponse("PUT", link.String(), nil, nil, &threads) return threads, resp, err } - _, resp, err := c.getResponse("PUT", link.String(), nil, nil) + resp, err := c.doRequestWithStatusHandle("PUT", link.String(), nil, nil) return nil, resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/oauth2.go b/vendor/code.gitea.io/sdk/gitea/oauth2.go index 86e25683876..7dfa14cac3b 100644 --- a/vendor/code.gitea.io/sdk/gitea/oauth2.go +++ b/vendor/code.gitea.io/sdk/gitea/oauth2.go @@ -88,6 +88,6 @@ func (c *Client) DeleteOauth2(oauth2id int64) (*Response, error) { if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/applications/oauth2/%d", oauth2id), nil, nil) + resp, err := c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/applications/oauth2/%d", oauth2id), nil, nil) return resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/org.go b/vendor/code.gitea.io/sdk/gitea/org.go index 9df4d5318e5..729b638c705 100644 --- a/vendor/code.gitea.io/sdk/gitea/org.go +++ b/vendor/code.gitea.io/sdk/gitea/org.go @@ -141,8 +141,7 @@ func (c *Client) EditOrg(orgname string, opt EditOrgOption) (*Response, error) { if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, bytes.NewReader(body)) } // DeleteOrg deletes an organization @@ -150,6 +149,5 @@ func (c *Client) DeleteOrg(orgname string) (*Response, error) { if err := escapeValidatePathSegments(&orgname); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/orgs/%s", orgname), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/org_action.go b/vendor/code.gitea.io/sdk/gitea/org_action.go index 3ffa3f22de4..0dafa91445f 100644 --- a/vendor/code.gitea.io/sdk/gitea/org_action.go +++ b/vendor/code.gitea.io/sdk/gitea/org_action.go @@ -31,10 +31,152 @@ func (c *Client) ListOrgActionSecret(org string, opt ListOrgActionSecretOption) return secrets, resp, err } +type OrgActionVariable struct { + OwnerID int64 `json:"owner_id"` + RepoID int64 `json:"repo_id"` + Name string `json:"name"` + Data string `json:"data"` + Description string `json:"description"` +} + +// ListOrgActionVariableOption lists OrgActionVariable options +type ListOrgActionVariableOption struct { + ListOptions +} + +// ListOrgActionVariable lists an organization's action variables +func (c *Client) ListOrgActionVariable(org string, opt ListOrgActionVariableOption) ([]*OrgActionVariable, *Response, error) { + if err := escapeValidatePathSegments(&org); err != nil { + return nil, nil, err + } + opt.setDefaults() + variables := make([]*OrgActionVariable, 0, opt.PageSize) + + link, _ := url.Parse(fmt.Sprintf("/orgs/%s/actions/variables", org)) + link.RawQuery = opt.getURLQuery().Encode() + resp, err := c.getParsedResponse("GET", link.String(), jsonHeader, nil, &variables) + return variables, resp, err +} + +// GetOrgActionVariable gets a single organization's action variable by name +func (c *Client) GetOrgActionVariable(org, name string) (*OrgActionVariable, *Response, error) { + if err := escapeValidatePathSegments(&org, &name); err != nil { + return nil, nil, err + } + var variable OrgActionVariable + resp, err := c.getParsedResponse("GET", + fmt.Sprintf("/orgs/%s/actions/variables/%s", org, name), + jsonHeader, nil, &variable) + if err != nil { + return nil, resp, err + } + return &variable, resp, nil +} + +// CreateOrgActionVariableOption represents the options for creating an org action variable. +type CreateOrgActionVariableOption struct { + Name string `json:"name"` // Name is the name of the variable. + Value string `json:"value"` // Value is the value of the variable. + Description string `json:"description"` // Description is the description of the variable. +} + +// Validate checks if the CreateOrgActionVariableOption is valid. +func (opt *CreateOrgActionVariableOption) Validate() error { + if len(opt.Name) == 0 { + return fmt.Errorf("name required") + } + if len(opt.Name) > 30 { + return fmt.Errorf("name too long") + } + if len(opt.Value) == 0 { + return fmt.Errorf("value required") + } + return nil +} + +// CreateOrgActionVariable creates a variable for the specified organization in the Gitea Actions. +func (c *Client) CreateOrgActionVariable(org string, opt CreateOrgActionVariableOption) (*Response, error) { + if err := escapeValidatePathSegments(&org); err != nil { + return nil, err + } + if err := (&opt).Validate(); err != nil { + return nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, err + } + + status, resp, err := c.getStatusCode("POST", fmt.Sprintf("/orgs/%s/actions/variables/%s", org, opt.Name), jsonHeader, bytes.NewReader(body)) + if err != nil { + return nil, err + } + + switch status { + case http.StatusCreated: + return resp, nil + case http.StatusNoContent: + return resp, nil + case http.StatusNotFound: + return resp, fmt.Errorf("forbidden") + case http.StatusBadRequest: + return resp, fmt.Errorf("bad request") + default: + return resp, fmt.Errorf("unexpected Status: %d", status) + } +} + +// UpdateOrgActionVariableOption represents the options for updating an org action variable. +type UpdateOrgActionVariableOption struct { + Value string `json:"value"` // Value is the new value of the variable. + Description string `json:"description"` // Description is the new description of the variable. +} + +// Validate checks if the UpdateOrgActionVariableOption is valid. +func (opt *UpdateOrgActionVariableOption) Validate() error { + if len(opt.Value) == 0 { + return fmt.Errorf("value required") + } + return nil +} + +// UpdateOrgActionVariable updates a variable for the specified organization in the Gitea Actions. +func (c *Client) UpdateOrgActionVariable(org, name string, opt UpdateOrgActionVariableOption) (*Response, error) { + if err := escapeValidatePathSegments(&org, &name); err != nil { + return nil, err + } + if err := (&opt).Validate(); err != nil { + return nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, err + } + + status, resp, err := c.getStatusCode("PUT", fmt.Sprintf("/orgs/%s/actions/variables/%s", org, name), jsonHeader, bytes.NewReader(body)) + if err != nil { + return nil, err + } + + switch status { + case http.StatusOK: + return resp, nil + case http.StatusNoContent: + return resp, nil + case http.StatusNotFound: + return resp, fmt.Errorf("forbidden") + case http.StatusBadRequest: + return resp, fmt.Errorf("bad request") + default: + return resp, fmt.Errorf("unexpected Status: %d", status) + } +} + // CreateSecretOption represents the options for creating a secret. type CreateSecretOption struct { - Name string `json:"name"` // Name is the name of the secret. - Data string `json:"data"` // Data is the data of the secret. + Name string `json:"name"` // Name is the name of the secret. + Data string `json:"data"` // Data is the data of the secret. + Description string `json:"description"` // Description is the description of the secret. } // Validate checks if the CreateSecretOption is valid. diff --git a/vendor/code.gitea.io/sdk/gitea/org_label.go b/vendor/code.gitea.io/sdk/gitea/org_label.go new file mode 100644 index 00000000000..c524235e13a --- /dev/null +++ b/vendor/code.gitea.io/sdk/gitea/org_label.go @@ -0,0 +1,116 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package gitea + +import ( + "bytes" + "encoding/json" + "fmt" + "net/url" + "regexp" + "strings" +) + +// ListOrgLabelsOptions options for listing organization labels +type ListOrgLabelsOptions struct { + ListOptions +} + +// ListOrgLabels returns the labels defined at the org level +func (c *Client) ListOrgLabels(orgName string, opt ListOrgLabelsOptions) ([]*Label, *Response, error) { + if err := escapeValidatePathSegments(&orgName); err != nil { + return nil, nil, err + } + opt.setDefaults() + labels := make([]*Label, 0, opt.PageSize) + link, _ := url.Parse(fmt.Sprintf("/orgs/%s/labels", orgName)) + link.RawQuery = opt.getURLQuery().Encode() + resp, err := c.getParsedResponse("GET", link.String(), jsonHeader, nil, &labels) + return labels, resp, err +} + +type CreateOrgLabelOption struct { + // Name of the label + Name string `json:"name"` + // Color of the label in hex format without # + Color string `json:"color"` + // Description of the label + Description string `json:"description"` + // Whether this is an exclusive label + Exclusive bool `json:"exclusive"` +} + +// Validate the CreateLabelOption struct +func (opt CreateOrgLabelOption) Validate() error { + aw, err := regexp.MatchString("^#?[0-9,a-f,A-F]{6}$", opt.Color) + if err != nil { + return err + } + if !aw { + return fmt.Errorf("invalid color format") + } + if len(strings.TrimSpace(opt.Name)) == 0 { + return fmt.Errorf("empty name not allowed") + } + return nil +} + +// CreateOrgLabel creates a new label under an organization +func (c *Client) CreateOrgLabel(orgName string, opt CreateOrgLabelOption) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&orgName); err != nil { + return nil, nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("POST", fmt.Sprintf("/orgs/%s/labels", orgName), jsonHeader, bytes.NewReader(body), label) + return label, resp, err +} + +// GetOrgLabel get one label of organization by org it +func (c *Client) GetOrgLabel(orgName string, labelID int64) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&orgName); err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("GET", fmt.Sprintf("/orgs/%s/labels/%d", orgName, labelID), nil, nil, label) + return label, resp, err +} + +type EditOrgLabelOption struct { + // New name of the label + Name *string `json:"name"` + // New color of the label in hex format without # + Color *string `json:"color"` + // New description of the label + Description *string `json:"description"` + // Whether this is an exclusive label + Exclusive *bool `json:"exclusive,omitempty"` +} + +// EditOrgLabel edits an existing org-level label by ID +func (c *Client) EditOrgLabel(orgName string, labelID int64, opt EditOrgLabelOption) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&orgName); err != nil { + return nil, nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("PATCH", fmt.Sprintf("/orgs/%s/labels/%d", orgName, labelID), jsonHeader, bytes.NewReader(body), label) + return label, resp, err +} + +// DeleteOrgLabel deletes a org label by ID +func (c *Client) DeleteOrgLabel(orgName string, labelID int64) (*Response, error) { + if err := escapeValidatePathSegments(&orgName); err != nil { + return nil, err + } + _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/orgs/%s/labels/%d", orgName, labelID), jsonHeader, nil) + return resp, err +} diff --git a/vendor/code.gitea.io/sdk/gitea/org_member.go b/vendor/code.gitea.io/sdk/gitea/org_member.go index 79dad4e87c6..91ac44a7890 100644 --- a/vendor/code.gitea.io/sdk/gitea/org_member.go +++ b/vendor/code.gitea.io/sdk/gitea/org_member.go @@ -15,8 +15,7 @@ func (c *Client) DeleteOrgMembership(org, user string) (*Response, error) { if err := escapeValidatePathSegments(&org, &user); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/orgs/%s/members/%s", org, user), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/orgs/%s/members/%s", org, user), nil, nil) } // ListOrgMembershipOption list OrgMembership options diff --git a/vendor/code.gitea.io/sdk/gitea/org_team.go b/vendor/code.gitea.io/sdk/gitea/org_team.go index d2457468084..070b4f91b05 100644 --- a/vendor/code.gitea.io/sdk/gitea/org_team.go +++ b/vendor/code.gitea.io/sdk/gitea/org_team.go @@ -202,14 +202,12 @@ func (c *Client) EditTeam(id int64, opt EditTeamOption) (*Response, error) { if err != nil { return nil, err } - _, resp, err := c.getResponse("PATCH", fmt.Sprintf("/teams/%d", id), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PATCH", fmt.Sprintf("/teams/%d", id), jsonHeader, bytes.NewReader(body)) } // DeleteTeam deletes a team of an organization func (c *Client) DeleteTeam(id int64) (*Response, error) { - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/teams/%d", id), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/teams/%d", id), nil, nil) } // ListTeamMembersOptions options for listing team's members @@ -240,8 +238,7 @@ func (c *Client) AddTeamMember(id int64, user string) (*Response, error) { if err := escapeValidatePathSegments(&user); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/teams/%d/members/%s", id, user), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/teams/%d/members/%s", id, user), nil, nil) } // RemoveTeamMember removes a member from a team @@ -249,8 +246,7 @@ func (c *Client) RemoveTeamMember(id int64, user string) (*Response, error) { if err := escapeValidatePathSegments(&user); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/teams/%d/members/%s", id, user), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/teams/%d/members/%s", id, user), nil, nil) } // ListTeamRepositoriesOptions options for listing team's repositories @@ -271,8 +267,7 @@ func (c *Client) AddTeamRepository(id int64, org, repo string) (*Response, error if err := escapeValidatePathSegments(&org, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/teams/%d/repos/%s/%s", id, org, repo), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/teams/%d/repos/%s/%s", id, org, repo), nil, nil) } // RemoveTeamRepository removes a repository from a team @@ -280,6 +275,5 @@ func (c *Client) RemoveTeamRepository(id int64, org, repo string) (*Response, er if err := escapeValidatePathSegments(&org, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/teams/%d/repos/%s/%s", id, org, repo), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/teams/%d/repos/%s/%s", id, org, repo), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/package.go b/vendor/code.gitea.io/sdk/gitea/package.go index 41ffdee6496..c55933c07ca 100644 --- a/vendor/code.gitea.io/sdk/gitea/package.go +++ b/vendor/code.gitea.io/sdk/gitea/package.go @@ -78,8 +78,7 @@ func (c *Client) DeletePackage(owner, packageType, name, version string) (*Respo if err := escapeValidatePathSegments(&owner, &packageType, &name, &version); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/packages/%s/%s/%s/%s", owner, packageType, name, version), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/packages/%s/%s/%s/%s", owner, packageType, name, version), nil, nil) } // ListPackageFiles lists the files within a package diff --git a/vendor/code.gitea.io/sdk/gitea/pull.go b/vendor/code.gitea.io/sdk/gitea/pull.go index 8ca81647222..5c615869af3 100644 --- a/vendor/code.gitea.io/sdk/gitea/pull.go +++ b/vendor/code.gitea.io/sdk/gitea/pull.go @@ -36,6 +36,7 @@ type PullRequest struct { Assignee *User `json:"assignee"` Assignees []*User `json:"assignees"` State StateType `json:"state"` + Draft bool `json:"draft"` IsLocked bool `json:"is_locked"` Comments int `json:"comments"` @@ -149,15 +150,17 @@ func (c *Client) GetPullRequest(owner, repo string, index int64) (*PullRequest, // CreatePullRequestOption options when creating a pull request type CreatePullRequestOption struct { - Head string `json:"head"` - Base string `json:"base"` - Title string `json:"title"` - Body string `json:"body"` - Assignee string `json:"assignee"` - Assignees []string `json:"assignees"` - Milestone int64 `json:"milestone"` - Labels []int64 `json:"labels"` - Deadline *time.Time `json:"due_date"` + Head string `json:"head"` + Base string `json:"base"` + Title string `json:"title"` + Body string `json:"body"` + Assignee string `json:"assignee"` + Assignees []string `json:"assignees"` + Reviewers []string `json:"reviewers"` + TeamReviewers []string `json:"team_reviewers"` + Milestone int64 `json:"milestone"` + Labels []int64 `json:"labels"` + Deadline *time.Time `json:"due_date"` } // CreatePullRequest create pull request with options @@ -179,7 +182,7 @@ func (c *Client) CreatePullRequest(owner, repo string, opt CreatePullRequestOpti // EditPullRequestOption options when modify pull request type EditPullRequestOption struct { Title string `json:"title"` - Body string `json:"body"` + Body *string `json:"body"` Base string `json:"base"` Assignee string `json:"assignee"` Assignees []string `json:"assignees"` diff --git a/vendor/code.gitea.io/sdk/gitea/pull_review.go b/vendor/code.gitea.io/sdk/gitea/pull_review.go index 6d32c4f1246..e5e39bd2e62 100644 --- a/vendor/code.gitea.io/sdk/gitea/pull_review.go +++ b/vendor/code.gitea.io/sdk/gitea/pull_review.go @@ -202,8 +202,7 @@ func (c *Client) DeletePullReview(owner, repo string, index, id int64) (*Respons return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d", owner, repo, index, id), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d", owner, repo, index, id), jsonHeader, nil) } // CreatePullReview create a review to an pull request @@ -265,10 +264,9 @@ func (c *Client) CreateReviewRequests(owner, repo string, index int64, opt PullR return nil, err } - _, resp, err := c.getResponse("POST", + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, index), jsonHeader, bytes.NewReader(body)) - return resp, err } // DeleteReviewRequests delete review requests to an pull request @@ -284,10 +282,9 @@ func (c *Client) DeleteReviewRequests(owner, repo string, index int64, opt PullR return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, index), jsonHeader, bytes.NewReader(body)) - return resp, err } // DismissPullReview dismiss a review for a pull request @@ -303,10 +300,9 @@ func (c *Client) DismissPullReview(owner, repo string, index, id int64, opt Dism return nil, err } - _, resp, err := c.getResponse("POST", + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d/dismissals", owner, repo, index, id), jsonHeader, bytes.NewReader(body)) - return resp, err } // UnDismissPullReview cancel to dismiss a review for a pull request @@ -318,8 +314,7 @@ func (c *Client) UnDismissPullReview(owner, repo string, index, id int64) (*Resp return nil, err } - _, resp, err := c.getResponse("POST", + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d/undismissals", owner, repo, index, id), jsonHeader, nil) - return resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/release.go b/vendor/code.gitea.io/sdk/gitea/release.go index f3707b704fb..d53be26c3e2 100644 --- a/vendor/code.gitea.io/sdk/gitea/release.go +++ b/vendor/code.gitea.io/sdk/gitea/release.go @@ -173,10 +173,9 @@ func (c *Client) DeleteRelease(user, repo string, id int64) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), nil, nil) - return resp, err } // DeleteReleaseByTag deletes a release frm a repository by tag @@ -187,10 +186,9 @@ func (c *Client) DeleteReleaseByTag(user, repo, tag string) (*Response, error) { if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/releases/tags/%s", user, repo, tag), nil, nil) - return resp, err } // fallbackGetReleaseByTag is fallback for old gitea installations ( < 1.13.0 ) diff --git a/vendor/code.gitea.io/sdk/gitea/repo.go b/vendor/code.gitea.io/sdk/gitea/repo.go index b8dba5b2af7..3f8e7a9989e 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo.go +++ b/vendor/code.gitea.io/sdk/gitea/repo.go @@ -259,10 +259,10 @@ func (opt *SearchRepoOptions) QueryEncode() string { // Repo Attributes if opt.IsPrivate != nil { - query.Add("is_private", fmt.Sprintf("%v", opt.IsPrivate)) + query.Add("is_private", fmt.Sprintf("%t", *opt.IsPrivate)) } if opt.IsArchived != nil { - query.Add("archived", fmt.Sprintf("%v", opt.IsArchived)) + query.Add("archived", fmt.Sprintf("%t", *opt.IsArchived)) } if opt.ExcludeTemplate { query.Add("template", "false") @@ -506,8 +506,7 @@ func (c *Client) DeleteRepo(owner, repo string) (*Response, error) { if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s", owner, repo), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s", owner, repo), nil, nil) } // MirrorSync adds a mirrored repository to the mirror sync queue. @@ -515,8 +514,7 @@ func (c *Client) MirrorSync(owner, repo string) (*Response, error) { if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/mirror-sync", owner, repo), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/mirror-sync", owner, repo), nil, nil) } // GetRepoLanguages return language stats of a repo diff --git a/vendor/code.gitea.io/sdk/gitea/repo_action.go b/vendor/code.gitea.io/sdk/gitea/repo_action.go index 65bccccb893..1764dbb4c63 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_action.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_action.go @@ -84,8 +84,7 @@ func (c *Client) DeleteRepoActionSecret(user, repo, secretName string) (*Respons return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/actions/secrets/%s", user, repo, secretName), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/actions/secrets/%s", user, repo, secretName), nil, nil) } // GetRepoActionVariable returns a repository variable in the Gitea Actions. @@ -117,8 +116,7 @@ func (c *Client) CreateRepoActionVariable(user, repo, variableName, value string return nil, err } - _, resp, err := c.getResponse("POST", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, repo, variableName), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("POST", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, repo, variableName), jsonHeader, bytes.NewReader(body)) } // UpdateRepoActionVariable updates a repository variable in the Gitea Actions. @@ -139,8 +137,7 @@ func (c *Client) UpdateRepoActionVariable(user, repo, variableName, value string return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, repo, variableName), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, repo, variableName), jsonHeader, bytes.NewReader(body)) } // DeleteRepoActionVariable deletes a repository variable in the Gitea Actions. @@ -151,6 +148,5 @@ func (c *Client) DeleteRepoActionVariable(user, reponame, variableName string) ( return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, reponame, variableName), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/actions/variables/%s", user, reponame, variableName), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/repo_branch.go b/vendor/code.gitea.io/sdk/gitea/repo_branch.go index 0b7e873c4fa..637ad5f2fa7 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_branch.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_branch.go @@ -8,6 +8,7 @@ package gitea import ( "bytes" "encoding/json" + "errors" "fmt" "time" ) @@ -100,6 +101,36 @@ func (c *Client) DeleteRepoBranch(user, repo, branch string) (bool, *Response, e return status == 204, resp, nil } +type UpdateRepoBranchOption struct { + Name string `json:"name"` +} + +func (opt UpdateRepoBranchOption) Validate() error { + if len(opt.Name) == 0 { + return errors.New("empty Name field") + } + + return nil +} + +func (c *Client) UpdateRepoBranch(user, repo, branch string, opt UpdateRepoBranchOption) (sucessful bool, resp *Response, err error) { + if err := escapeValidatePathSegments(&user, &repo, &branch); err != nil { + return false, nil, err + } + if err := c.checkServerVersionGreaterThanOrEqual(version1_23_0); err != nil { + return false, nil, err + } + if err := opt.Validate(); err != nil { + return false, nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return false, nil, err + } + status, resp, err := c.getStatusCode("PATCH", fmt.Sprintf("/repos/%s/%s/branches/%s", user, repo, branch), jsonHeader, bytes.NewReader(body)) + return status == 204, resp, err +} + // CreateBranchOption options when creating a branch in a repository type CreateBranchOption struct { // Name of the branch to create diff --git a/vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go b/vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go index 3196d03bfd0..4f40dc36066 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_branch_protection.go @@ -168,6 +168,5 @@ func (c *Client) DeleteBranchProtection(owner, repo, name string) (*Response, er if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/branch_protections/%s", owner, repo, name), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/branch_protections/%s", owner, repo, name), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/repo_collaborator.go b/vendor/code.gitea.io/sdk/gitea/repo_collaborator.go index 41e25765505..2825a3edabb 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_collaborator.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_collaborator.go @@ -122,8 +122,7 @@ func (c *Client) AddCollaborator(user, repo, collaborator string, opt AddCollabo if err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), jsonHeader, bytes.NewReader(body)) } // DeleteCollaborator remove a collaborator from a repository @@ -131,9 +130,8 @@ func (c *Client) DeleteCollaborator(user, repo, collaborator string) (*Response, if err := escapeValidatePathSegments(&user, &repo, &collaborator); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/collaborators/%s", user, repo, collaborator), nil, nil) - return resp, err } // GetReviewers return all users that can be requested to review in this repo diff --git a/vendor/code.gitea.io/sdk/gitea/repo_file.go b/vendor/code.gitea.io/sdk/gitea/repo_file.go index 9285be2aaae..1c078d9d6f8 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_file.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_file.go @@ -126,7 +126,11 @@ func (c *Client) GetFile(owner, repo, ref, filepath string, resolveLFS ...bool) if reader == nil { return nil, resp, err } - defer reader.Close() + defer func() { + if closeErr := reader.Close(); closeErr != nil && err == nil { + err = closeErr + } + }() data, err2 := io.ReadAll(reader) if err2 != nil { diff --git a/vendor/code.gitea.io/sdk/gitea/repo_key.go b/vendor/code.gitea.io/sdk/gitea/repo_key.go index ee2ff4084e3..b9964fb786b 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_key.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_key.go @@ -86,6 +86,5 @@ func (c *Client) DeleteDeployKey(owner, repo string, keyID int64) (*Response, er if err := escapeValidatePathSegments(&owner, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/keys/%d", owner, repo, keyID), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/keys/%d", owner, repo, keyID), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/repo_label.go b/vendor/code.gitea.io/sdk/gitea/repo_label.go new file mode 100644 index 00000000000..097928aded0 --- /dev/null +++ b/vendor/code.gitea.io/sdk/gitea/repo_label.go @@ -0,0 +1,150 @@ +// Copyright 2016 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package gitea + +import ( + "bytes" + "encoding/json" + "fmt" + "regexp" + "strings" +) + +// Label a label to an issue or a pr +type Label struct { + ID int64 `json:"id"` + Name string `json:"name"` + // example: 00aabb + Color string `json:"color"` + Description string `json:"description"` + Exclusive bool `json:"exclusive"` + URL string `json:"url"` +} + +// ListLabelsOptions options for listing repository's labels +type ListLabelsOptions struct { + ListOptions +} + +// ListRepoLabels list labels of one repository +func (c *Client) ListRepoLabels(owner, repo string, opt ListLabelsOptions) ([]*Label, *Response, error) { + if err := escapeValidatePathSegments(&owner, &repo); err != nil { + return nil, nil, err + } + opt.setDefaults() + labels := make([]*Label, 0, opt.PageSize) + resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels?%s", owner, repo, opt.getURLQuery().Encode()), nil, nil, &labels) + return labels, resp, err +} + +// GetRepoLabel get one label of repository by repo it +func (c *Client) GetRepoLabel(owner, repo string, id int64) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&owner, &repo); err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil, label) + return label, resp, err +} + +// CreateLabelOption options for creating a label +type CreateLabelOption struct { + Name string `json:"name"` + // example: #00aabb + Color string `json:"color"` + Description string `json:"description"` + Exclusive bool `json:"exclusive"` +} + +// Validate the CreateLabelOption struct +func (opt CreateLabelOption) Validate() error { + aw, err := regexp.MatchString("^#?[0-9,a-f,A-F]{6}$", opt.Color) + if err != nil { + return err + } + if !aw { + return fmt.Errorf("invalid color format") + } + if len(strings.TrimSpace(opt.Name)) == 0 { + return fmt.Errorf("empty name not allowed") + } + return nil +} + +// CreateLabel create one label of repository +func (c *Client) CreateLabel(owner, repo string, opt CreateLabelOption) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&owner, &repo); err != nil { + return nil, nil, err + } + if err := opt.Validate(); err != nil { + return nil, nil, err + } + if len(opt.Color) == 6 { + if err := c.checkServerVersionGreaterThanOrEqual(version1_12_0); err != nil { + opt.Color = "#" + opt.Color + } + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("POST", + fmt.Sprintf("/repos/%s/%s/labels", owner, repo), + jsonHeader, bytes.NewReader(body), label) + return label, resp, err +} + +// EditLabelOption options for editing a label +type EditLabelOption struct { + Name *string `json:"name"` + Color *string `json:"color"` + Description *string `json:"description"` + Exclusive *bool `json:"exclusive"` +} + +// Validate the EditLabelOption struct +func (opt EditLabelOption) Validate() error { + if opt.Color != nil { + aw, err := regexp.MatchString("^#?[0-9,a-f,A-F]{6}$", *opt.Color) + if err != nil { + return err + } + if !aw { + return fmt.Errorf("invalid color format") + } + } + if opt.Name != nil { + if len(strings.TrimSpace(*opt.Name)) == 0 { + return fmt.Errorf("empty name not allowed") + } + } + return nil +} + +// EditLabel modify one label with options +func (c *Client) EditLabel(owner, repo string, id int64, opt EditLabelOption) (*Label, *Response, error) { + if err := escapeValidatePathSegments(&owner, &repo); err != nil { + return nil, nil, err + } + if err := opt.Validate(); err != nil { + return nil, nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, nil, err + } + label := new(Label) + resp, err := c.getParsedResponse("PATCH", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), jsonHeader, bytes.NewReader(body), label) + return label, resp, err +} + +// DeleteLabel delete one label of repository by id +func (c *Client) DeleteLabel(owner, repo string, id int64) (*Response, error) { + if err := escapeValidatePathSegments(&owner, &repo); err != nil { + return nil, err + } + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/labels/%d", owner, repo, id), nil, nil) +} diff --git a/vendor/code.gitea.io/sdk/gitea/repo_migrate.go b/vendor/code.gitea.io/sdk/gitea/repo_migrate.go index 2de2153605f..73a04bc8f52 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_migrate.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_migrate.go @@ -55,15 +55,15 @@ type MigrateRepoOption struct { func (opt *MigrateRepoOption) Validate(c *Client) error { // check user options if len(opt.CloneAddr) == 0 { - return fmt.Errorf("CloneAddr required") + return fmt.Errorf("clone addr required") } if len(opt.RepoName) == 0 { - return fmt.Errorf("RepoName required") + return fmt.Errorf("repo name required") } else if len(opt.RepoName) > 100 { - return fmt.Errorf("RepoName to long") + return fmt.Errorf("repo name too long") } if len(opt.Description) > 2048 { - return fmt.Errorf("Description to long") + return fmt.Errorf("description too long") } switch opt.Service { case GitServiceGithub: diff --git a/vendor/code.gitea.io/sdk/gitea/repo_mirror.go b/vendor/code.gitea.io/sdk/gitea/repo_mirror.go index df320940a96..2ee806f1038 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_mirror.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_mirror.go @@ -43,3 +43,34 @@ func (c *Client) PushMirrors(user, repo string, opt CreatePushMirrorOption) (*Pu resp, err := c.getParsedResponse("POST", fmt.Sprintf("/repos/%s/%s/push_mirrors", user, repo), jsonHeader, bytes.NewReader(body), &pm) return pm, resp, err } + +// ListPushMirrors gets all push mirrors of a repository +func (c *Client) ListPushMirrors(user, repo string, opt ListOptions) ([]*PushMirrorResponse, *Response, error) { + if err := escapeValidatePathSegments(&user, &repo); err != nil { + return nil, nil, err + } + opt.setDefaults() + pms := make([]*PushMirrorResponse, 0, opt.PageSize) + resp, err := c.getParsedResponse("GET", + fmt.Sprintf("/repos/%s/%s/push_mirrors?%s", user, repo, opt.getURLQuery().Encode()), + nil, nil, &pms) + return pms, resp, err +} + +// GetPushMirrorByRemoteName get a push mirror of the repository by remote name +func (c *Client) GetPushMirrorByRemoteName(user, repo, remoteName string) (*PushMirrorResponse, *Response, error) { + if err := escapeValidatePathSegments(&user, &repo, &remoteName); err != nil { + return nil, nil, err + } + pm := new(PushMirrorResponse) + resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/push_mirrors/%s", user, repo, remoteName), nil, nil, &pm) + return pm, resp, err +} + +// DeletePushMirror deletes a push mirror from a repository by remote name +func (c *Client) DeletePushMirror(user, repo, remoteName string) (*Response, error) { + if err := escapeValidatePathSegments(&user, &repo, &remoteName); err != nil { + return nil, err + } + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/push_mirrors/%s", user, repo, remoteName), nil, nil) +} diff --git a/vendor/code.gitea.io/sdk/gitea/repo_stars.go b/vendor/code.gitea.io/sdk/gitea/repo_stars.go index 01243c2505d..45488eb675e 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_stars.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_stars.go @@ -47,7 +47,7 @@ func (c *Client) IsRepoStarring(user, repo string) (bool, *Response, error) { if err := escapeValidatePathSegments(&user, &repo); err != nil { return false, nil, err } - _, resp, err := c.getResponse("GET", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) + resp, err := c.doRequestWithStatusHandle("GET", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) if resp != nil { switch resp.StatusCode { case http.StatusNotFound: @@ -66,7 +66,7 @@ func (c *Client) StarRepo(user, repo string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) + resp, err := c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) if resp != nil { switch resp.StatusCode { case http.StatusNoContent: @@ -83,7 +83,7 @@ func (c *Client) UnStarRepo(user, repo string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) + resp, err := c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/starred/%s/%s", user, repo), jsonHeader, nil) if resp != nil { switch resp.StatusCode { case http.StatusNoContent: diff --git a/vendor/code.gitea.io/sdk/gitea/repo_tag.go b/vendor/code.gitea.io/sdk/gitea/repo_tag.go index 7317d3f3931..c0dcfe81b2f 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_tag.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_tag.go @@ -123,8 +123,7 @@ func (c *Client) DeleteTag(user, repo, tag string) (*Response, error) { if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/tags/%s", user, repo, tag), nil, nil) - return resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/repo_tag_protection.go b/vendor/code.gitea.io/sdk/gitea/repo_tag_protection.go index 02cd372b8e9..ec433ae9210 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_tag_protection.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_tag_protection.go @@ -120,6 +120,5 @@ func (c *Client) DeleteTagProtection(owner, repo string, id int64) (*Response, e return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/tag_protections/%d", owner, repo, id), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/tag_protections/%d", owner, repo, id), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/repo_team.go b/vendor/code.gitea.io/sdk/gitea/repo_team.go index b983d8748a7..36e0863f53a 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_team.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_team.go @@ -30,8 +30,7 @@ func (c *Client) AddRepoTeam(user, repo, team string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo, &team); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/teams/%s", user, repo, team), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/repos/%s/%s/teams/%s", user, repo, team), nil, nil) } // RemoveRepoTeam delete a team from a repository @@ -42,8 +41,7 @@ func (c *Client) RemoveRepoTeam(user, repo, team string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo, &team); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/teams/%s", user, repo, team), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/teams/%s", user, repo, team), nil, nil) } // CheckRepoTeam check if team is assigned to repo by name and return it. diff --git a/vendor/code.gitea.io/sdk/gitea/repo_topics.go b/vendor/code.gitea.io/sdk/gitea/repo_topics.go index 92f2228cd93..9a105f2b338 100644 --- a/vendor/code.gitea.io/sdk/gitea/repo_topics.go +++ b/vendor/code.gitea.io/sdk/gitea/repo_topics.go @@ -45,8 +45,7 @@ func (c *Client) SetRepoTopics(user, repo string, list []string) (*Response, err if err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/topics", user, repo), jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/repos/%s/%s/topics", user, repo), jsonHeader, bytes.NewReader(body)) } // AddRepoTopic adds a topic to a repo's topics list @@ -54,8 +53,7 @@ func (c *Client) AddRepoTopic(user, repo, topic string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo, &topic); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/repos/%s/%s/topics/%s", user, repo, topic), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/repos/%s/%s/topics/%s", user, repo, topic), nil, nil) } // DeleteRepoTopic deletes a topic from repo's topics list @@ -63,6 +61,5 @@ func (c *Client) DeleteRepoTopic(user, repo, topic string) (*Response, error) { if err := escapeValidatePathSegments(&user, &repo, &topic); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/topics/%s", user, repo, topic), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/repos/%s/%s/topics/%s", user, repo, topic), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/secret.go b/vendor/code.gitea.io/sdk/gitea/secret.go index d67713d8d72..ea11ed06e80 100644 --- a/vendor/code.gitea.io/sdk/gitea/secret.go +++ b/vendor/code.gitea.io/sdk/gitea/secret.go @@ -11,6 +11,8 @@ type Secret struct { Name string `json:"name"` // the secret's data Data string `json:"data"` + // the secret's description + Description string `json:"description"` // Date and Time of secret creation Created time.Time `json:"created_at"` } diff --git a/vendor/code.gitea.io/sdk/gitea/user_app.go b/vendor/code.gitea.io/sdk/gitea/user_app.go index 92a3a2601aa..bd5b1f888b0 100644 --- a/vendor/code.gitea.io/sdk/gitea/user_app.go +++ b/vendor/code.gitea.io/sdk/gitea/user_app.go @@ -11,6 +11,7 @@ import ( "fmt" "net/url" "reflect" + "time" ) // AccessTokenScope represents the scope for an access token. @@ -71,6 +72,8 @@ type AccessToken struct { Token string `json:"sha1"` TokenLastEight string `json:"token_last_eight"` Scopes []AccessTokenScope `json:"scopes"` + Created time.Time `json:"created_at,omitempty"` + Updated time.Time `json:"last_used_at,omitempty"` } // ListAccessTokensOptions options for listing a users's access tokens @@ -138,6 +141,5 @@ func (c *Client) DeleteAccessToken(value interface{}) (*Response, error) { return nil, fmt.Errorf("only string and int64 supported") } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/users/%s/tokens/%s", url.PathEscape(username), url.PathEscape(token)), jsonHeader, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/users/%s/tokens/%s", url.PathEscape(username), url.PathEscape(token)), jsonHeader, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/user_email.go b/vendor/code.gitea.io/sdk/gitea/user_email.go index 4962b082b40..4c24a4246f3 100644 --- a/vendor/code.gitea.io/sdk/gitea/user_email.go +++ b/vendor/code.gitea.io/sdk/gitea/user_email.go @@ -59,6 +59,5 @@ func (c *Client) DeleteEmail(opt DeleteEmailOption) (*Response, error) { if err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", "/user/emails", jsonHeader, bytes.NewReader(body)) - return resp, err + return c.doRequestWithStatusHandle("DELETE", "/user/emails", jsonHeader, bytes.NewReader(body)) } diff --git a/vendor/code.gitea.io/sdk/gitea/user_follow.go b/vendor/code.gitea.io/sdk/gitea/user_follow.go index 7bd340ca266..40072aa9a45 100644 --- a/vendor/code.gitea.io/sdk/gitea/user_follow.go +++ b/vendor/code.gitea.io/sdk/gitea/user_follow.go @@ -60,7 +60,7 @@ func (c *Client) IsFollowing(target string) (bool, *Response) { // ToDo return err return false, nil } - _, resp, err := c.getResponse("GET", fmt.Sprintf("/user/following/%s", target), nil, nil) + resp, err := c.doRequestWithStatusHandle("GET", fmt.Sprintf("/user/following/%s", target), nil, nil) return err == nil, resp } @@ -70,7 +70,7 @@ func (c *Client) IsUserFollowing(user, target string) (bool, *Response) { // ToDo return err return false, nil } - _, resp, err := c.getResponse("GET", fmt.Sprintf("/users/%s/following/%s", user, target), nil, nil) + resp, err := c.doRequestWithStatusHandle("GET", fmt.Sprintf("/users/%s/following/%s", user, target), nil, nil) return err == nil, resp } @@ -79,7 +79,7 @@ func (c *Client) Follow(target string) (*Response, error) { if err := escapeValidatePathSegments(&target); err != nil { return nil, err } - _, resp, err := c.getResponse("PUT", fmt.Sprintf("/user/following/%s", target), nil, nil) + resp, err := c.doRequestWithStatusHandle("PUT", fmt.Sprintf("/user/following/%s", target), nil, nil) return resp, err } @@ -88,6 +88,6 @@ func (c *Client) Unfollow(target string) (*Response, error) { if err := escapeValidatePathSegments(&target); err != nil { return nil, err } - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/following/%s", target), nil, nil) + resp, err := c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/following/%s", target), nil, nil) return resp, err } diff --git a/vendor/code.gitea.io/sdk/gitea/user_gpgkey.go b/vendor/code.gitea.io/sdk/gitea/user_gpgkey.go index 6c1b9d10f34..15c2794a687 100644 --- a/vendor/code.gitea.io/sdk/gitea/user_gpgkey.go +++ b/vendor/code.gitea.io/sdk/gitea/user_gpgkey.go @@ -84,6 +84,5 @@ func (c *Client) CreateGPGKey(opt CreateGPGKeyOption) (*GPGKey, *Response, error // DeleteGPGKey delete GPG key with key id func (c *Client) DeleteGPGKey(keyID int64) (*Response, error) { - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/gpg_keys/%d", keyID), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/gpg_keys/%d", keyID), nil, nil) } diff --git a/vendor/code.gitea.io/sdk/gitea/user_key.go b/vendor/code.gitea.io/sdk/gitea/user_key.go index 02795baefc6..d01627626bd 100644 --- a/vendor/code.gitea.io/sdk/gitea/user_key.go +++ b/vendor/code.gitea.io/sdk/gitea/user_key.go @@ -19,6 +19,7 @@ type PublicKey struct { Title string `json:"title,omitempty"` Fingerprint string `json:"fingerprint,omitempty"` Created time.Time `json:"created_at,omitempty"` + Updated time.Time `json:"last_used_at,omitempty"` Owner *User `json:"user,omitempty"` ReadOnly bool `json:"read_only,omitempty"` KeyType string `json:"key_type,omitempty"` @@ -78,6 +79,5 @@ func (c *Client) CreatePublicKey(opt CreateKeyOption) (*PublicKey, *Response, er // DeletePublicKey delete public key with key id func (c *Client) DeletePublicKey(keyID int64) (*Response, error) { - _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/user/keys/%d", keyID), nil, nil) - return resp, err + return c.doRequestWithStatusHandle("DELETE", fmt.Sprintf("/user/keys/%d", keyID), nil, nil) } diff --git a/vendor/modules.txt b/vendor/modules.txt index 7ba10662e05..48c14c4a6c1 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -41,8 +41,8 @@ cloud.google.com/go/kms/internal cloud.google.com/go/longrunning cloud.google.com/go/longrunning/autogen cloud.google.com/go/longrunning/autogen/longrunningpb -# code.gitea.io/sdk/gitea v0.21.0 -## explicit; go 1.23 +# code.gitea.io/sdk/gitea v0.22.1 +## explicit; go 1.23.0 code.gitea.io/sdk/gitea # contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d ## explicit; go 1.13 @@ -53,8 +53,8 @@ contrib.go.opencensus.io/exporter/prometheus # fortio.org/safecast v1.0.0 ## explicit; go 1.20 fortio.org/safecast -# github.com/42wim/httpsig v1.2.2 -## explicit; go 1.18 +# github.com/42wim/httpsig v1.2.3 +## explicit; go 1.23.0 github.com/42wim/httpsig # github.com/Azure/azure-sdk-for-go v68.0.0+incompatible ## explicit