Skip to content

Commit d284b15

Browse files
livelxwagaudreault
andauthored
feat: support gitea PR labels filter in appset PR generator (#21115) (#21148)
Signed-off-by: livelxw <[email protected]> Signed-off-by: Alexandre Gaudreault <[email protected]> Co-authored-by: Alexandre Gaudreault <[email protected]>
1 parent 3d73f37 commit d284b15

File tree

15 files changed

+966
-748
lines changed

15 files changed

+966
-748
lines changed

applicationset/generators/pull_request.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ func (g *PullRequestGenerator) selectServiceProvider(ctx context.Context, genera
157157
if err != nil {
158158
return nil, fmt.Errorf("error fetching Secret token: %w", err)
159159
}
160-
return pullrequest.NewGiteaService(token, providerConfig.API, providerConfig.Owner, providerConfig.Repo, providerConfig.Insecure)
160+
161+
return pullrequest.NewGiteaService(token, providerConfig.API, providerConfig.Owner, providerConfig.Repo, providerConfig.Labels, providerConfig.Insecure)
161162
}
162163
if generatorConfig.BitbucketServer != nil {
163164
providerConfig := generatorConfig.BitbucketServer

applicationset/services/pull_request/gitea.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ type GiteaService struct {
1414
client *gitea.Client
1515
owner string
1616
repo string
17+
labels []string
1718
}
1819

1920
var _ PullRequestService = (*GiteaService)(nil)
2021

21-
func NewGiteaService(token, url, owner, repo string, insecure bool) (PullRequestService, error) {
22+
func NewGiteaService(token, url, owner, repo string, labels []string, insecure bool) (PullRequestService, error) {
2223
if token == "" {
2324
token = os.Getenv("GITEA_TOKEN")
2425
}
@@ -42,6 +43,7 @@ func NewGiteaService(token, url, owner, repo string, insecure bool) (PullRequest
4243
client: client,
4344
owner: owner,
4445
repo: repo,
46+
labels: labels,
4547
}, nil
4648
}
4749

@@ -56,6 +58,9 @@ func (g *GiteaService) List(ctx context.Context) ([]*PullRequest, error) {
5658
}
5759
list := []*PullRequest{}
5860
for _, pr := range prs {
61+
if !giteaContainLabels(g.labels, pr.Labels) {
62+
continue
63+
}
5964
list = append(list, &PullRequest{
6065
Number: int(pr.Index),
6166
Title: pr.Title,
@@ -69,6 +74,21 @@ func (g *GiteaService) List(ctx context.Context) ([]*PullRequest, error) {
6974
return list, nil
7075
}
7176

77+
// containLabels returns true if gotLabels contains expectedLabels
78+
func giteaContainLabels(expectedLabels []string, gotLabels []*gitea.Label) bool {
79+
gotLabelNamesMap := make(map[string]bool)
80+
for i := 0; i < len(gotLabels); i++ {
81+
gotLabelNamesMap[gotLabels[i].Name] = true
82+
}
83+
for _, expected := range expectedLabels {
84+
v, ok := gotLabelNamesMap[expected]
85+
if !v || !ok {
86+
return false
87+
}
88+
}
89+
return true
90+
}
91+
7292
// Get the Gitea pull request label names.
7393
func getGiteaPRLabelNames(giteaLabels []*gitea.Label) []string {
7494
var labelNames []string

applicationset/services/pull_request/gitea_test.go

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) {
5252
},
5353
"title": "add an empty file",
5454
"body": "",
55-
"labels": [],
55+
"labels": [{"id": 1, "name": "label1", "color": "00aabb", "description": "foo", "url": ""}],
5656
"milestone": null,
5757
"assignee": null,
5858
"assignees": null,
@@ -246,11 +246,59 @@ func giteaMockHandler(t *testing.T) func(http.ResponseWriter, *http.Request) {
246246
}
247247
}
248248

249+
func TestGiteaContainLabels(t *testing.T) {
250+
cases := []struct {
251+
Name string
252+
Labels []string
253+
PullLabels []*gitea.Label
254+
Expect bool
255+
}{
256+
{
257+
Name: "Match labels",
258+
Labels: []string{"label1", "label2"},
259+
PullLabels: []*gitea.Label{
260+
{Name: "label1"},
261+
{Name: "label2"},
262+
{Name: "label3"},
263+
},
264+
Expect: true,
265+
},
266+
{
267+
Name: "Not match labels",
268+
Labels: []string{"label1", "label4"},
269+
PullLabels: []*gitea.Label{
270+
{Name: "label1"},
271+
{Name: "label2"},
272+
{Name: "label3"},
273+
},
274+
Expect: false,
275+
},
276+
{
277+
Name: "No specify",
278+
Labels: []string{},
279+
PullLabels: []*gitea.Label{
280+
{Name: "label1"},
281+
{Name: "label2"},
282+
{Name: "label3"},
283+
},
284+
Expect: true,
285+
},
286+
}
287+
288+
for _, c := range cases {
289+
t.Run(c.Name, func(t *testing.T) {
290+
if got := giteaContainLabels(c.Labels, c.PullLabels); got != c.Expect {
291+
t.Errorf("expect: %v, got: %v", c.Expect, got)
292+
}
293+
})
294+
}
295+
}
296+
249297
func TestGiteaList(t *testing.T) {
250298
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
251299
giteaMockHandler(t)(w, r)
252300
}))
253-
host, err := NewGiteaService("", ts.URL, "test-argocd", "pr-test", false)
301+
host, err := NewGiteaService("", ts.URL, "test-argocd", "pr-test", []string{"label1"}, false)
254302
require.NoError(t, err)
255303
prs, err := host.List(t.Context())
256304
require.NoError(t, err)

assets/swagger.json

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

manifests/core-install-with-hydrator.yaml

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

manifests/core-install.yaml

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

manifests/crds/applicationset-crd.yaml

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

manifests/ha/install-with-hydrator.yaml

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

manifests/ha/install.yaml

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

manifests/install-with-hydrator.yaml

Lines changed: 12 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)