feat(releaser): add git only as releaser, will create a new tag with version only

This commit is contained in:
Nightapes
2020-01-05 18:41:44 +01:00
parent 6211095c38
commit 42fc522a43
19 changed files with 284 additions and 109 deletions

View File

@@ -3,6 +3,7 @@ package config
import (
"io/ioutil"
"os"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
@@ -50,6 +51,20 @@ type GitLabProvider struct {
AccessToken string
}
// GitProvider struct
type GitProvider struct {
Email string `yaml:"email"`
Username string `yaml:"user"`
Auth string `yaml:"auth"`
SSH bool `yaml:"ssh"`
}
// Hooks struct
type Hooks struct {
PreRelease []string `yaml:"preRelease"`
PostRelease []string `yaml:"postRelease"`
}
// ReleaseConfig struct
type ReleaseConfig struct {
CommitFormat string `yaml:"commitFormat"`
@@ -58,7 +73,9 @@ type ReleaseConfig struct {
Release string `yaml:"release,omitempty"`
GitHubProvider GitHubProvider `yaml:"github,omitempty"`
GitLabProvider GitLabProvider `yaml:"gitlab,omitempty"`
GitProvider GitProvider `yaml:"git,omitempty"`
Assets []Asset `yaml:"assets"`
Hooks Hooks `yaml:"hooks"`
ReleaseTitle string `yaml:"title"`
IsPreRelease bool
}
@@ -71,13 +88,31 @@ func Read(configPath string) (*ReleaseConfig, error) {
return &ReleaseConfig{}, err
}
var releaseConfig ReleaseConfig
err = yaml.Unmarshal(content, &releaseConfig)
log.Tracef("Found config %s", string(content))
releaseConfig := &ReleaseConfig{}
err = yaml.Unmarshal(content, releaseConfig)
if err != nil {
return &ReleaseConfig{}, err
}
log.Tracef("Found config %+v", releaseConfig)
org := *releaseConfig
return &releaseConfig, nil
releaseConfig.Hooks = Hooks{}
configWithoutHooks, err := yaml.Marshal(releaseConfig)
if err != nil {
return &ReleaseConfig{}, err
}
configWithoutHooks = []byte(os.ExpandEnv(string(configWithoutHooks)))
releaseConfigWithExpanedEnvs := &ReleaseConfig{}
err = yaml.Unmarshal(configWithoutHooks, releaseConfigWithExpanedEnvs)
if err != nil {
return &ReleaseConfig{}, err
}
releaseConfigWithExpanedEnvs.Hooks = org.Hooks
log.Tracef("Found config %+v", releaseConfigWithExpanedEnvs)
return releaseConfigWithExpanedEnvs, nil
}

View File

@@ -41,6 +41,9 @@ func TestWriteAndReadCache(t *testing.T) {
assert.NoError(t, err)
defer os.RemoveAll(dir)
os.Setenv("TEST_CONFIG", "value")
defer os.Unsetenv("TEST_CONFIG")
completePath := path.Join(path.Dir(dir), ".release.yml")
content := []byte(`
commitFormat: angular
@@ -53,9 +56,12 @@ branch:
add_git_releases: alpha
changelog:
printAll: false
template: ''
templatePath: ''
template: ""
templatePath: '${TEST_CONFIG}'
release: 'github'
hooks:
preRelease:
- "Test hook ${RELEASE_VERSION}"
assets:
- name: ./build/go-semantic-release
compress: false
@@ -76,13 +82,18 @@ github:
Changelog: config.ChangelogConfig{
PrintAll: false,
TemplateTitle: "",
TemplatePath: ""},
TemplatePath: "value"},
Release: "github",
GitHubProvider: config.GitHubProvider{
Repo: "go-semantic-release",
User: "nightapes",
CustomURL: "",
AccessToken: ""},
Hooks: config.Hooks{
PreRelease: []string{
"Test hook ${RELEASE_VERSION}",
},
},
Assets: []config.Asset{
config.Asset{
Name: "./build/go-semantic-release",

View File

@@ -11,6 +11,7 @@ import (
"github.com/Nightapes/go-semantic-release/internal/changelog"
"github.com/Nightapes/go-semantic-release/internal/ci"
"github.com/Nightapes/go-semantic-release/internal/gitutil"
"github.com/Nightapes/go-semantic-release/internal/hooks"
"github.com/Nightapes/go-semantic-release/internal/releaser"
"github.com/Nightapes/go-semantic-release/internal/releaser/util"
"github.com/Nightapes/go-semantic-release/internal/shared"
@@ -20,16 +21,17 @@ import (
// SemanticRelease struct
type SemanticRelease struct {
config *config.ReleaseConfig
gitutil *gitutil.GitUtil
analyzer *analyzer.Analyzer
calculator *calculator.Calculator
releaser releaser.Releaser
repository string
config *config.ReleaseConfig
gitutil *gitutil.GitUtil
analyzer *analyzer.Analyzer
calculator *calculator.Calculator
releaser releaser.Releaser
repository string
checkConfig bool
}
// New SemanticRelease struct
func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) {
func New(c *config.ReleaseConfig, repository string, checkConfig bool) (*SemanticRelease, error) {
util, err := gitutil.New(repository)
if err != nil {
return nil, err
@@ -40,24 +42,29 @@ func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) {
return nil, err
}
releaser, err := releaser.New(c).GetReleaser()
if !checkConfig {
log.Infof("Ignore config checks!. No guarantee to run without issues")
}
releaser, err := releaser.New(c, util).GetReleaser(checkConfig)
if err != nil {
return nil, err
}
return &SemanticRelease{
config: c,
gitutil: util,
releaser: releaser,
analyzer: analyzer,
repository: repository,
calculator: calculator.New(),
config: c,
gitutil: util,
releaser: releaser,
analyzer: analyzer,
repository: repository,
checkConfig: checkConfig,
calculator: calculator.New(),
}, nil
}
//GetCIProvider result with ci config
func (s *SemanticRelease) GetCIProvider() (*ci.ProviderConfig, error) {
return ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs())
return ci.GetCIProvider(s.gitutil, s.checkConfig, ci.ReadAllEnvs())
}
// GetNextVersion from .version or calculate new from commits
@@ -183,7 +190,7 @@ func (s *SemanticRelease) WriteChangeLog(changelogContent, file string) error {
return ioutil.WriteFile(file, []byte(changelogContent), 0644)
}
// Release pusblish release to provider
// Release publish release to provider
func (s *SemanticRelease) Release(provider *ci.ProviderConfig, force bool) error {
if provider.IsPR {
@@ -207,27 +214,31 @@ func (s *SemanticRelease) Release(provider *ci.ProviderConfig, force bool) error
return nil
}
generatedChanglog, err := s.GetChangelog(releaseVersion)
hook := hooks.New(s.config, releaseVersion)
generatedChangelog, err := s.GetChangelog(releaseVersion)
if err != nil {
log.Debugf("Could not get changelog")
return err
}
releaser, err := releaser.New(s.config).GetReleaser()
err = hook.PreRelease()
if err != nil {
log.Debugf("Error during pre release hook")
return err
}
err = releaser.ValidateConfig()
if err = s.releaser.CreateRelease(releaseVersion, generatedChangelog); err != nil {
return err
}
if err = s.releaser.UploadAssets(s.repository, s.config.Assets); err != nil {
return err
}
err = hook.PostRelease()
if err != nil {
return err
}
if err = releaser.CreateRelease(releaseVersion, generatedChanglog); err != nil {
return err
}
if err = releaser.UploadAssets(s.repository, s.config.Assets); err != nil {
log.Debugf("Error during post release hook")
return err
}