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:
@@ -1,4 +1,4 @@
|
|||||||
release: 'github'
|
release: "github"
|
||||||
github:
|
github:
|
||||||
repo: "go-semantic-release"
|
repo: "go-semantic-release"
|
||||||
user: "nightapes"
|
user: "nightapes"
|
||||||
|
|||||||
@@ -35,7 +35,12 @@ var changelogCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := semanticrelease.New(readConfig(config), repository)
|
ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := semanticrelease.New(readConfig(config), repository, !ignoreConfigChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,12 @@ var nextCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := semanticrelease.New(readConfig(config), repository)
|
ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := semanticrelease.New(readConfig(config), repository, !ignoreConfigChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,12 @@ var releaseCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := semanticrelease.New(readConfig(config), repository)
|
ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := semanticrelease.New(readConfig(config), repository, !ignoreConfigChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ func init() {
|
|||||||
rootCmd.PersistentFlags().StringP("loglevel", "l", "error", "Set loglevel")
|
rootCmd.PersistentFlags().StringP("loglevel", "l", "error", "Set loglevel")
|
||||||
rootCmd.PersistentFlags().StringP("config", "c", ".release.yml", "Path to config file")
|
rootCmd.PersistentFlags().StringP("config", "c", ".release.yml", "Path to config file")
|
||||||
rootCmd.PersistentFlags().Bool("no-cache", false, "Ignore cache, don't use in ci build")
|
rootCmd.PersistentFlags().Bool("no-cache", false, "Ignore cache, don't use in ci build")
|
||||||
|
rootCmd.PersistentFlags().Bool("no-checks", false, "Ignore missing values and envs")
|
||||||
}
|
}
|
||||||
|
|
||||||
func readConfig(file string) *config.ReleaseConfig {
|
func readConfig(file string) *config.ReleaseConfig {
|
||||||
|
|||||||
@@ -26,7 +26,12 @@ var setCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := semanticrelease.New(readConfig(config), repository)
|
ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := semanticrelease.New(readConfig(config), repository, !ignoreConfigChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,12 @@ var zipCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := semanticrelease.New(readConfig(config), repository)
|
ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := semanticrelease.New(readConfig(config), repository, !ignoreConfigChecks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
5
go.sum
5
go.sum
@@ -55,6 +55,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
|
|||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
@@ -62,6 +63,7 @@ github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQz
|
|||||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA=
|
github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA=
|
||||||
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
|
||||||
|
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
@@ -72,14 +74,17 @@ github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
|
|||||||
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
|
||||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
|
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
|
github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
|
||||||
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
|
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||||
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
|
||||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
|
github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
|
||||||
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
|
||||||
github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4=
|
github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4=
|
||||||
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
|
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ func ReadAllEnvs() map[string]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//GetCIProvider get provider
|
//GetCIProvider get provider
|
||||||
func GetCIProvider(gitUtil *gitutil.GitUtil, envs map[string]string) (*ProviderConfig, error) {
|
func GetCIProvider(gitUtil *gitutil.GitUtil, configCheck bool, envs map[string]string) (*ProviderConfig, error) {
|
||||||
|
|
||||||
services := []Service{
|
services := []Service{
|
||||||
Travis{},
|
Travis{},
|
||||||
GithubActions{},
|
GithubActions{},
|
||||||
GitlabCI{},
|
GitlabCI{},
|
||||||
Git{gitUtil: gitUtil}, // GIt must be the last option to check
|
Git{gitUtil: gitUtil}, // Git must be the last option to check
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, service := range services {
|
for _, service := range services {
|
||||||
@@ -57,5 +57,9 @@ func GetCIProvider(gitUtil *gitutil.GitUtil, envs map[string]string) (*ProviderC
|
|||||||
}
|
}
|
||||||
log.Debugf("%s", err.Error())
|
log.Debugf("%s", err.Error())
|
||||||
}
|
}
|
||||||
|
if configCheck {
|
||||||
return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true")
|
return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true")
|
||||||
|
|
||||||
|
}
|
||||||
|
return Git{gitUtil: gitUtil}.detect(map[string]string{"CI": "true"})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ func TestCi(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, config := range testConfigs {
|
for _, config := range testConfigs {
|
||||||
provider, err := ci.GetCIProvider(gitUtilInMemory, config.envs)
|
provider, err := ci.GetCIProvider(gitUtilInMemory, true, config.envs)
|
||||||
assert.Equalf(t, config.hasError, err != nil, "Service %s should have error: %t -> %s", config.service, config.hasError, err)
|
assert.Equalf(t, config.hasError, err != nil, "Service %s should have error: %t -> %s", config.service, config.hasError, err)
|
||||||
assert.Equalf(t, config.result, provider, "Service %s should have provider", config.service)
|
assert.Equalf(t, config.result, provider, "Service %s should have provider", config.service)
|
||||||
}
|
}
|
||||||
|
|||||||
101
internal/releaser/git/git.go
Normal file
101
internal/releaser/git/git.go
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
package git
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
||||||
|
"github.com/Nightapes/go-semantic-release/internal/shared"
|
||||||
|
"github.com/Nightapes/go-semantic-release/pkg/config"
|
||||||
|
"gopkg.in/src-d/go-git.v4"
|
||||||
|
gitConfig "gopkg.in/src-d/go-git.v4/config"
|
||||||
|
"gopkg.in/src-d/go-git.v4/plumbing/object"
|
||||||
|
"gopkg.in/src-d/go-git.v4/plumbing/transport/http"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GITONLY identifer for git interface
|
||||||
|
const GITONLY = "git"
|
||||||
|
|
||||||
|
// Client type struct
|
||||||
|
type Client struct {
|
||||||
|
config *config.GitProvider
|
||||||
|
log *log.Entry
|
||||||
|
git *gitutil.GitUtil
|
||||||
|
}
|
||||||
|
|
||||||
|
// New initialize a new gitRelease
|
||||||
|
func New(config *config.GitProvider, git *gitutil.GitUtil, checkConfig bool) (*Client, error) {
|
||||||
|
|
||||||
|
logger := log.WithField("releaser", GITONLY)
|
||||||
|
|
||||||
|
if config.Email == "" && checkConfig {
|
||||||
|
return nil, fmt.Errorf("git email not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.Username == "" && checkConfig {
|
||||||
|
return nil, fmt.Errorf("git username not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !config.SSH && config.Auth == "" && checkConfig {
|
||||||
|
return nil, fmt.Errorf("git auth not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.SSH {
|
||||||
|
return nil, fmt.Errorf("git ssh not supported yet")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Client{
|
||||||
|
config: config,
|
||||||
|
log: logger,
|
||||||
|
git: git,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//GetCommitURL for git
|
||||||
|
func (g *Client) GetCommitURL() string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
//GetCompareURL for git
|
||||||
|
func (g *Client) GetCompareURL(oldVersion, newVersion string) string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateRelease creates release on remote
|
||||||
|
func (g *Client) CreateRelease(releaseVersion *shared.ReleaseVersion, generatedChangelog *shared.GeneratedChangelog) error {
|
||||||
|
|
||||||
|
tag := "v" + releaseVersion.Next.Version.String()
|
||||||
|
g.log.Infof("create release with version %s", tag)
|
||||||
|
|
||||||
|
head, err := g.git.Repository.Head()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = g.git.Repository.CreateTag(tag, head.Hash(), &git.CreateTagOptions{Message: "Release " + tag, Tagger: &object.Signature{
|
||||||
|
Name: g.config.Username,
|
||||||
|
Email: g.config.Email,
|
||||||
|
When: time.Now(),
|
||||||
|
}})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
g.log.Infof("Created release")
|
||||||
|
|
||||||
|
return g.git.Repository.Push(&git.PushOptions{
|
||||||
|
Auth: &http.BasicAuth{
|
||||||
|
Username: g.config.Username,
|
||||||
|
Password: g.config.Auth,
|
||||||
|
},
|
||||||
|
RefSpecs: []gitConfig.RefSpec{"refs/tags/*:refs/tags/*"},
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadAssets uploads specified assets
|
||||||
|
func (g *Client) UploadAssets(repoDir string, assets []config.Asset) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -29,17 +29,27 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New initialize a new GitHubRelease
|
// New initialize a new GitHubRelease
|
||||||
func New(c *config.GitHubProvider) (*Client, error) {
|
func New(c *config.GitHubProvider, checkConfig bool) (*Client, error) {
|
||||||
var err error
|
|
||||||
|
|
||||||
if c.AccessToken, err = util.GetAccessToken("GITHUB_TOKEN"); err != nil {
|
token, err := util.GetAccessToken("GITHUB_TOKEN")
|
||||||
|
if err != nil && checkConfig {
|
||||||
return &Client{}, err
|
return &Client{}, err
|
||||||
}
|
}
|
||||||
|
c.AccessToken = token
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
httpClient := util.CreateBearerHTTPClient(ctx, c.AccessToken)
|
httpClient := util.CreateBearerHTTPClient(ctx, c.AccessToken)
|
||||||
|
|
||||||
var client *github.Client
|
var client *github.Client
|
||||||
baseURL := "https://github.com"
|
baseURL := "https://github.com"
|
||||||
|
|
||||||
|
if c.Repo == "" && checkConfig {
|
||||||
|
return nil, fmt.Errorf("github repro is not set")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.User == "" && checkConfig {
|
||||||
|
return nil, fmt.Errorf("github user is not set")
|
||||||
|
}
|
||||||
|
|
||||||
if c.CustomURL == "" {
|
if c.CustomURL == "" {
|
||||||
client = github.NewClient(httpClient)
|
client = github.NewClient(httpClient)
|
||||||
} else {
|
} else {
|
||||||
@@ -54,7 +64,7 @@ func New(c *config.GitHubProvider) (*Client, error) {
|
|||||||
context: ctx,
|
context: ctx,
|
||||||
baseURL: baseURL,
|
baseURL: baseURL,
|
||||||
log: log.WithField("releaser", GITHUB),
|
log: log.WithField("releaser", GITHUB),
|
||||||
}, err
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetCommitURL for github
|
//GetCommitURL for github
|
||||||
@@ -67,26 +77,10 @@ func (g *Client) GetCompareURL(oldVersion, newVersion string) string {
|
|||||||
return fmt.Sprintf("%s/%s/%s/compare/%s...%s", g.baseURL, g.config.User, g.config.Repo, oldVersion, newVersion)
|
return fmt.Sprintf("%s/%s/%s/compare/%s...%s", g.baseURL, g.config.User, g.config.Repo, oldVersion, newVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
//ValidateConfig for github
|
|
||||||
func (g *Client) ValidateConfig() error {
|
|
||||||
g.log.Debugf("validate GitHub provider config")
|
|
||||||
|
|
||||||
if g.config.Repo == "" {
|
|
||||||
return fmt.Errorf("github Repro is not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
if g.config.User == "" {
|
|
||||||
return fmt.Errorf("github User is not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateRelease creates release on remote
|
// CreateRelease creates release on remote
|
||||||
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 := "v" + releaseVersion.Next.Version.String()
|
||||||
g.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() != ""
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ func TestNew(t *testing.T) {
|
|||||||
os.Setenv("GITHUB_TOKEN", "XXX")
|
os.Setenv("GITHUB_TOKEN", "XXX")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := github.New(&testOject.config)
|
_, err := github.New(&testOject.config, true)
|
||||||
assert.Equal(t, testOject.valid, err == nil)
|
assert.Equal(t, testOject.valid, err == nil)
|
||||||
|
|
||||||
os.Unsetenv("GITHUB_TOKEN")
|
os.Unsetenv("GITHUB_TOKEN")
|
||||||
@@ -157,7 +157,7 @@ func TestNew(t *testing.T) {
|
|||||||
func TestGetCommitURL(t *testing.T) {
|
func TestGetCommitURL(t *testing.T) {
|
||||||
os.Setenv("GITHUB_TOKEN", "XX")
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
for _, testOject := range testNewClient {
|
for _, testOject := range testNewClient {
|
||||||
client, _ := github.New(&testOject.config)
|
client, _ := github.New(&testOject.config, false)
|
||||||
actualURL := client.GetCommitURL()
|
actualURL := client.GetCommitURL()
|
||||||
if testOject.config.CustomURL != "" {
|
if testOject.config.CustomURL != "" {
|
||||||
expectedURL := fmt.Sprintf("%s/%s/%s/commit/{{hash}}", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo)
|
expectedURL := fmt.Sprintf("%s/%s/%s/commit/{{hash}}", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo)
|
||||||
@@ -175,7 +175,7 @@ func TestGetCommitURL(t *testing.T) {
|
|||||||
func TestGetCompareURL(t *testing.T) {
|
func TestGetCompareURL(t *testing.T) {
|
||||||
os.Setenv("GITHUB_TOKEN", "XX")
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
for _, testOject := range testNewClient {
|
for _, testOject := range testNewClient {
|
||||||
client, _ := github.New(&testOject.config)
|
client, _ := github.New(&testOject.config, false)
|
||||||
actualURL := client.GetCompareURL("1", "2")
|
actualURL := client.GetCompareURL("1", "2")
|
||||||
if testOject.config.CustomURL != "" {
|
if testOject.config.CustomURL != "" {
|
||||||
expectedURL := fmt.Sprintf("%s/%s/%s/compare/%s...%s", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo, "1", "2")
|
expectedURL := fmt.Sprintf("%s/%s/%s/compare/%s...%s", testOject.config.CustomURL, testOject.config.User, testOject.config.Repo, "1", "2")
|
||||||
@@ -190,18 +190,6 @@ func TestGetCompareURL(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateConfig(t *testing.T) {
|
|
||||||
os.Setenv("GITHUB_TOKEN", "XX")
|
|
||||||
for _, testOject := range testHelperMethod {
|
|
||||||
client, _ := github.New(&testOject.config)
|
|
||||||
err := client.ValidateConfig()
|
|
||||||
|
|
||||||
assert.Equal(t, testOject.valid, err == nil)
|
|
||||||
|
|
||||||
}
|
|
||||||
os.Unsetenv("GITHUB_TOKEN")
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCreateRelease(t *testing.T) {
|
func TestCreateRelease(t *testing.T) {
|
||||||
os.Setenv("GITHUB_TOKEN", "XX")
|
os.Setenv("GITHUB_TOKEN", "XX")
|
||||||
|
|
||||||
@@ -209,7 +197,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
if testObejct.valid {
|
if testObejct.valid {
|
||||||
server := initHTTPServer(testObejct.requestResponseCode, testObejct.requestResponseBody)
|
server := initHTTPServer(testObejct.requestResponseCode, testObejct.requestResponseBody)
|
||||||
testObejct.config.CustomURL = server.URL
|
testObejct.config.CustomURL = server.URL
|
||||||
client, _ := github.New(&testObejct.config)
|
client, _ := github.New(&testObejct.config, false)
|
||||||
|
|
||||||
err := client.CreateRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
err := client.CreateRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -221,7 +209,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
testObejct.config.CustomURL = "http://foo"
|
testObejct.config.CustomURL = "http://foo"
|
||||||
client, _ := github.New(&testObejct.config)
|
client, _ := github.New(&testObejct.config, false)
|
||||||
|
|
||||||
err := client.CreateRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
err := client.CreateRelease(testObejct.releaseVersion, testObejct.generatedChangelog)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New initialize a new gitlabRelease
|
// New initialize a new gitlabRelease
|
||||||
func New(config *config.GitLabProvider) (*Client, error) {
|
func New(config *config.GitLabProvider, checkConfig bool) (*Client, error) {
|
||||||
accessToken, err := util.GetAccessToken(fmt.Sprintf("%s_ACCESS_TOKEN", strings.ToUpper(GITLAB)))
|
accessToken, err := util.GetAccessToken(fmt.Sprintf("%s_ACCESS_TOKEN", strings.ToUpper(GITLAB)))
|
||||||
if err != nil {
|
if err != nil && checkConfig {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ func New(config *config.GitLabProvider) (*Client, error) {
|
|||||||
|
|
||||||
logger.Debugf("validate gitlab provider config")
|
logger.Debugf("validate gitlab provider config")
|
||||||
|
|
||||||
if config.Repo == "" {
|
if config.Repo == "" && checkConfig {
|
||||||
return nil, fmt.Errorf("gitlab Repro is not set")
|
return nil, fmt.Errorf("gitlab Repro is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,16 +85,10 @@ func (g *Client) GetCompareURL(oldVersion, newVersion string) string {
|
|||||||
return fmt.Sprintf("%s/%s/compare/%s...%s", g.baseURL, g.config.Repo, oldVersion, newVersion)
|
return fmt.Sprintf("%s/%s/compare/%s...%s", g.baseURL, g.config.Repo, oldVersion, newVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
//ValidateConfig for gitlab
|
|
||||||
func (g *Client) ValidateConfig() error {
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateRelease creates release on remote
|
// CreateRelease creates release on remote
|
||||||
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 := "v" + releaseVersion.Next.Version.String()
|
||||||
g.Release = tag
|
g.Release = tag
|
||||||
g.log.Infof("create release with version %s", tag)
|
g.log.Infof("create release with version %s", tag)
|
||||||
url := fmt.Sprintf("%s/projects/%s/releases", g.apiURL, util.PathEscape(g.config.Repo))
|
url := fmt.Sprintf("%s/projects/%s/releases", g.apiURL, util.PathEscape(g.config.Repo))
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ func TestGetCommitURL(t *testing.T) {
|
|||||||
client, err := gitlab.New(&config.GitLabProvider{
|
client, err := gitlab.New(&config.GitLabProvider{
|
||||||
CustomURL: "https://localhost/",
|
CustomURL: "https://localhost/",
|
||||||
Repo: "test/test",
|
Repo: "test/test",
|
||||||
})
|
}, true)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "https://localhost/test/test/commit/{{hash}}", client.GetCommitURL())
|
assert.Equal(t, "https://localhost/test/test/commit/{{hash}}", client.GetCommitURL())
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ func TestGetCompareURL(t *testing.T) {
|
|||||||
client, err := gitlab.New(&config.GitLabProvider{
|
client, err := gitlab.New(&config.GitLabProvider{
|
||||||
CustomURL: "https://localhost/",
|
CustomURL: "https://localhost/",
|
||||||
Repo: "test/test",
|
Repo: "test/test",
|
||||||
})
|
}, true)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "https://localhost/test/test/compare/1.0.0...1.0.1", client.GetCompareURL("1.0.0", "1.0.1"))
|
assert.Equal(t, "https://localhost/test/test/compare/1.0.0...1.0.1", client.GetCompareURL("1.0.0", "1.0.1"))
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ func TestValidateConfig_EmptyRepro(t *testing.T) {
|
|||||||
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
||||||
_, err := gitlab.New(&config.GitLabProvider{
|
_, err := gitlab.New(&config.GitLabProvider{
|
||||||
CustomURL: "https://localhost/",
|
CustomURL: "https://localhost/",
|
||||||
})
|
}, true)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ func TestValidateConfig_DefaultURL(t *testing.T) {
|
|||||||
config := &config.GitLabProvider{
|
config := &config.GitLabProvider{
|
||||||
Repo: "localhost/test",
|
Repo: "localhost/test",
|
||||||
}
|
}
|
||||||
_, err := gitlab.New(config)
|
_, err := gitlab.New(config, true)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "https://gitlab.com", config.CustomURL)
|
assert.Equal(t, "https://gitlab.com", config.CustomURL)
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,7 @@ func TestValidateConfig_CustomURL(t *testing.T) {
|
|||||||
Repo: "/localhost/test/",
|
Repo: "/localhost/test/",
|
||||||
CustomURL: "https://localhost/",
|
CustomURL: "https://localhost/",
|
||||||
}
|
}
|
||||||
_, err := gitlab.New(config)
|
_, err := gitlab.New(config, true)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "https://localhost", config.CustomURL)
|
assert.Equal(t, "https://localhost", config.CustomURL)
|
||||||
assert.Equal(t, "localhost/test", config.Repo)
|
assert.Equal(t, "localhost/test", config.Repo)
|
||||||
@@ -108,7 +108,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
},
|
},
|
||||||
responseBody: "{}",
|
responseBody: "{}",
|
||||||
responseCode: 200,
|
responseCode: 200,
|
||||||
requestBody: `{"tag_name":"2.0.0","name":"title","ref":"master","description":"content"}`,
|
requestBody: `{"tag_name":"v2.0.0","name":"title","ref":"master","description":"content"}`,
|
||||||
valid: true,
|
valid: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -132,7 +132,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
},
|
},
|
||||||
responseBody: "{}",
|
responseBody: "{}",
|
||||||
responseCode: 500,
|
responseCode: 500,
|
||||||
requestBody: `{"tag_name":"2.0.0","name":"title","ref":"master","description":"content"}`,
|
requestBody: `{"tag_name":"v2.0.0","name":"title","ref":"master","description":"content"}`,
|
||||||
valid: false,
|
valid: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -157,7 +157,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
},
|
},
|
||||||
responseCode: 400,
|
responseCode: 400,
|
||||||
responseBody: "{}",
|
responseBody: "{}",
|
||||||
requestBody: `{"tag_name":"2.0.0","name":"title","ref":"master","description":"content"}`,
|
requestBody: `{"tag_name":"v2.0.0","name":"title","ref":"master","description":"content"}`,
|
||||||
valid: false,
|
valid: false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@ func TestCreateRelease(t *testing.T) {
|
|||||||
}
|
}
|
||||||
os.Setenv("GITLAB_ACCESS_TOKEN", "aToken")
|
os.Setenv("GITLAB_ACCESS_TOKEN", "aToken")
|
||||||
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
||||||
client, err := gitlab.New(&testObject.config)
|
client, err := gitlab.New(&testObject.config, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
err = client.CreateRelease(testObject.releaseVersion, testObject.generatedChangelog)
|
err = client.CreateRelease(testObject.releaseVersion, testObject.generatedChangelog)
|
||||||
@@ -317,7 +317,7 @@ func TestUploadAssets(t *testing.T) {
|
|||||||
}
|
}
|
||||||
os.Setenv("GITLAB_ACCESS_TOKEN", "aToken")
|
os.Setenv("GITLAB_ACCESS_TOKEN", "aToken")
|
||||||
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
defer os.Unsetenv("GITLAB_ACCESS_TOKEN")
|
||||||
client, err := gitlab.New(&testObject.config)
|
client, err := gitlab.New(&testObject.config, false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
client.Release = "1.0.0"
|
client.Release = "1.0.0"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package releaser
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
||||||
|
"github.com/Nightapes/go-semantic-release/internal/releaser/git"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/releaser/github"
|
"github.com/Nightapes/go-semantic-release/internal/releaser/github"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/releaser/gitlab"
|
"github.com/Nightapes/go-semantic-release/internal/releaser/gitlab"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/shared"
|
"github.com/Nightapes/go-semantic-release/internal/shared"
|
||||||
@@ -14,33 +16,37 @@ import (
|
|||||||
// Releasers struct type
|
// Releasers struct type
|
||||||
type Releasers struct {
|
type Releasers struct {
|
||||||
config *config.ReleaseConfig
|
config *config.ReleaseConfig
|
||||||
|
git *gitutil.GitUtil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Releaser interface for providers
|
// Releaser interface for providers
|
||||||
type Releaser interface {
|
type Releaser interface {
|
||||||
ValidateConfig() error
|
|
||||||
CreateRelease(*shared.ReleaseVersion, *shared.GeneratedChangelog) error
|
CreateRelease(*shared.ReleaseVersion, *shared.GeneratedChangelog) error
|
||||||
UploadAssets(repoDir string, assets []config.Asset) error
|
UploadAssets(repoDir string, assets []config.Asset) error
|
||||||
GetCommitURL() string
|
GetCommitURL() string
|
||||||
GetCompareURL(oldVersion, newVersion string) string
|
GetCompareURL(oldVersion, newVersion string) string
|
||||||
}
|
}
|
||||||
|
|
||||||
// New initialize a Relerser
|
// New initialize a releaser
|
||||||
func New(c *config.ReleaseConfig) *Releasers {
|
func New(c *config.ReleaseConfig, git *gitutil.GitUtil) *Releasers {
|
||||||
return &Releasers{
|
return &Releasers{
|
||||||
config: c,
|
config: c,
|
||||||
|
git: git,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetReleaser returns an initialized releaser
|
//GetReleaser returns an initialized releaser
|
||||||
func (r *Releasers) GetReleaser() (Releaser, error) {
|
func (r *Releasers) GetReleaser(checkConfig bool) (Releaser, error) {
|
||||||
switch r.config.Release {
|
switch r.config.Release {
|
||||||
case github.GITHUB:
|
case github.GITHUB:
|
||||||
log.Debugf("initialize new %s-provider", github.GITHUB)
|
log.Debugf("initialize new %s-provider", github.GITHUB)
|
||||||
return github.New(&r.config.GitHubProvider)
|
return github.New(&r.config.GitHubProvider, checkConfig)
|
||||||
case gitlab.GITLAB:
|
case gitlab.GITLAB:
|
||||||
log.Debugf("initialize new %s-provider", gitlab.GITLAB)
|
log.Debugf("initialize new %s-provider", gitlab.GITLAB)
|
||||||
return gitlab.New(&r.config.GitLabProvider)
|
return gitlab.New(&r.config.GitLabProvider, checkConfig)
|
||||||
|
case git.GITONLY:
|
||||||
|
log.Debugf("initialize new %s-provider", git.GITONLY)
|
||||||
|
return git.New(&r.config.GitProvider, r.git, checkConfig)
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("could not initialize a releaser from this type: %s", r.config.Release)
|
return nil, fmt.Errorf("could not initialize a releaser from this type: %s", r.config.Release)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package config
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
@@ -50,6 +51,20 @@ type GitLabProvider struct {
|
|||||||
AccessToken string
|
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
|
// ReleaseConfig struct
|
||||||
type ReleaseConfig struct {
|
type ReleaseConfig struct {
|
||||||
CommitFormat string `yaml:"commitFormat"`
|
CommitFormat string `yaml:"commitFormat"`
|
||||||
@@ -58,7 +73,9 @@ type ReleaseConfig struct {
|
|||||||
Release string `yaml:"release,omitempty"`
|
Release string `yaml:"release,omitempty"`
|
||||||
GitHubProvider GitHubProvider `yaml:"github,omitempty"`
|
GitHubProvider GitHubProvider `yaml:"github,omitempty"`
|
||||||
GitLabProvider GitLabProvider `yaml:"gitlab,omitempty"`
|
GitLabProvider GitLabProvider `yaml:"gitlab,omitempty"`
|
||||||
|
GitProvider GitProvider `yaml:"git,omitempty"`
|
||||||
Assets []Asset `yaml:"assets"`
|
Assets []Asset `yaml:"assets"`
|
||||||
|
Hooks Hooks `yaml:"hooks"`
|
||||||
ReleaseTitle string `yaml:"title"`
|
ReleaseTitle string `yaml:"title"`
|
||||||
IsPreRelease bool
|
IsPreRelease bool
|
||||||
}
|
}
|
||||||
@@ -71,13 +88,31 @@ func Read(configPath string) (*ReleaseConfig, error) {
|
|||||||
return &ReleaseConfig{}, err
|
return &ReleaseConfig{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var releaseConfig ReleaseConfig
|
log.Tracef("Found config %s", string(content))
|
||||||
err = yaml.Unmarshal(content, &releaseConfig)
|
releaseConfig := &ReleaseConfig{}
|
||||||
|
err = yaml.Unmarshal(content, releaseConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &ReleaseConfig{}, err
|
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)
|
assert.NoError(t, err)
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
|
||||||
|
os.Setenv("TEST_CONFIG", "value")
|
||||||
|
defer os.Unsetenv("TEST_CONFIG")
|
||||||
|
|
||||||
completePath := path.Join(path.Dir(dir), ".release.yml")
|
completePath := path.Join(path.Dir(dir), ".release.yml")
|
||||||
content := []byte(`
|
content := []byte(`
|
||||||
commitFormat: angular
|
commitFormat: angular
|
||||||
@@ -53,9 +56,12 @@ branch:
|
|||||||
add_git_releases: alpha
|
add_git_releases: alpha
|
||||||
changelog:
|
changelog:
|
||||||
printAll: false
|
printAll: false
|
||||||
template: ''
|
template: ""
|
||||||
templatePath: ''
|
templatePath: '${TEST_CONFIG}'
|
||||||
release: 'github'
|
release: 'github'
|
||||||
|
hooks:
|
||||||
|
preRelease:
|
||||||
|
- "Test hook ${RELEASE_VERSION}"
|
||||||
assets:
|
assets:
|
||||||
- name: ./build/go-semantic-release
|
- name: ./build/go-semantic-release
|
||||||
compress: false
|
compress: false
|
||||||
@@ -76,13 +82,18 @@ github:
|
|||||||
Changelog: config.ChangelogConfig{
|
Changelog: config.ChangelogConfig{
|
||||||
PrintAll: false,
|
PrintAll: false,
|
||||||
TemplateTitle: "",
|
TemplateTitle: "",
|
||||||
TemplatePath: ""},
|
TemplatePath: "value"},
|
||||||
Release: "github",
|
Release: "github",
|
||||||
GitHubProvider: config.GitHubProvider{
|
GitHubProvider: config.GitHubProvider{
|
||||||
Repo: "go-semantic-release",
|
Repo: "go-semantic-release",
|
||||||
User: "nightapes",
|
User: "nightapes",
|
||||||
CustomURL: "",
|
CustomURL: "",
|
||||||
AccessToken: ""},
|
AccessToken: ""},
|
||||||
|
Hooks: config.Hooks{
|
||||||
|
PreRelease: []string{
|
||||||
|
"Test hook ${RELEASE_VERSION}",
|
||||||
|
},
|
||||||
|
},
|
||||||
Assets: []config.Asset{
|
Assets: []config.Asset{
|
||||||
config.Asset{
|
config.Asset{
|
||||||
Name: "./build/go-semantic-release",
|
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/changelog"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/ci"
|
"github.com/Nightapes/go-semantic-release/internal/ci"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
"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"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/releaser/util"
|
"github.com/Nightapes/go-semantic-release/internal/releaser/util"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/shared"
|
"github.com/Nightapes/go-semantic-release/internal/shared"
|
||||||
@@ -26,10 +27,11 @@ type SemanticRelease struct {
|
|||||||
calculator *calculator.Calculator
|
calculator *calculator.Calculator
|
||||||
releaser releaser.Releaser
|
releaser releaser.Releaser
|
||||||
repository string
|
repository string
|
||||||
|
checkConfig bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// New SemanticRelease struct
|
// 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)
|
util, err := gitutil.New(repository)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -40,7 +42,11 @@ func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) {
|
|||||||
return nil, err
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -51,13 +57,14 @@ func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) {
|
|||||||
releaser: releaser,
|
releaser: releaser,
|
||||||
analyzer: analyzer,
|
analyzer: analyzer,
|
||||||
repository: repository,
|
repository: repository,
|
||||||
|
checkConfig: checkConfig,
|
||||||
calculator: calculator.New(),
|
calculator: calculator.New(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetCIProvider result with ci config
|
//GetCIProvider result with ci config
|
||||||
func (s *SemanticRelease) GetCIProvider() (*ci.ProviderConfig, error) {
|
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
|
// 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)
|
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 {
|
func (s *SemanticRelease) Release(provider *ci.ProviderConfig, force bool) error {
|
||||||
|
|
||||||
if provider.IsPR {
|
if provider.IsPR {
|
||||||
@@ -207,27 +214,31 @@ func (s *SemanticRelease) Release(provider *ci.ProviderConfig, force bool) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
generatedChanglog, err := s.GetChangelog(releaseVersion)
|
hook := hooks.New(s.config, releaseVersion)
|
||||||
|
|
||||||
|
generatedChangelog, err := s.GetChangelog(releaseVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("Could not get changelog")
|
log.Debugf("Could not get changelog")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
releaser, err := releaser.New(s.config).GetReleaser()
|
err = hook.PreRelease()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Debugf("Error during pre release hook")
|
||||||
return err
|
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 {
|
if err != nil {
|
||||||
return err
|
log.Debugf("Error during post release hook")
|
||||||
}
|
|
||||||
|
|
||||||
if err = releaser.CreateRelease(releaseVersion, generatedChanglog); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err = releaser.UploadAssets(s.repository, s.config.Assets); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user