Skip to content

Commit fada696

Browse files
lafrikstechknowlogick
authored andcommitted
Fix new release creation API to allow empty target (#5870)
* Fix new release creation API to allow empty target * Add more test cases * Update swagger
1 parent 8b5f6ce commit fada696

File tree

11 files changed

+168
-348
lines changed

11 files changed

+168
-348
lines changed

Gopkg.lock

Lines changed: 2 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

integrations/api_releases_test.go

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,16 @@ import (
1616
"github.com/stretchr/testify/assert"
1717
)
1818

19-
func TestAPICreateRelease(t *testing.T) {
20-
prepareTestEnv(t)
21-
22-
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
23-
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
24-
session := loginUser(t, owner.LowerName)
25-
token := getTokenForLoggedInUser(t, session)
26-
gitRepo, err := git.OpenRepository(repo.RepoPath())
27-
assert.NoError(t, err)
28-
29-
err = gitRepo.CreateTag("v0.0.1", "master")
30-
assert.NoError(t, err)
31-
32-
commitID, err := gitRepo.GetTagCommitID("v0.0.1")
33-
assert.NoError(t, err)
34-
19+
func createNewReleaseUsingAPI(t *testing.T, session *TestSession, token string, owner *models.User, repo *models.Repository, name, target, title, desc string) *api.Release {
3520
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases?token=%s",
3621
owner.Name, repo.Name, token)
3722
req := NewRequestWithJSON(t, "POST", urlStr, &api.CreateReleaseOption{
38-
TagName: "v0.0.1",
39-
Title: "v0.0.1",
40-
Note: "test",
23+
TagName: name,
24+
Title: title,
25+
Note: desc,
4126
IsDraft: false,
4227
IsPrerelease: false,
43-
Target: commitID,
28+
Target: target,
4429
})
4530
resp := session.MakeRequest(t, req, http.StatusCreated)
4631

@@ -53,10 +38,32 @@ func TestAPICreateRelease(t *testing.T) {
5338
Note: newRelease.Note,
5439
})
5540

56-
urlStr = fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d?token=%s",
41+
return &newRelease
42+
}
43+
44+
func TestAPICreateAndUpdateRelease(t *testing.T) {
45+
prepareTestEnv(t)
46+
47+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
48+
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
49+
session := loginUser(t, owner.LowerName)
50+
token := getTokenForLoggedInUser(t, session)
51+
52+
gitRepo, err := git.OpenRepository(repo.RepoPath())
53+
assert.NoError(t, err)
54+
55+
err = gitRepo.CreateTag("v0.0.1", "master")
56+
assert.NoError(t, err)
57+
58+
target, err := gitRepo.GetTagCommitID("v0.0.1")
59+
assert.NoError(t, err)
60+
61+
newRelease := createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", target, "v0.0.1", "test")
62+
63+
urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/releases/%d?token=%s",
5764
owner.Name, repo.Name, newRelease.ID, token)
58-
req = NewRequest(t, "GET", urlStr)
59-
resp = session.MakeRequest(t, req, http.StatusOK)
65+
req := NewRequest(t, "GET", urlStr)
66+
resp := session.MakeRequest(t, req, http.StatusOK)
6067

6168
var release api.Release
6269
DecodeJSON(t, resp, &release)
@@ -83,3 +90,31 @@ func TestAPICreateRelease(t *testing.T) {
8390
Note: newRelease.Note,
8491
})
8592
}
93+
94+
func TestAPICreateReleaseToDefaultBranch(t *testing.T) {
95+
prepareTestEnv(t)
96+
97+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
98+
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
99+
session := loginUser(t, owner.LowerName)
100+
token := getTokenForLoggedInUser(t, session)
101+
102+
createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", "", "v0.0.1", "test")
103+
}
104+
105+
func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) {
106+
prepareTestEnv(t)
107+
108+
repo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
109+
owner := models.AssertExistsAndLoadBean(t, &models.User{ID: repo.OwnerID}).(*models.User)
110+
session := loginUser(t, owner.LowerName)
111+
token := getTokenForLoggedInUser(t, session)
112+
113+
gitRepo, err := git.OpenRepository(repo.RepoPath())
114+
assert.NoError(t, err)
115+
116+
err = gitRepo.CreateTag("v0.0.1", "master")
117+
assert.NoError(t, err)
118+
119+
createNewReleaseUsingAPI(t, session, token, owner, repo, "v0.0.1", "", "v0.0.1", "test")
120+
}

routers/api/v1/repo/release.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) {
152152
ctx.ServerError("GetRelease", err)
153153
return
154154
}
155+
// If target is not provided use default branch
156+
if len(form.Target) == 0 {
157+
form.Target = ctx.Repo.Repository.DefaultBranch
158+
}
155159
rel = &models.Release{
156160
RepoID: ctx.Repo.Repository.ID,
157161
PublisherID: ctx.User.ID,

templates/swagger/v1_json.tmpl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7570,6 +7570,13 @@
75707570
"description": "PayloadCommit represents a commit",
75717571
"type": "object",
75727572
"properties": {
7573+
"added": {
7574+
"type": "array",
7575+
"items": {
7576+
"type": "string"
7577+
},
7578+
"x-go-name": "Added"
7579+
},
75737580
"author": {
75747581
"$ref": "#/definitions/PayloadUser"
75757582
},
@@ -7585,6 +7592,20 @@
75857592
"type": "string",
75867593
"x-go-name": "Message"
75877594
},
7595+
"modified": {
7596+
"type": "array",
7597+
"items": {
7598+
"type": "string"
7599+
},
7600+
"x-go-name": "Modified"
7601+
},
7602+
"removed": {
7603+
"type": "array",
7604+
"items": {
7605+
"type": "string"
7606+
},
7607+
"x-go-name": "Removed"
7608+
},
75887609
"timestamp": {
75897610
"type": "string",
75907611
"format": "date-time",

vendor/code.gitea.io/sdk/gitea/gitea.go

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/hook.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/release.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/repo_commit.go

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/code.gitea.io/sdk/gitea/repo_tag.go

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)