From 08a99152d63b6c6364bd1c498a353b9780589fc3 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Tue, 30 Aug 2022 01:14:07 +0200 Subject: [PATCH] Dedup code and migrate away from deprecated funcs (#1141) Co-authored-by: Anbraten --- cli/common/flags.go | 7 ++ cli/registry/registry_add.go | 9 +-- cli/registry/registry_info.go | 5 +- cli/registry/registry_list.go | 5 +- cli/registry/registry_rm.go | 5 +- cli/registry/registry_set.go | 9 +-- pipeline/multipart/reader_test.go | 4 +- server/plugins/utils/http.go | 3 +- server/remote/bitbucket/internal/client.go | 3 +- server/remote/bitbucket/parse.go | 4 +- .../remote/bitbucketserver/bitbucketserver.go | 4 +- .../remote/bitbucketserver/internal/client.go | 9 +-- server/remote/coding/hook.go | 4 +- server/remote/coding/hook_test.go | 4 +- server/remote/coding/internal/coding.go | 4 +- server/remote/github/parse.go | 3 +- server/remote/remote.go | 3 +- server/shared/configFetcher_test.go | 4 +- server/shared/procBuilder.go | 81 ++++++++----------- server/store/datastore/file.go | 5 +- server/store/datastore/log_test.go | 6 +- .../datastore/migration/migration_test.go | 7 +- web/web.go | 4 +- woodpecker-go/woodpecker/client.go | 5 +- woodpecker-go/woodpecker/interface.go | 2 +- 25 files changed, 86 insertions(+), 113 deletions(-) diff --git a/cli/common/flags.go b/cli/common/flags.go index 84225f4ee..063c56e8d 100644 --- a/cli/common/flags.go +++ b/cli/common/flags.go @@ -65,3 +65,10 @@ func FormatFlag(tmpl string, hidden ...bool) *cli.StringFlag { Hidden: len(hidden) != 0, } } + +// specify repository +var RepoFlag = &cli.StringFlag{ + Name: "repository", + Aliases: []string{"repo"}, + Usage: "repository name (e.g. octocat/hello-world)", +} diff --git a/cli/registry/registry_add.go b/cli/registry/registry_add.go index aabea3824..ceae1143c 100644 --- a/cli/registry/registry_add.go +++ b/cli/registry/registry_add.go @@ -1,7 +1,7 @@ package registry import ( - "io/ioutil" + "os" "strings" "github.com/urfave/cli/v2" @@ -17,10 +17,7 @@ var registryCreateCmd = &cli.Command{ ArgsUsage: "[repo/name]", Action: registryCreate, Flags: append(common.GlobalFlags, - &cli.StringFlag{ - Name: "repository", - Usage: "repository name (e.g. octocat/hello-world)", - }, + common.RepoFlag, &cli.StringFlag{ Name: "hostname", Usage: "registry hostname", @@ -62,7 +59,7 @@ func registryCreate(c *cli.Context) error { } if strings.HasPrefix(registry.Password, "@") { path := strings.TrimPrefix(registry.Password, "@") - out, ferr := ioutil.ReadFile(path) + out, ferr := os.ReadFile(path) if ferr != nil { return ferr } diff --git a/cli/registry/registry_info.go b/cli/registry/registry_info.go index 52ac35b54..19f0ea19e 100644 --- a/cli/registry/registry_info.go +++ b/cli/registry/registry_info.go @@ -16,10 +16,7 @@ var registryInfoCmd = &cli.Command{ ArgsUsage: "[repo/name]", Action: registryInfo, Flags: append(common.GlobalFlags, - &cli.StringFlag{ - Name: "repository", - Usage: "repository name (e.g. octocat/hello-world)", - }, + common.RepoFlag, &cli.StringFlag{ Name: "hostname", Usage: "registry hostname", diff --git a/cli/registry/registry_list.go b/cli/registry/registry_list.go index bd8087445..b5e4cae6c 100644 --- a/cli/registry/registry_list.go +++ b/cli/registry/registry_list.go @@ -16,10 +16,7 @@ var registryListCmd = &cli.Command{ ArgsUsage: "[repo/name]", Action: registryList, Flags: append(common.GlobalFlags, - &cli.StringFlag{ - Name: "repository", - Usage: "repository name (e.g. octocat/hello-world)", - }, + common.RepoFlag, common.FormatFlag(tmplRegistryList, true), ), } diff --git a/cli/registry/registry_rm.go b/cli/registry/registry_rm.go index b8ab182ce..3cef16cc6 100644 --- a/cli/registry/registry_rm.go +++ b/cli/registry/registry_rm.go @@ -13,10 +13,7 @@ var registryDeleteCmd = &cli.Command{ ArgsUsage: "[repo/name]", Action: registryDelete, Flags: append(common.GlobalFlags, - &cli.StringFlag{ - Name: "repository", - Usage: "repository name (e.g. octocat/hello-world)", - }, + common.RepoFlag, &cli.StringFlag{ Name: "hostname", Usage: "registry hostname", diff --git a/cli/registry/registry_set.go b/cli/registry/registry_set.go index 826dfec86..5f28eb23e 100644 --- a/cli/registry/registry_set.go +++ b/cli/registry/registry_set.go @@ -1,7 +1,7 @@ package registry import ( - "io/ioutil" + "os" "strings" "github.com/urfave/cli/v2" @@ -17,10 +17,7 @@ var registryUpdateCmd = &cli.Command{ ArgsUsage: "[repo/name]", Action: registryUpdate, Flags: append(common.GlobalFlags, - &cli.StringFlag{ - Name: "repository", - Usage: "repository name (e.g. octocat/hello-world)", - }, + common.RepoFlag, &cli.StringFlag{ Name: "hostname", Usage: "registry hostname", @@ -62,7 +59,7 @@ func registryUpdate(c *cli.Context) error { } if strings.HasPrefix(registry.Password, "@") { path := strings.TrimPrefix(registry.Password, "@") - out, ferr := ioutil.ReadFile(path) + out, ferr := os.ReadFile(path) if ferr != nil { return ferr } diff --git a/pipeline/multipart/reader_test.go b/pipeline/multipart/reader_test.go index 8a698b5bd..6dd0fe84a 100644 --- a/pipeline/multipart/reader_test.go +++ b/pipeline/multipart/reader_test.go @@ -2,7 +2,7 @@ package multipart import ( "bytes" - "io/ioutil" + "io" "testing" ) @@ -20,7 +20,7 @@ func TestReader(t *testing.T) { if got, want := header.Get("Content-Type"), "text/plain"; got != want { t.Errorf("Want Content-Type %q, got %q", want, got) } - body, err := ioutil.ReadAll(part) + body, err := io.ReadAll(part) if err != nil { t.Error(err) return diff --git a/server/plugins/utils/http.go b/server/plugins/utils/http.go index c089218e2..99b548002 100644 --- a/server/plugins/utils/http.go +++ b/server/plugins/utils/http.go @@ -7,7 +7,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" @@ -53,7 +52,7 @@ func Send(ctx context.Context, method, path string, privateKey crypto.PrivateKey defer resp.Body.Close() if resp.StatusCode != 200 { - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return resp.StatusCode, err } diff --git a/server/remote/bitbucket/internal/client.go b/server/remote/bitbucket/internal/client.go index c935f2cbe..71628be9e 100644 --- a/server/remote/bitbucket/internal/client.go +++ b/server/remote/bitbucket/internal/client.go @@ -20,7 +20,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" @@ -252,7 +251,7 @@ func (c *Client) do(rawurl, method string, in, out interface{}) (*string, error) return nil, json.NewDecoder(resp.Body).Decode(out) } - bodyBytes, err := ioutil.ReadAll(resp.Body) + bodyBytes, err := io.ReadAll(resp.Body) if err != nil { return nil, err } diff --git a/server/remote/bitbucket/parse.go b/server/remote/bitbucket/parse.go index a7961d81a..8d6e07601 100644 --- a/server/remote/bitbucket/parse.go +++ b/server/remote/bitbucket/parse.go @@ -16,7 +16,7 @@ package bitbucket import ( "encoding/json" - "io/ioutil" + "io" "net/http" "github.com/woodpecker-ci/woodpecker/server/model" @@ -34,7 +34,7 @@ const ( // parseHook parses a Bitbucket hook from an http.Request request and returns // Repo and Build detail. If a hook type is unsupported nil values are returned. func parseHook(r *http.Request) (*model.Repo, *model.Build, error) { - payload, _ := ioutil.ReadAll(r.Body) + payload, _ := io.ReadAll(r.Body) switch r.Header.Get(hookEvent) { case hookPush: diff --git a/server/remote/bitbucketserver/bitbucketserver.go b/server/remote/bitbucketserver/bitbucketserver.go index 1f91404d7..d807bf60f 100644 --- a/server/remote/bitbucketserver/bitbucketserver.go +++ b/server/remote/bitbucketserver/bitbucketserver.go @@ -24,8 +24,8 @@ import ( "crypto/x509" "encoding/pem" "fmt" - "io/ioutil" "net/http" + "os" "github.com/mrjones/oauth" @@ -86,7 +86,7 @@ func New(opts Opts) (remote.Remote, error) { var keyFileBytes []byte if opts.ConsumerRSA != "" { var err error - keyFileBytes, err = ioutil.ReadFile(opts.ConsumerRSA) + keyFileBytes, err = os.ReadFile(opts.ConsumerRSA) if err != nil { return nil, err } diff --git a/server/remote/bitbucketserver/internal/client.go b/server/remote/bitbucketserver/internal/client.go index d383f805b..57c0efcda 100644 --- a/server/remote/bitbucketserver/internal/client.go +++ b/server/remote/bitbucketserver/internal/client.go @@ -20,7 +20,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "strconv" "strings" @@ -78,7 +77,7 @@ func (c *Client) FindCurrentUser() (*User, error) { return nil, err } - bits, err := ioutil.ReadAll(CurrentUserIDResponse.Body) + bits, err := io.ReadAll(CurrentUserIDResponse.Body) if err != nil { return nil, err } @@ -92,7 +91,7 @@ func (c *Client) FindCurrentUser() (*User, error) { return nil, err } - contents, err := ioutil.ReadAll(CurrentUserResponse.Body) + contents, err := io.ReadAll(CurrentUserResponse.Body) if err != nil { return nil, err } @@ -115,7 +114,7 @@ func (c *Client) FindRepo(owner, name string) (*Repo, error) { if err != nil { log.Err(err).Msg("") } - contents, err := ioutil.ReadAll(response.Body) + contents, err := io.ReadAll(response.Body) if err != nil { return nil, err } @@ -162,7 +161,7 @@ func (c *Client) FindFileForRepo(owner, repo, fileName, ref string) ([]byte, err if response.StatusCode == 404 { return nil, nil } - responseBytes, err := ioutil.ReadAll(response.Body) + responseBytes, err := io.ReadAll(response.Body) if err != nil { log.Err(err).Msg("") } diff --git a/server/remote/coding/hook.go b/server/remote/coding/hook.go index 99980d9ab..ffd6c7be0 100644 --- a/server/remote/coding/hook.go +++ b/server/remote/coding/hook.go @@ -17,7 +17,7 @@ package coding import ( "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "regexp" "strings" @@ -94,7 +94,7 @@ type MergeRequestHook struct { } func parseHook(r *http.Request) (*model.Repo, *model.Build, error) { - raw, err := ioutil.ReadAll(r.Body) + raw, err := io.ReadAll(r.Body) defer r.Body.Close() if err != nil { return nil, nil, err diff --git a/server/remote/coding/hook_test.go b/server/remote/coding/hook_test.go index fa282ad9a..b5ed7880b 100644 --- a/server/remote/coding/hook_test.go +++ b/server/remote/coding/hook_test.go @@ -15,7 +15,7 @@ package coding import ( - "io/ioutil" + "io" "net/http" "strings" "testing" @@ -30,7 +30,7 @@ func Test_hook(t *testing.T) { g := goblin.Goblin(t) g.Describe("Coding hook", func() { g.It("Should parse hook", func() { - reader := ioutil.NopCloser(strings.NewReader(fixtures.PushHook)) + reader := io.NopCloser(strings.NewReader(fixtures.PushHook)) r := &http.Request{ Header: map[string][]string{ hookEvent: {hookPush}, diff --git a/server/remote/coding/internal/coding.go b/server/remote/coding/internal/coding.go index c883c7adb..a6c174082 100644 --- a/server/remote/coding/internal/coding.go +++ b/server/remote/coding/internal/coding.go @@ -18,7 +18,7 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/url" "strings" @@ -84,7 +84,7 @@ func (c *Client) Do(method, u string, params url.Values) ([]byte, error) { return nil, fmt.Errorf("%s %s respond %d", req.Method, req.URL, resp.StatusCode) } defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) + body, err := io.ReadAll(resp.Body) if err != nil { return nil, fmt.Errorf("fail to read response from %s %s: %v", req.Method, req.URL.String(), err) } diff --git a/server/remote/github/parse.go b/server/remote/github/parse.go index 804df11b8..d58e4c162 100644 --- a/server/remote/github/parse.go +++ b/server/remote/github/parse.go @@ -18,7 +18,6 @@ import ( "bytes" "fmt" "io" - "io/ioutil" "net/http" "strings" @@ -46,7 +45,7 @@ func parseHook(r *http.Request, merge bool) (*github.PullRequest, *model.Repo, * reader = bytes.NewBufferString(payload) } - raw, err := ioutil.ReadAll(reader) + raw, err := io.ReadAll(reader) if err != nil { return nil, nil, nil, err } diff --git a/server/remote/remote.go b/server/remote/remote.go index bef473ec9..e54cd3bdf 100644 --- a/server/remote/remote.go +++ b/server/remote/remote.go @@ -14,7 +14,8 @@ package remote -//go:generate mockery -name Remote -output mocks -case=underscore +//go:generate go install github.com/vektra/mockery/v2@latest +//go:generate mockery --name Remote --output mocks --case underscore import ( "context" diff --git a/server/shared/configFetcher_test.go b/server/shared/configFetcher_test.go index 2ea19bf80..fe61abb33 100644 --- a/server/shared/configFetcher_test.go +++ b/server/shared/configFetcher_test.go @@ -6,7 +6,7 @@ import ( "crypto/rand" "encoding/json" "fmt" - "io/ioutil" + "io" "net/http" "net/http/httptest" "path/filepath" @@ -382,7 +382,7 @@ func TestFetchFromConfigService(t *testing.T) { } var req incoming - body, err := ioutil.ReadAll(r.Body) + body, err := io.ReadAll(r.Body) if err != nil { http.Error(w, "can't read body", http.StatusBadRequest) return diff --git a/server/shared/procBuilder.go b/server/shared/procBuilder.go index 370105a18..922b9e674 100644 --- a/server/shared/procBuilder.go +++ b/server/shared/procBuilder.go @@ -322,53 +322,8 @@ func metadataFromStruct(repo *model.Repo, build, last *model.Build, proc *model. Private: repo.IsSCMPrivate, Branch: repo.Branch, }, - Curr: frontend.Build{ - Number: build.Number, - Parent: build.Parent, - Created: build.Created, - Started: build.Started, - Finished: build.Finished, - Status: string(build.Status), - Event: string(build.Event), - Link: build.Link, - Target: build.Deploy, - Commit: frontend.Commit{ - Sha: build.Commit, - Ref: build.Ref, - Refspec: build.Refspec, - Branch: build.Branch, - Message: build.Message, - Author: frontend.Author{ - Name: build.Author, - Email: build.Email, - Avatar: build.Avatar, - }, - ChangedFiles: build.ChangedFiles, - }, - }, - Prev: frontend.Build{ - Number: last.Number, - Created: last.Created, - Started: last.Started, - Finished: last.Finished, - Status: string(last.Status), - Event: string(last.Event), - Link: last.Link, - Target: last.Deploy, - Commit: frontend.Commit{ - Sha: last.Commit, - Ref: last.Ref, - Refspec: last.Refspec, - Branch: last.Branch, - Message: last.Message, - Author: frontend.Author{ - Name: last.Author, - Email: last.Email, - Avatar: last.Avatar, - }, - ChangedFiles: last.ChangedFiles, - }, - }, + Curr: metadataBuildFromModelBuild(build, true), + Prev: metadataBuildFromModelBuild(last, false), Job: frontend.Job{ Number: proc.PID, Matrix: proc.Environ, @@ -382,6 +337,38 @@ func metadataFromStruct(repo *model.Repo, build, last *model.Build, proc *model. } } +func metadataBuildFromModelBuild(build *model.Build, includeParent bool) frontend.Build { + parent := int64(0) + if includeParent { + parent = build.Parent + } + + return frontend.Build{ + Number: build.Number, + Parent: parent, + Created: build.Created, + Started: build.Started, + Finished: build.Finished, + Status: string(build.Status), + Event: string(build.Event), + Link: build.Link, + Target: build.Deploy, + Commit: frontend.Commit{ + Sha: build.Commit, + Ref: build.Ref, + Refspec: build.Refspec, + Branch: build.Branch, + Message: build.Message, + Author: frontend.Author{ + Name: build.Author, + Email: build.Email, + Avatar: build.Avatar, + }, + ChangedFiles: build.ChangedFiles, + }, + } +} + func SanitizePath(path string) string { path = filepath.Base(path) path = strings.TrimSuffix(path, ".yml") diff --git a/server/store/datastore/file.go b/server/store/datastore/file.go index a0221b006..5e99cb571 100644 --- a/server/store/datastore/file.go +++ b/server/store/datastore/file.go @@ -17,7 +17,6 @@ package datastore import ( "bytes" "io" - "io/ioutil" "github.com/woodpecker-ci/woodpecker/server/model" ) @@ -41,11 +40,11 @@ func (s storage) FileRead(proc *model.Proc, name string) (io.ReadCloser, error) return nil, err } buf := bytes.NewBuffer(file.Data) - return ioutil.NopCloser(buf), err + return io.NopCloser(buf), err } func (s storage) FileCreate(file *model.File, reader io.Reader) error { - data, err := ioutil.ReadAll(reader) + data, err := io.ReadAll(reader) if err != nil { return err } diff --git a/server/store/datastore/log_test.go b/server/store/datastore/log_test.go index 947e3def4..020060913 100644 --- a/server/store/datastore/log_test.go +++ b/server/store/datastore/log_test.go @@ -16,7 +16,7 @@ package datastore import ( "bytes" - "io/ioutil" + "io" "testing" "github.com/woodpecker-ci/woodpecker/server/model" @@ -41,7 +41,7 @@ func TestLogCreateFind(t *testing.T) { } defer rc.Close() - out, _ := ioutil.ReadAll(rc) + out, _ := io.ReadAll(rc) if got, want := string(out), "echo hi"; got != want { t.Errorf("Want log data %s, got %s", want, got) } @@ -71,7 +71,7 @@ func TestLogUpdate(t *testing.T) { } defer rc.Close() - out, _ := ioutil.ReadAll(rc) + out, _ := io.ReadAll(rc) if got, want := string(out), "echo allo?"; got != want { t.Errorf("Want log data %s, got %s", want, got) } diff --git a/server/store/datastore/migration/migration_test.go b/server/store/datastore/migration/migration_test.go index 6fffaba43..9f6bc50fa 100644 --- a/server/store/datastore/migration/migration_test.go +++ b/server/store/datastore/migration/migration_test.go @@ -1,7 +1,6 @@ package migration import ( - "io/ioutil" "os" "testing" "time" @@ -29,16 +28,16 @@ func testDriver() string { } func createSQLiteDB(t *testing.T) string { - tmpF, err := ioutil.TempFile("./testfiles", "tmp_") + tmpF, err := os.CreateTemp("./testfiles", "tmp_") if !assert.NoError(t, err) { t.FailNow() } - dbF, err := ioutil.ReadFile(sqliteDB) + dbF, err := os.ReadFile(sqliteDB) if !assert.NoError(t, err) { t.FailNow() } - if !assert.NoError(t, ioutil.WriteFile(tmpF.Name(), dbF, 0o644)) { + if !assert.NoError(t, os.WriteFile(tmpF.Name(), dbF, 0o644)) { t.FailNow() } return tmpF.Name() diff --git a/web/web.go b/web/web.go index ce60ba98e..cd32896e7 100644 --- a/web/web.go +++ b/web/web.go @@ -2,8 +2,8 @@ package web import ( "embed" + "io" "io/fs" - "io/ioutil" "net/http" ) @@ -26,7 +26,7 @@ func Lookup(path string) (buf []byte, err error) { } defer file.Close() - buf, err = ioutil.ReadAll(file) + buf, err = io.ReadAll(file) if err != nil { return nil, err } diff --git a/woodpecker-go/woodpecker/client.go b/woodpecker-go/woodpecker/client.go index 13cba9994..19ea17882 100644 --- a/woodpecker-go/woodpecker/client.go +++ b/woodpecker-go/woodpecker/client.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" "net/url" "strconv" @@ -522,7 +521,7 @@ func (c *client) open(rawurl, method string, in, out interface{}) (io.ReadCloser return nil, derr } buf := bytes.NewBuffer(decoded) - req.Body = ioutil.NopCloser(buf) + req.Body = io.NopCloser(buf) req.ContentLength = int64(len(decoded)) req.Header.Set("Content-Length", strconv.Itoa(len(decoded))) req.Header.Set("Content-Type", "application/json") @@ -533,7 +532,7 @@ func (c *client) open(rawurl, method string, in, out interface{}) (io.ReadCloser } if resp.StatusCode > http.StatusPartialContent { defer resp.Body.Close() - out, _ := ioutil.ReadAll(resp.Body) + out, _ := io.ReadAll(resp.Body) return nil, fmt.Errorf("client error %d: %s", resp.StatusCode, string(out)) } return resp.Body, nil diff --git a/woodpecker-go/woodpecker/interface.go b/woodpecker-go/woodpecker/interface.go index e77f3ef1e..102b1b601 100644 --- a/woodpecker-go/woodpecker/interface.go +++ b/woodpecker-go/woodpecker/interface.go @@ -4,7 +4,7 @@ import ( "net/http" ) -// Client is used to communicate with a Drone server. +// Client is used to communicate with a Woodpecker server. type Client interface { // SetClient sets the http.Client. SetClient(*http.Client)