From 4dd864c7b6f23e1da3883e5c438b561bd6f2b6c46eab66a37c00b1fbac4e83fc Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Thu, 20 Feb 2025 12:20:14 +0100 Subject: [PATCH] move maintainership to common/ --- bots-common/associated_pr_scanner_test.go | 28 ++++++++++--------- bots-common/conststring_test.go | 2 +- bots-common/log_test.go | 6 ++-- .../maintainership.go | 7 ++--- .../maintainership_test.go | 10 +++---- bots-common/request_push.go | 2 +- bots-common/request_push_test.go | 10 ++++--- bots-common/request_repo.go | 2 +- bots-common/request_repo_test.go | 10 ++++--- workflow-pr/pr.go | 4 +-- workflow-pr/pr_processor_opened.go | 2 +- workflow-pr/pr_processor_reviewed.go | 2 +- workflow-pr/pr_test.go | 7 ++--- 13 files changed, 49 insertions(+), 43 deletions(-) rename {workflow-pr => bots-common}/maintainership.go (91%) rename {workflow-pr => bots-common}/maintainership_test.go (94%) diff --git a/bots-common/associated_pr_scanner_test.go b/bots-common/associated_pr_scanner_test.go index 4b56871..3c7a5ad 100644 --- a/bots-common/associated_pr_scanner_test.go +++ b/bots-common/associated_pr_scanner_test.go @@ -1,10 +1,12 @@ -package common +package common_test import ( "bufio" "slices" "strings" "testing" + + "src.opensuse.org/autogits/common" ) func newStringScanner(s string) *bufio.Scanner { @@ -15,25 +17,25 @@ func TestAssociatedPRScanner(t *testing.T) { testTable := []struct { name string input string - prs []BasicPR + prs []common.BasicPR desc string }{ { "No PRs", "", - []BasicPR{}, + []common.BasicPR{}, "", }, { "Single PRs", "Some header of the issue\n\nFollowed by some description\n\nPR: test/foo#4\n", - []BasicPR{{Org: "test", Repo: "foo", Num: 4}}, + []common.BasicPR{{Org: "test", Repo: "foo", Num: 4}}, "Some header of the issue\n\nFollowed by some description", }, { "Multiple PRs", "Some header of the issue\n\nFollowed by some description\nPR: test/foo#4\n\nPR: test/goo#5\n", - []BasicPR{ + []common.BasicPR{ {Org: "test", Repo: "foo", Num: 4}, {Org: "test", Repo: "goo", Num: 5}, }, @@ -42,7 +44,7 @@ func TestAssociatedPRScanner(t *testing.T) { { "Multiple PRs with whitespace", "Some header of the issue\n\n\tPR: test/goo#5\n\n Followed by some description\n \t PR: test/foo#4\n", - []BasicPR{ + []common.BasicPR{ {Org: "test", Repo: "foo", Num: 4}, {Org: "test", Repo: "goo", Num: 5}, }, @@ -53,7 +55,7 @@ func TestAssociatedPRScanner(t *testing.T) { "Some header of the issue\n\n\n\t PR: foobar#5 \n\t PR: rd/goo5 \n\t PR: test/#5 \n" + "\t PR: /goo#5 \n\t PR: test/goo# \n\t PR: test / goo # 10 \n\tPR: test/gool# 10 \n" + "\t PR: test/goo#5 \n\t\n Followed by some description\n\t PR: test/foo#4 \n\t\n\n", - []BasicPR{ + []common.BasicPR{ { Org: "test", Repo: "foo", @@ -73,7 +75,7 @@ func TestAssociatedPRScanner(t *testing.T) { for _, test := range testTable { t.Run(test.name, func(t *testing.T) { - desc, prs := ExtractDescriptionAndPRs(newStringScanner(test.input)) + desc, prs := common.ExtractDescriptionAndPRs(newStringScanner(test.input)) if len(prs) != len(test.prs) { t.Error("Unexpected length:", len(prs), "expected:", len(test.prs)) return @@ -96,13 +98,13 @@ func TestAppendingPRsToDescription(t *testing.T) { testTable := []struct { name string desc string - PRs []BasicPR + PRs []common.BasicPR output string }{ { "Append single PR to end of description", "something", - []BasicPR{ + []common.BasicPR{ {Org: "a", Repo: "b", Num: 100}, }, "something\n\nPR: a/b#100", @@ -110,7 +112,7 @@ func TestAppendingPRsToDescription(t *testing.T) { { "Append multiple PR to end of description", "something", - []BasicPR{ + []common.BasicPR{ {Org: "a1", Repo: "b", Num: 100}, {Org: "a1", Repo: "c", Num: 100}, {Org: "a1", Repo: "c", Num: 101}, @@ -122,7 +124,7 @@ func TestAppendingPRsToDescription(t *testing.T) { { "Append multiple sorted PR to end of description and remove dups", "something", - []BasicPR{ + []common.BasicPR{ {Org: "a1", Repo: "c", Num: 101}, {Org: "a1", Repo: "c", Num: 100}, {Org: "c", Repo: "b", Num: 100}, @@ -137,7 +139,7 @@ func TestAppendingPRsToDescription(t *testing.T) { for _, test := range testTable { t.Run(test.name, func(t *testing.T) { - d := AppendPRsToDescription(test.desc, test.PRs) + d := common.AppendPRsToDescription(test.desc, test.PRs) if d != test.output { t.Error(len(d), "vs", len(test.output)) t.Error("unpected output", d) diff --git a/bots-common/conststring_test.go b/bots-common/conststring_test.go index bf616a5..adab646 100644 --- a/bots-common/conststring_test.go +++ b/bots-common/conststring_test.go @@ -1,4 +1,4 @@ -package common +package common_test /* * This file is part of Autogits. diff --git a/bots-common/log_test.go b/bots-common/log_test.go index f8dc019..26abed0 100644 --- a/bots-common/log_test.go +++ b/bots-common/log_test.go @@ -1,4 +1,4 @@ -package common +package common_test /* * This file is part of Autogits. @@ -22,6 +22,8 @@ import ( "bytes" "regexp" "testing" + + "src.opensuse.org/autogits/common" ) type TestWriter struct { @@ -35,7 +37,7 @@ func TestLogging(t *testing.T) { strWriter = bytes.NewBuffer(make([]byte, 0, 10000)) errWriter = bytes.NewBuffer(make([]byte, 0, 10000)) - stdLogger, errLogger := CreateStdoutLogger(strWriter, errWriter) + stdLogger, errLogger := common.CreateStdoutLogger(strWriter, errWriter) errLogger.Printf("%d\n", 100) stdLogger.Printf("OKA %d Done\n", 77) stdLogger.Println("Another line") diff --git a/workflow-pr/maintainership.go b/bots-common/maintainership.go similarity index 91% rename from workflow-pr/maintainership.go rename to bots-common/maintainership.go index c9775ab..c597d49 100644 --- a/workflow-pr/maintainership.go +++ b/bots-common/maintainership.go @@ -1,10 +1,9 @@ -package main +package common import ( "encoding/json" "slices" - "src.opensuse.org/autogits/common" "src.opensuse.org/autogits/common/gitea-generated/client/repository" "src.opensuse.org/autogits/common/gitea-generated/models" ) @@ -38,7 +37,7 @@ func parseMaintainershipData(data []byte) (*MaintainershipMap, error) { return maintainers, nil } -func FetchProjectMaintainershipData(gitea common.GiteaMaintainershipReader, org, prjGit, branch string) (*MaintainershipMap, error) { +func FetchProjectMaintainershipData(gitea GiteaMaintainershipReader, org, prjGit, branch string) (*MaintainershipMap, error) { data, err := gitea.FetchMaintainershipDirFile(org, prjGit, branch, ProjectFileKey) dir := true if err != nil || data == nil { @@ -143,7 +142,7 @@ func (data *MaintainershipMap) IsApproved(pkg string, reviews []*models.PullRevi } for _, review := range reviews { - if !review.Stale && review.State == common.ReviewStateApproved && slices.Contains(reviewers, review.User.UserName) { + if !review.Stale && review.State == ReviewStateApproved && slices.Contains(reviewers, review.User.UserName) { return true } diff --git a/workflow-pr/maintainership_test.go b/bots-common/maintainership_test.go similarity index 94% rename from workflow-pr/maintainership_test.go rename to bots-common/maintainership_test.go index 5113236..11b9162 100644 --- a/workflow-pr/maintainership_test.go +++ b/bots-common/maintainership_test.go @@ -1,4 +1,4 @@ -package main +package common_test import ( "errors" @@ -122,7 +122,7 @@ func TestMaintainership(t *testing.T) { notFoundError := repository.NewRepoGetRawFileNotFound() for _, test := range packageTests { runTests := func(t *testing.T, mi common.GiteaMaintainershipReader) { - maintainers, err := FetchProjectMaintainershipData(mi, config.Organization, config.GitProjectName, config.Branch) + maintainers, err := common.FetchProjectMaintainershipData(mi, config.Organization, config.GitProjectName, config.Branch) if err != nil && !test.otherError { if test.maintainersFileErr == nil { t.Fatal("Unexpected error recieved", err) @@ -159,7 +159,7 @@ func TestMaintainership(t *testing.T) { // tests with maintainership file mi.EXPECT().FetchMaintainershipFile("foo", common.DefaultGitPrj, "bar"). Return(test.maintainersFile, test.maintainersFileErr) - mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", ProjectFileKey). + mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", common.ProjectFileKey). Return(nil, notFoundError) runTests(t, mi) @@ -173,8 +173,8 @@ func TestMaintainership(t *testing.T) { for filename, data := range test.maintainersDir { mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", filename).Return(data, test.maintainersFileErr).AnyTimes() } - if _, found := test.maintainersDir[ProjectFileKey]; !found { - mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", ProjectFileKey).Return(nil, test.maintainersFileErr).AnyTimes() + if _, found := test.maintainersDir[common.ProjectFileKey]; !found { + mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", common.ProjectFileKey).Return(nil, test.maintainersFileErr).AnyTimes() mi.EXPECT().FetchMaintainershipFile("foo", common.DefaultGitPrj, "bar").Return(nil, test.maintainersFileErr).AnyTimes() } mi.EXPECT().FetchMaintainershipDirFile("foo", common.DefaultGitPrj, "bar", gomock.Any()).Return(nil, notFoundError).AnyTimes() diff --git a/bots-common/request_push.go b/bots-common/request_push.go index 8a80063..7b9fcf4 100644 --- a/bots-common/request_push.go +++ b/bots-common/request_push.go @@ -44,7 +44,7 @@ func (*PushWebhookEvent) GetAction() string { return "push" } -func (h *RequestHandler) parsePushRequest(data io.Reader) (*PushWebhookEvent, error) { +func (h *RequestHandler) ParsePushRequest(data io.Reader) (*PushWebhookEvent, error) { action := new(PushWebhookEvent) err := json.NewDecoder(data).Decode(&action) diff --git a/bots-common/request_push_test.go b/bots-common/request_push_test.go index 3c18299..659052b 100644 --- a/bots-common/request_push_test.go +++ b/bots-common/request_push_test.go @@ -1,4 +1,4 @@ -package common +package common_test /* * This file is part of Autogits. @@ -22,14 +22,16 @@ import ( "os" "strings" "testing" + + "src.opensuse.org/autogits/common" ) func TestPushRequestParsing(t *testing.T) { t.Run("parsing repo creation message", func(t *testing.T) { - var h RequestHandler + var h common.RequestHandler - h.StdLogger, h.ErrLogger = CreateStdoutLogger(os.Stdout, os.Stderr) - json, err := h.parsePushRequest(strings.NewReader(examplePushJSON)) + h.StdLogger, h.ErrLogger = common.CreateStdoutLogger(os.Stdout, os.Stderr) + json, err := h.ParsePushRequest(strings.NewReader(examplePushJSON)) if err != nil { t.Fatalf("failed to parser push request: %v", err) } diff --git a/bots-common/request_repo.go b/bots-common/request_repo.go index f697abc..99aa5d9 100644 --- a/bots-common/request_repo.go +++ b/bots-common/request_repo.go @@ -104,7 +104,7 @@ func (r *RepositoryWebhookEvent) GetAction() string { } // TODO: sanity check values!!!! -func (h *RequestHandler) parseRepositoryRequest(dataReader io.Reader) (data *RepositoryWebhookEvent, err error) { +func (h *RequestHandler) ParseRepositoryRequest(dataReader io.Reader) (data *RepositoryWebhookEvent, err error) { data = new(RepositoryWebhookEvent) if err = json.NewDecoder(dataReader).Decode(&data); err != nil { return nil, err diff --git a/bots-common/request_repo_test.go b/bots-common/request_repo_test.go index 2cf2071..9523bb5 100644 --- a/bots-common/request_repo_test.go +++ b/bots-common/request_repo_test.go @@ -1,4 +1,4 @@ -package common +package common_test /* * This file is part of Autogits. @@ -22,6 +22,8 @@ import ( "os" "strings" "testing" + + "src.opensuse.org/autogits/common" ) type testLogger struct { @@ -35,10 +37,10 @@ func (s *testLogger) WriteString(str2 string) (int, error) { func TestRepositoryRequestParsing(t *testing.T) { t.Run("parsing repo creation message", func(t *testing.T) { - var h RequestHandler + var h common.RequestHandler - h.StdLogger, h.ErrLogger = CreateStdoutLogger(os.Stdout, os.Stdout) - json, err := h.parseRepositoryRequest(strings.NewReader(repoCreateJSON)) + h.StdLogger, h.ErrLogger = common.CreateStdoutLogger(os.Stdout, os.Stdout) + json, err := h.ParseRepositoryRequest(strings.NewReader(repoCreateJSON)) if err != nil { t.Fatalf("Can't parse struct: %s", err) } diff --git a/workflow-pr/pr.go b/workflow-pr/pr.go index 6b48c81..bcb1ffd 100644 --- a/workflow-pr/pr.go +++ b/workflow-pr/pr.go @@ -128,7 +128,7 @@ next_rs: return true } -func (rs *PRSet) AssignReviewers(gitea common.GiteaReviewFetcherAndRequester, maintainers MaintainershipData) error { +func (rs *PRSet) AssignReviewers(gitea common.GiteaReviewFetcherAndRequester, maintainers common.MaintainershipData) error { configReviewers := ParseReviewers(rs.config.Reviewers) for _, pr := range rs.prs { @@ -173,7 +173,7 @@ func (rs *PRSet) AssignReviewers(gitea common.GiteaReviewFetcherAndRequester, ma return nil } -func (rs *PRSet) IsApproved(gitea common.GiteaPRChecker, maintainers MaintainershipData) bool { +func (rs *PRSet) IsApproved(gitea common.GiteaPRChecker, maintainers common.MaintainershipData) bool { configReviewers := ParseReviewers(rs.config.Reviewers) is_reviewed := false diff --git a/workflow-pr/pr_processor_opened.go b/workflow-pr/pr_processor_opened.go index a6ab790..6ae0d78 100644 --- a/workflow-pr/pr_processor_opened.go +++ b/workflow-pr/pr_processor_opened.go @@ -74,7 +74,7 @@ referencing the following pull request: // request build review log.Println("num of current reviewers:", len(PR.RequestedReviewers)) - maintainers, err := FetchProjectMaintainershipData(o.gitea, config.Organization, config.GitProjectName, config.Branch) + maintainers, err := common.FetchProjectMaintainershipData(o.gitea, config.Organization, config.GitProjectName, config.Branch) if err != nil { return err } diff --git a/workflow-pr/pr_processor_reviewed.go b/workflow-pr/pr_processor_reviewed.go index 75c452a..9df1002 100644 --- a/workflow-pr/pr_processor_reviewed.go +++ b/workflow-pr/pr_processor_reviewed.go @@ -12,7 +12,7 @@ func (o *PullRequestReviewed) Process(req *common.PullRequestWebhookEvent, git c return err } - maintainers, err := FetchProjectMaintainershipData(o.gitea, prset.config.Organization, prset.config.GitProjectName, prset.config.Branch) + maintainers, err := common.FetchProjectMaintainershipData(o.gitea, prset.config.Organization, prset.config.GitProjectName, prset.config.Branch) if err != nil { return err } diff --git a/workflow-pr/pr_test.go b/workflow-pr/pr_test.go index 8968eba..09bdc70 100644 --- a/workflow-pr/pr_test.go +++ b/workflow-pr/pr_test.go @@ -13,7 +13,6 @@ import ( "src.opensuse.org/autogits/common" "src.opensuse.org/autogits/common/gitea-generated/models" mock_common "src.opensuse.org/autogits/common/mock" - mock_main "src.opensuse.org/workflow-pr/mock" ) func TestPR(t *testing.T) { @@ -222,7 +221,7 @@ func TestPR(t *testing.T) { } */ - maintainers := mock_main.NewMockMaintainershipData(ctl) + maintainers := mock_common.NewMockMaintainershipData(ctl) maintainers.EXPECT().IsApproved(gomock.Any(), gomock.Any()).Return(true).AnyTimes() if isApproved := res.IsApproved(review_mock, maintainers); isApproved != test.reviewed { @@ -361,7 +360,7 @@ func TestPRAssignReviewers(t *testing.T) { ctl := gomock.NewController(t) pr_mock := mock_common.NewMockGiteaPRFetcher(ctl) review_mock := mock_common.NewMockGiteaReviewFetcherAndRequester(ctl) - maintainership_mock := mock_main.NewMockMaintainershipData(ctl) + maintainership_mock := mock_common.NewMockMaintainershipData(ctl) pr_mock.EXPECT().GetPullRequest("other", "pkgrepo", int64(1)).Return(&models.PullRequest{ Body: "Some description is here", @@ -431,7 +430,7 @@ func TestPRAssignReviewers(t *testing.T) { ctl := gomock.NewController(t) pr_mock := mock_common.NewMockGiteaPRFetcher(ctl) review_mock := mock_common.NewMockGiteaReviewFetcherAndRequester(ctl) - maintainership_mock := mock_main.NewMockMaintainershipData(ctl) + maintainership_mock := mock_common.NewMockMaintainershipData(ctl) pr_mock.EXPECT().GetPullRequest("org", "repo", int64(1)).Return(&models.PullRequest{ Body: "Some description is here",