diff --git a/gitea/release.go b/gitea/release.go index d8d28c5..502e5da 100644 --- a/gitea/release.go +++ b/gitea/release.go @@ -124,7 +124,7 @@ func (c *Client) EditRelease(user, repo string, id int64, form EditReleaseOption return r, resp, err } -// DeleteRelease delete a release from a repository +// DeleteRelease delete a release from a repository, keeping its tag func (c *Client) DeleteRelease(user, repo string, id int64) (*Response, error) { _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), @@ -132,6 +132,17 @@ func (c *Client) DeleteRelease(user, repo string, id int64) (*Response, error) { return resp, err } +// DeleteReleaseTag deletes a tag from a repository, if no release refers to it. +func (c *Client) DeleteReleaseTag(user, repo string, tag string) (*Response, error) { + if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { + return nil, err + } + _, resp, err := c.getResponse("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 ) func (c *Client) fallbackGetReleaseByTag(user, repo string, tag string) (*Release, *Response, error) { for i := 1; ; i++ { diff --git a/gitea/release_test.go b/gitea/release_test.go index 844d59b..6dd544c 100644 --- a/gitea/release_test.go +++ b/gitea/release_test.go @@ -74,6 +74,16 @@ func TestRelease(t *testing.T) { assert.NoError(t, err) rl, _, _ = c.ListReleases(repo.Owner.UserName, repo.Name, ListReleasesOptions{}) assert.Len(t, rl, 0) + tags, _, err := c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + assert.NoError(t, err) + assert.Len(t, tags, 1) + + // DeleteReleaseTag + _, err = c.DeleteReleaseTag(repo.Owner.UserName, repo.Name, r.TagName) + assert.NoError(t, err) + tags, _, err = c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + assert.NoError(t, err) + assert.Len(t, tags, 0) // Test Response if try to get not existing release _, resp, err := c.GetRelease(repo.Owner.UserName, repo.Name, 1234) diff --git a/gitea/version.go b/gitea/version.go index b5922ec..c96ef66 100644 --- a/gitea/version.go +++ b/gitea/version.go @@ -41,6 +41,7 @@ var ( version1_11_0, _ = version.NewVersion("1.11.0") version1_12_0, _ = version.NewVersion("1.12.0") version1_13_0, _ = version.NewVersion("1.13.0") + version1_14_0, _ = version.NewVersion("1.14.0") ) // checkServerVersionGreaterThanOrEqual is internally used to speed up things and ignore issues with prerelease