You've already forked go-semantic-release
refactor(releaser): clean up code
This commit is contained in:
12
.release.yml
12
.release.yml
@@ -5,18 +5,20 @@ branch:
|
|||||||
rc: rc
|
rc: rc
|
||||||
beta: beta
|
beta: beta
|
||||||
alpha: alpha
|
alpha: alpha
|
||||||
add_git_releases: alpha
|
|
||||||
changelog:
|
changelog:
|
||||||
printAll: false
|
printAll: false
|
||||||
template: ''
|
template: ''
|
||||||
templatePath: ''
|
templatePath: ''
|
||||||
release: 'github'
|
release: 'gitlab'
|
||||||
assets:
|
assets:
|
||||||
- name: ./build/go-semantic-release
|
- name: go-semantic-release
|
||||||
compress: false
|
|
||||||
- name: ./build/go-semantic-release.exe
|
|
||||||
compress: false
|
compress: false
|
||||||
|
- name: go-semantic-release.exe
|
||||||
|
compress: true
|
||||||
github:
|
github:
|
||||||
repo: "go-semantic-release"
|
repo: "go-semantic-release"
|
||||||
user: "nightapes"
|
user: "nightapes"
|
||||||
customUrl: ""
|
customUrl: ""
|
||||||
|
gitlab:
|
||||||
|
repo: "test/bla"
|
||||||
|
customUrl: "http://gitlab.example.com"
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ script:
|
|||||||
- go test -v ./...
|
- go test -v ./...
|
||||||
- go build -o build/go-semantic-release-temp ./cmd/go-semantic-release/
|
- 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`"
|
- 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/
|
- 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 "-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:
|
after_success:
|
||||||
- ./build/go-semantic-release-temp release --loglevel debug
|
- ./build/go-semantic-release-temp release --loglevel trace
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
except:
|
except:
|
||||||
|
|||||||
1
go.mod
1
go.mod
@@ -4,7 +4,6 @@ go 1.12
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Masterminds/semver v1.4.2
|
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/gliderlabs/ssh v0.2.2 // indirect
|
||||||
github.com/google/go-cmp v0.3.0 // indirect
|
github.com/google/go-cmp v0.3.0 // indirect
|
||||||
github.com/google/go-github/v25 v25.1.3
|
github.com/google/go-github/v25 v25.1.3
|
||||||
|
|||||||
1
go.sum
1
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-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 h1:VAx3LRNjVNvjtgO7KFRuT/3aye/0zJvwn01rHSfoolo=
|
||||||
github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
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/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 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ type Client struct {
|
|||||||
context context.Context
|
context context.Context
|
||||||
release *github.RepositoryRelease
|
release *github.RepositoryRelease
|
||||||
baseURL string
|
baseURL string
|
||||||
|
log *log.Entry
|
||||||
}
|
}
|
||||||
|
|
||||||
// New initialize a new GitHubRelease
|
// New initialize a new GitHubRelease
|
||||||
@@ -52,6 +53,7 @@ func New(c *config.GitHubProvider) (*Client, error) {
|
|||||||
client: client,
|
client: client,
|
||||||
context: ctx,
|
context: ctx,
|
||||||
baseURL: baseURL,
|
baseURL: baseURL,
|
||||||
|
log: log.WithField("releaser", GITHUB),
|
||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +87,7 @@ func (g *Client) ValidateConfig() error {
|
|||||||
func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedChangelog *shared.GeneratedChangelog) error {
|
func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedChangelog *shared.GeneratedChangelog) error {
|
||||||
|
|
||||||
tag := releaseVersion.Next.Version.String()
|
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() != ""
|
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 {
|
if !strings.Contains(err.Error(), "already_exists") && resp.StatusCode >= http.StatusUnprocessableEntity {
|
||||||
return fmt.Errorf("could not create release: %v", err)
|
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 {
|
} else {
|
||||||
g.release = release
|
g.release = release
|
||||||
log.Debugf("Release repsone: %+v", *release)
|
g.log.Debugf("Release repsone: %+v", *release)
|
||||||
log.Infof("Crated release")
|
g.log.Infof("Crated release")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -133,7 +135,7 @@ func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode >= http.StatusBadRequest {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ type Client struct {
|
|||||||
apiURL string
|
apiURL string
|
||||||
token string
|
token string
|
||||||
release string
|
release string
|
||||||
|
log *log.Entry
|
||||||
}
|
}
|
||||||
|
|
||||||
// New initialize a new gitlabRelease
|
// New initialize a new gitlabRelease
|
||||||
@@ -41,16 +42,6 @@ func New(config *config.GitLabProvider) (*Client, error) {
|
|||||||
return nil, err
|
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()
|
ctx := context.Background()
|
||||||
tokenHeader := util.NewAddHeaderTransport(nil, "PRIVATE-TOKEN", accessToken)
|
tokenHeader := util.NewAddHeaderTransport(nil, "PRIVATE-TOKEN", accessToken)
|
||||||
acceptHeader := util.NewAddHeaderTransport(tokenHeader, "Accept", "application/json")
|
acceptHeader := util.NewAddHeaderTransport(tokenHeader, "Accept", "application/json")
|
||||||
@@ -63,9 +54,10 @@ func New(config *config.GitLabProvider) (*Client, error) {
|
|||||||
token: accessToken,
|
token: accessToken,
|
||||||
config: config,
|
config: config,
|
||||||
context: ctx,
|
context: ctx,
|
||||||
baseURL: baseURL,
|
baseURL: config.CustomURL,
|
||||||
apiURL: baseURL + "api/v4",
|
apiURL: config.CustomURL + "api/v4",
|
||||||
client: httpClient,
|
client: httpClient,
|
||||||
|
log: log.WithField("releaser", GITLAB),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,12 +73,21 @@ func (g *Client) GetCompareURL(oldVersion, newVersion string) string {
|
|||||||
|
|
||||||
//ValidateConfig for gitlab
|
//ValidateConfig for gitlab
|
||||||
func (g *Client) ValidateConfig() error {
|
func (g *Client) ValidateConfig() error {
|
||||||
log.Debugf("validate gitlab provider config")
|
g.log.Debugf("validate gitlab provider config")
|
||||||
|
|
||||||
if g.config.Repo == "" {
|
if g.config.Repo == "" {
|
||||||
return fmt.Errorf("gitlab Repro is not set")
|
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
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -96,7 +97,9 @@ func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedC
|
|||||||
|
|
||||||
tag := releaseVersion.Next.Version.String()
|
tag := releaseVersion.Next.Version.String()
|
||||||
g.release = tag
|
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{
|
bodyBytes, err := json.Marshal(Release{
|
||||||
TagName: tag,
|
TagName: tag,
|
||||||
@@ -107,36 +110,32 @@ func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedC
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
bodyReader := bytes.NewReader(bodyBytes)
|
|
||||||
|
|
||||||
url := fmt.Sprintf("%s/projects/%s/releases", g.apiURL, util.PathEscape(g.config.Repo))
|
req, err := http.NewRequest("POST", url, bytes.NewReader(bodyBytes))
|
||||||
log.Debugf("Send release to %s", url)
|
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 err != nil {
|
||||||
|
|
||||||
if !strings.Contains(err.Error(), "already_exists") && resp.StatusCode >= http.StatusUnprocessableEntity {
|
return fmt.Errorf("could not create release: %s", err.Error())
|
||||||
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")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,15 +148,16 @@ func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error {
|
|||||||
for _, f := range filesToUpload {
|
for _, f := range filesToUpload {
|
||||||
|
|
||||||
file, err := os.Open(*f)
|
file, err := os.Open(*f)
|
||||||
defer file.Close()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
fileInfo, _ := file.Stat()
|
fileInfo, _ := file.Stat()
|
||||||
|
|
||||||
result, err := g.uploadFile(fileInfo.Name(), file)
|
result, err := g.uploadFile(fileInfo.Name(), file)
|
||||||
if err != nil {
|
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)
|
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
|
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
|
return nil
|
||||||
}
|
}
|
||||||
@@ -216,6 +216,9 @@ func (g *Client) uploadFile(fileName string, file *os.File) (*ProjectFile, error
|
|||||||
|
|
||||||
uf := &ProjectFile{}
|
uf := &ProjectFile{}
|
||||||
resp, err := util.Do(g.client, req, uf)
|
resp, err := util.Do(g.client, req, uf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
if err = util.IsValidResult(resp); err != nil {
|
if err = util.IsValidResult(resp); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -185,8 +185,5 @@ func IsValidResult(resp *http.Response) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ShouldRetry(resp *http.Response) bool {
|
func ShouldRetry(resp *http.Response) bool {
|
||||||
if resp.StatusCode == http.StatusTooManyRequests {
|
return resp.StatusCode == http.StatusTooManyRequests
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user