You've already forked go-semantic-release
feat(releaser): add git only as releaser, will create a new tag with version only
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user