Skip to content

Commit 6a0dcf4

Browse files
Normalize forge statuses (#121)
* Normalize forge statuses * Address review feedback on status normalization * test: add bitbucket issue and access level cases
1 parent 227db19 commit 6a0dcf4

27 files changed

Lines changed: 442 additions & 127 deletions

bitbucket/helpers_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package bitbucket
22

33
import "testing"
44

5-
func assertEqual(t *testing.T, field, want, got string) {
5+
func assertEqual[T ~string](t *testing.T, field, want string, got T) {
66
t.Helper()
7-
if want != got {
7+
if want != string(got) {
88
t.Errorf("%s: want %q, got %q", field, want, got)
99
}
1010
}

bitbucket/issues.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,7 @@ func convertBitbucketIssue(bb bbIssue) forge.Issue {
107107
HTMLURL: bb.Links.HTML.Href,
108108
}
109109

110-
// Normalize Bitbucket states to open/closed
111-
switch bb.State {
112-
case "new", stateOpen:
113-
result.State = stateOpen
114-
default:
115-
result.State = stateClosed
116-
}
110+
result.State = forge.NormalizeIssueState(bb.State)
117111

118112
if bb.Reporter != nil {
119113
result.Author = forge.User{

bitbucket/prs.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,9 @@ func convertBitbucketPR(bb bbPullRequest) forge.PullRequest {
123123
}
124124
}
125125

126-
switch bb.State {
127-
case "OPEN":
128-
result.State = "open"
129-
case "MERGED":
130-
result.State = "merged"
126+
result.State = forge.NormalizePRStatus(bb.State)
127+
if result.State == forge.PRStatusMerged {
131128
result.Merged = true
132-
default:
133-
result.State = "closed"
134129
}
135130

136131
if bb.Author != nil {

gitea/ci.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func convertGiteaWorkflowRun(r *gitea.ActionWorkflowRun) forge.CIRun {
2323
result := forge.CIRun{
2424
ID: r.ID,
2525
Title: r.DisplayTitle,
26-
Status: r.Status,
26+
Status: forge.NormalizeCIStatus(r.Status),
2727
Branch: r.HeadBranch,
2828
SHA: r.HeadSha,
2929
Event: r.Event,
@@ -32,7 +32,7 @@ func convertGiteaWorkflowRun(r *gitea.ActionWorkflowRun) forge.CIRun {
3232
}
3333

3434
if r.Conclusion != "" {
35-
result.Conclusion = r.Conclusion
35+
result.Conclusion = forge.NormalizeCIConclusion(r.Conclusion)
3636
}
3737

3838
if r.Actor != nil {
@@ -54,8 +54,8 @@ func convertGiteaWorkflowJob(j *gitea.ActionWorkflowJob) forge.CIJob {
5454
job := forge.CIJob{
5555
ID: j.ID,
5656
Name: j.Name,
57-
Status: j.Status,
58-
Conclusion: j.Conclusion,
57+
Status: forge.NormalizeCIStatus(j.Status),
58+
Conclusion: forge.NormalizeCIConclusion(j.Conclusion),
5959
HTMLURL: j.HTMLURL,
6060
}
6161
if !j.StartedAt.IsZero() {

gitea/collaborators.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (s *giteaCollaboratorService) List(ctx context.Context, owner, repo string,
4141
}
4242
all = append(all, forge.Collaborator{
4343
Login: u.UserName,
44-
Permission: perm,
44+
Permission: forge.NormalizeAccessLevel(perm),
4545
})
4646
}
4747
if lastPage(resp, len(users), perPage) || (opts.Limit > 0 && len(all) >= opts.Limit) {
@@ -78,7 +78,7 @@ func (s *giteaCollaboratorService) getPermission(owner, repo, username string) (
7878
func (s *giteaCollaboratorService) Add(ctx context.Context, owner, repo, username string, opts forge.AddCollaboratorOpts) error {
7979
var perm *gitea.AccessMode
8080
if opts.Permission != "" {
81-
mode := gitea.AccessMode(opts.Permission)
81+
mode := gitea.AccessMode(giteaPermission(opts.Permission))
8282
perm = &mode
8383
}
8484

@@ -94,6 +94,19 @@ func (s *giteaCollaboratorService) Add(ctx context.Context, owner, repo, usernam
9494
return nil
9595
}
9696

97+
func giteaPermission(permission forge.AccessLevel) string {
98+
switch forge.NormalizeAccessLevel(string(permission)) {
99+
case forge.AccessLevelRead:
100+
return "read"
101+
case forge.AccessLevelWrite:
102+
return "write"
103+
case forge.AccessLevelAdmin:
104+
return "admin"
105+
default:
106+
return string(permission)
107+
}
108+
}
109+
97110
func (s *giteaCollaboratorService) Remove(ctx context.Context, owner, repo, username string) error {
98111
resp, err := s.client.DeleteCollaborator(owner, repo, username)
99112
if err != nil {

gitea/commit_statuses.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (s *giteaCommitStatusService) List(ctx context.Context, owner, repo, sha st
5757
}
5858
for _, st := range statuses {
5959
cs := forge.CommitStatus{
60-
State: string(st.State),
60+
State: forge.NormalizeCommitStatusState(string(st.State)),
6161
Context: st.Context,
6262
Description: st.Description,
6363
TargetURL: st.TargetURL,
@@ -78,7 +78,7 @@ func (s *giteaCommitStatusService) List(ctx context.Context, owner, repo, sha st
7878

7979
func (s *giteaCommitStatusService) Set(ctx context.Context, owner, repo, sha string, opts forge.SetCommitStatusOpts) (*forge.CommitStatus, error) {
8080
result, resp, err := s.client.CreateStatus(owner, repo, sha, gitea.CreateStatusOption{
81-
State: gitea.StatusState(opts.State),
81+
State: gitea.StatusState(string(opts.State)),
8282
TargetURL: opts.TargetURL,
8383
Description: opts.Description,
8484
Context: opts.Context,
@@ -91,7 +91,7 @@ func (s *giteaCommitStatusService) Set(ctx context.Context, owner, repo, sha str
9191
}
9292

9393
cs := &forge.CommitStatus{
94-
State: string(result.State),
94+
State: forge.NormalizeCommitStatusState(string(result.State)),
9595
Context: result.Context,
9696
Description: result.Description,
9797
TargetURL: result.TargetURL,

gitea/helpers_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package gitea
22

33
import "testing"
44

5-
func assertEqual(t *testing.T, field, want, got string) {
5+
func assertEqual[T ~string](t *testing.T, field, want string, got T) {
66
t.Helper()
7-
if want != got {
7+
if want != string(got) {
88
t.Errorf("%s: want %q, got %q", field, want, got)
99
}
1010
}

gitea/issues.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,7 @@ func convertGiteaIssue(i *gitea.Issue) forge.Issue {
2626
HTMLURL: i.HTMLURL,
2727
}
2828

29-
switch i.State {
30-
case gitea.StateOpen:
31-
result.State = stateOpen
32-
case gitea.StateClosed:
33-
result.State = stateClosed
34-
default:
35-
result.State = string(i.State)
36-
}
29+
result.State = forge.NormalizeIssueState(string(i.State))
3730

3831
if i.Poster != nil {
3932
result.Author = forge.User{

gitea/prs.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ func convertGiteaPR(pr *gitea.PullRequest) forge.PullRequest {
4141

4242
switch {
4343
case pr.HasMerged:
44-
result.State = "merged"
44+
result.State = forge.PRStatusMerged
4545
case pr.State == gitea.StateClosed:
46-
result.State = stateClosed
46+
result.State = forge.PRStatusClosed
4747
default:
48-
result.State = stateOpen
48+
result.State = forge.PRStatusOpen
4949
}
5050

5151
var baseRepoID int64

github/ci.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ func convertGitHubWorkflowRun(r *github.WorkflowRun) forge.CIRun {
2323
result := forge.CIRun{
2424
ID: r.GetID(),
2525
Title: r.GetName(),
26-
Status: r.GetStatus(),
26+
Status: forge.NormalizeCIStatus(r.GetStatus()),
2727
Branch: r.GetHeadBranch(),
2828
SHA: r.GetHeadSHA(),
2929
Event: r.GetEvent(),
3030
HTMLURL: r.GetHTMLURL(),
3131
}
3232

3333
if c := r.GetConclusion(); c != "" {
34-
result.Conclusion = c
34+
result.Conclusion = forge.NormalizeCIConclusion(c)
3535
}
3636

3737
if a := r.GetActor(); a != nil {
@@ -124,8 +124,8 @@ func (s *gitHubCIService) GetRun(ctx context.Context, owner, repo string, runID
124124
job := forge.CIJob{
125125
ID: j.GetID(),
126126
Name: j.GetName(),
127-
Status: j.GetStatus(),
128-
Conclusion: j.GetConclusion(),
127+
Status: forge.NormalizeCIStatus(j.GetStatus()),
128+
Conclusion: forge.NormalizeCIConclusion(j.GetConclusion()),
129129
HTMLURL: j.GetHTMLURL(),
130130
}
131131
if t := j.GetStartedAt(); !t.IsZero() {

0 commit comments

Comments
 (0)