From 5791d3b41c9a1197ae55c9536f78d26c11a07e8f Mon Sep 17 00:00:00 2001 From: Nightapes Date: Thu, 8 Aug 2019 21:30:29 +0200 Subject: [PATCH] refactor(releaser): clean up code --- .release.yml | 12 +++-- .travis.yml | 6 +-- go.mod | 1 - go.sum | 1 + internal/releaser/github/github.go | 12 +++-- internal/releaser/gitlab/gitlab.go | 83 ++++++++++++++++-------------- internal/releaser/util/util.go | 5 +- 7 files changed, 62 insertions(+), 58 deletions(-) diff --git a/.release.yml b/.release.yml index f505632..1d2b869 100644 --- a/.release.yml +++ b/.release.yml @@ -5,18 +5,20 @@ branch: rc: rc beta: beta alpha: alpha - add_git_releases: alpha changelog: printAll: false template: '' templatePath: '' -release: 'github' +release: 'gitlab' assets: - - name: ./build/go-semantic-release - compress: false - - name: ./build/go-semantic-release.exe + - name: go-semantic-release compress: false + - name: go-semantic-release.exe + compress: true github: repo: "go-semantic-release" user: "nightapes" customUrl: "" +gitlab: + repo: "test/bla" + customUrl: "http://gitlab.example.com" diff --git a/.travis.yml b/.travis.yml index f2cd291..34e9ede 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,11 +29,11 @@ script: - go test -v ./... - go build -o build/go-semantic-release-temp ./cmd/go-semantic-release/ - echo "Building version `./build/go-semantic-release-temp next --loglevel debug --no-cache`" - - go build -o build/go-semantic-release -ldflags "-X main.version=`./build/go-semantic-release-temp next`" ./cmd/go-semantic-release/ - - GOOS=windows GOARCH=386 go build -o build/go-semantic-release.exe -ldflags "-X main.version=`./build/go-semantic-release-temp next`" ./cmd/go-semantic-release/ + - go build -o build/go-semantic-release -ldflags "-w -s --X main.version=`./build/go-semantic-release-temp next`" ./cmd/go-semantic-release/ + - GOOS=windows GOARCH=386 go build -o build/go-semantic-release.exe -ldflags "-w -s -X main.version=`./build/go-semantic-release-temp next`" ./cmd/go-semantic-release/ after_success: - - ./build/go-semantic-release-temp release --loglevel debug + - ./build/go-semantic-release-temp release --loglevel trace branches: except: diff --git a/go.mod b/go.mod index d1e9cef..6d9f669 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.12 require ( github.com/Masterminds/semver v1.4.2 - github.com/coreos/etcd v3.3.10+incompatible github.com/gliderlabs/ssh v0.2.2 // indirect github.com/google/go-cmp v0.3.0 // indirect github.com/google/go-github/v25 v25.1.3 diff --git a/go.sum b/go.sum index 5a9a17d..8741862 100644 --- a/go.sum +++ b/go.sum @@ -48,6 +48,7 @@ github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c h1:VAx3LRNjVNvjtgO7KFRuT/3aye/0zJvwn01rHSfoolo= github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= diff --git a/internal/releaser/github/github.go b/internal/releaser/github/github.go index 3f73b95..f5bddc4 100644 --- a/internal/releaser/github/github.go +++ b/internal/releaser/github/github.go @@ -25,6 +25,7 @@ type Client struct { context context.Context release *github.RepositoryRelease baseURL string + log *log.Entry } // New initialize a new GitHubRelease @@ -52,6 +53,7 @@ func New(c *config.GitHubProvider) (*Client, error) { client: client, context: ctx, baseURL: baseURL, + log: log.WithField("releaser", GITHUB), }, err } @@ -85,7 +87,7 @@ func (g *Client) ValidateConfig() error { func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedChangelog *shared.GeneratedChangelog) error { tag := releaseVersion.Next.Version.String() - log.Debugf("create release with version %s", tag) + g.log.Debugf("create release with version %s", tag) prerelease := releaseVersion.Next.Version.Prerelease() != "" @@ -102,11 +104,11 @@ func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedC if !strings.Contains(err.Error(), "already_exists") && resp.StatusCode >= http.StatusUnprocessableEntity { return fmt.Errorf("could not create release: %v", err) } - log.Infof("A release with tag %s already exits, will not perform a release or update", tag) + g.log.Infof("A release with tag %s already exits, will not perform a release or update", tag) } else { g.release = release - log.Debugf("Release repsone: %+v", *release) - log.Infof("Crated release") + g.log.Debugf("Release repsone: %+v", *release) + g.log.Infof("Crated release") } return nil @@ -133,7 +135,7 @@ func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error { } if resp.StatusCode >= http.StatusBadRequest { - return fmt.Errorf("releaser: github: Could not upload asset %s: %s", file.Name(), resp.Status) + return fmt.Errorf("could not upload asset %s: %s", file.Name(), resp.Status) } } } diff --git a/internal/releaser/gitlab/gitlab.go b/internal/releaser/gitlab/gitlab.go index b739232..173f18e 100644 --- a/internal/releaser/gitlab/gitlab.go +++ b/internal/releaser/gitlab/gitlab.go @@ -32,6 +32,7 @@ type Client struct { apiURL string token string release string + log *log.Entry } // New initialize a new gitlabRelease @@ -41,16 +42,6 @@ func New(config *config.GitLabProvider) (*Client, error) { return nil, err } - if config.CustomURL == "" { - config.CustomURL = "https://gitlab.com" - } - - baseURL, err := util.CheckURL(config.CustomURL) - log.Debugf("Use gitlab url %s", baseURL) - if err != nil { - return nil, err - } - ctx := context.Background() tokenHeader := util.NewAddHeaderTransport(nil, "PRIVATE-TOKEN", accessToken) acceptHeader := util.NewAddHeaderTransport(tokenHeader, "Accept", "application/json") @@ -63,9 +54,10 @@ func New(config *config.GitLabProvider) (*Client, error) { token: accessToken, config: config, context: ctx, - baseURL: baseURL, - apiURL: baseURL + "api/v4", + baseURL: config.CustomURL, + apiURL: config.CustomURL + "api/v4", client: httpClient, + log: log.WithField("releaser", GITLAB), }, nil } @@ -81,12 +73,21 @@ func (g *Client) GetCompareURL(oldVersion, newVersion string) string { //ValidateConfig for gitlab func (g *Client) ValidateConfig() error { - log.Debugf("validate gitlab provider config") + g.log.Debugf("validate gitlab provider config") if g.config.Repo == "" { return fmt.Errorf("gitlab Repro is not set") } + g.config.Repo = strings.Trim(g.config.Repo, "/") + + if g.config.CustomURL == "" { + g.config.CustomURL = "https://gitlab.com" + } + + g.config.CustomURL = strings.Trim(g.config.CustomURL, "/") + g.log.Debugf("Use gitlab url %s", g.config.CustomURL) + return nil } @@ -96,7 +97,9 @@ func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedC tag := releaseVersion.Next.Version.String() g.release = tag - log.Debugf("create release with version %s", tag) + g.log.Debugf("create release with version %s", tag) + url := fmt.Sprintf("%s/projects/%s/releases", g.apiURL, util.PathEscape(g.config.Repo)) + g.log.Debugf("Send release to %s", url) bodyBytes, err := json.Marshal(Release{ TagName: tag, @@ -107,36 +110,32 @@ func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedC if err != nil { return err } - bodyReader := bytes.NewReader(bodyBytes) - url := fmt.Sprintf("%s/projects/%s/releases", g.apiURL, util.PathEscape(g.config.Repo)) - log.Debugf("Send release to %s", url) + req, err := http.NewRequest("POST", url, bytes.NewReader(bodyBytes)) + if err != nil { + return err + } - resp, err := g.client.Post(url, "application/json", bodyReader) + req.Header.Set("Content-Type", "application/json") + resp, err := util.Do(g.client, req, nil) if err != nil { - if !strings.Contains(err.Error(), "already_exists") && resp.StatusCode >= http.StatusUnprocessableEntity { - return fmt.Errorf("could not create release: %v", err) - } - log.Infof("A release with tag %s already exits, will not perform a release or update", tag) - } else { - - defer resp.Body.Close() - - bodyBytes, err := ioutil.ReadAll(resp.Body) - if err != nil { - return err - } - log.Debugf("Release repsone: %+v", string(bodyBytes)) - - if err := util.IsValidResult(resp); err != nil { - return err - } - - log.Infof("Crated release") + return fmt.Errorf("could not create release: %s", err.Error()) } + respBodyBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + log.Debugf("Release repsone: %+v", string(respBodyBytes)) + + if err := util.IsValidResult(resp); err != nil { + return err + } + + log.Infof("Crated release") + return nil } @@ -149,15 +148,16 @@ func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error { for _, f := range filesToUpload { file, err := os.Open(*f) - defer file.Close() if err != nil { return err } + defer file.Close() + fileInfo, _ := file.Stat() result, err := g.uploadFile(fileInfo.Name(), file) if err != nil { - return fmt.Errorf("releaser: gitlab: Could not upload asset %s: %s", file.Name(), err.Error()) + return fmt.Errorf("could not upload asset %s: %s", file.Name(), err.Error()) } downloadURL := fmt.Sprintf("%s%s%s", g.baseURL, g.config.Repo, result.URL) @@ -182,7 +182,7 @@ func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error { return err } - log.Infof("Link file with release %s done", g.release) + log.Infof("Link file with release %s is done", g.release) } return nil } @@ -216,6 +216,9 @@ func (g *Client) uploadFile(fileName string, file *os.File) (*ProjectFile, error uf := &ProjectFile{} resp, err := util.Do(g.client, req, uf) + if err != nil { + return nil, err + } if err = util.IsValidResult(resp); err != nil { return nil, err diff --git a/internal/releaser/util/util.go b/internal/releaser/util/util.go index b535df2..7956824 100644 --- a/internal/releaser/util/util.go +++ b/internal/releaser/util/util.go @@ -185,8 +185,5 @@ func IsValidResult(resp *http.Response) error { } func ShouldRetry(resp *http.Response) bool { - if resp.StatusCode == http.StatusTooManyRequests { - return true - } - return false + return resp.StatusCode == http.StatusTooManyRequests }