You've already forked go-semantic-release
refactor(ci): improve testing
This commit is contained in:
@@ -2,8 +2,11 @@ package ci
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
//ProviderConfig struct
|
//ProviderConfig struct
|
||||||
@@ -21,11 +24,21 @@ type ProviderConfig struct {
|
|||||||
|
|
||||||
//Service interface
|
//Service interface
|
||||||
type Service interface {
|
type Service interface {
|
||||||
detect() (*ProviderConfig, error)
|
detect(envs map[string]string) (*ProviderConfig, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
//ReadAllEnvs as a map
|
||||||
|
func ReadAllEnvs() map[string]string {
|
||||||
|
envs := map[string]string{}
|
||||||
|
for _, pair := range os.Environ() {
|
||||||
|
splitted := strings.SplitN(pair, "=", 2)
|
||||||
|
envs[splitted[0]] = splitted[1]
|
||||||
|
}
|
||||||
|
return envs
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetCIProvider get provider
|
//GetCIProvider get provider
|
||||||
func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) {
|
func GetCIProvider(gitUtil *gitutil.GitUtil, envs map[string]string) (*ProviderConfig, error) {
|
||||||
|
|
||||||
services := []Service{
|
services := []Service{
|
||||||
Travis{},
|
Travis{},
|
||||||
@@ -33,7 +46,7 @@ func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, service := range services {
|
for _, service := range services {
|
||||||
config, err := service.detect()
|
config, err := service.detect(envs)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Infof("Found CI: %s", config.Name)
|
log.Infof("Found CI: %s", config.Name)
|
||||||
return config, nil
|
return config, nil
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"gopkg.in/src-d/go-git.v4"
|
"gopkg.in/src-d/go-git.v4"
|
||||||
"gopkg.in/src-d/go-git.v4/storage/memory"
|
"gopkg.in/src-d/go-git.v4/storage/memory"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSum(t *testing.T) {
|
func TestSum(t *testing.T) {
|
||||||
@@ -69,18 +68,9 @@ func TestSum(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, config := range testConfigs {
|
for _, config := range testConfigs {
|
||||||
|
provider, err := ci.GetCIProvider(gitUtilInMemory, config.envs)
|
||||||
for key, value := range config.envs {
|
|
||||||
os.Setenv(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
provider, err := ci.GetCIProvider(gitUtilInMemory)
|
|
||||||
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)
|
||||||
|
|
||||||
for key, _ := range config.envs {
|
|
||||||
os.Unsetenv(key)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package ci
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//Git struct
|
//Git struct
|
||||||
@@ -12,9 +11,9 @@ type Git struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Detect if on Git
|
//Detect if on Git
|
||||||
func (t Git) detect() (*ProviderConfig, error) {
|
func (t Git) detect(envs map[string]string) (*ProviderConfig, error) {
|
||||||
|
|
||||||
if _, exists := os.LookupEnv("CI"); !exists {
|
if _, exists := envs["CI"]; !exists {
|
||||||
return nil, fmt.Errorf("running not git only")
|
return nil, fmt.Errorf("running not git only")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,22 +3,21 @@ package ci
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"os"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//Travis struct
|
//Travis struct
|
||||||
type Travis struct{}
|
type Travis struct{}
|
||||||
|
|
||||||
//Detect if on travis
|
//Detect if on travis
|
||||||
func (t Travis) detect() (*ProviderConfig, error) {
|
func (t Travis) detect(envs map[string]string) (*ProviderConfig, error) {
|
||||||
|
|
||||||
if _, exists := os.LookupEnv("TRAVIS"); !exists {
|
if _, exists := envs["TRAVIS"]; !exists {
|
||||||
return nil, fmt.Errorf("not running on travis")
|
return nil, fmt.Errorf("not running on travis")
|
||||||
}
|
}
|
||||||
|
|
||||||
isPR := false
|
isPR := false
|
||||||
|
|
||||||
value := os.Getenv("TRAVIS_PULL_REQUEST")
|
value := envs["TRAVIS_PULL_REQUEST"]
|
||||||
pr := ""
|
pr := ""
|
||||||
|
|
||||||
if value == "false" {
|
if value == "false" {
|
||||||
@@ -31,12 +30,12 @@ func (t Travis) detect() (*ProviderConfig, error) {
|
|||||||
return &ProviderConfig{
|
return &ProviderConfig{
|
||||||
Service: "travis",
|
Service: "travis",
|
||||||
Name: "Travis CI",
|
Name: "Travis CI",
|
||||||
Commit: os.Getenv("TRAVIS_COMMIT"),
|
Commit: envs["TRAVIS_COMMIT"],
|
||||||
Tag: os.Getenv("TRAVIS_TAG"),
|
Tag: envs["TRAVIS_TAG"],
|
||||||
BuildURL: os.Getenv("TRAVIS_BUILD_WEB_URL"),
|
BuildURL: envs["TRAVIS_BUILD_WEB_URL"],
|
||||||
Branch: os.Getenv("TRAVIS_BRANCH"),
|
Branch: envs["TRAVIS_BRANCH"],
|
||||||
IsPR: isPR,
|
IsPR: isPR,
|
||||||
PR: pr,
|
PR: pr,
|
||||||
PRBranch: os.Getenv("TRAVIS_PULL_REQUEST_BRANCH"),
|
PRBranch: envs["TRAVIS_PULL_REQUEST_BRANCH"],
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) {
|
|||||||
|
|
||||||
// GetNextVersion from .version or calculate new from commits
|
// GetNextVersion from .version or calculate new from commits
|
||||||
func (s *SemanticRelease) GetNextVersion(force bool) (*shared.ReleaseVersion, error) {
|
func (s *SemanticRelease) GetNextVersion(force bool) (*shared.ReleaseVersion, error) {
|
||||||
provider, err := ci.GetCIProvider(s.gitutil)
|
provider, err := ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fakeVersion, _ := semver.NewVersion("0.0.0-fake.0")
|
fakeVersion, _ := semver.NewVersion("0.0.0-fake.0")
|
||||||
@@ -161,7 +161,7 @@ func (s *SemanticRelease) SetVersion(version string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
provider, err := ci.GetCIProvider(s.gitutil)
|
provider, err := ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("will not set version. Could not find CI Provider, if running locally, set env CI=true")
|
return fmt.Errorf("will not set version. Could not find CI Provider, if running locally, set env CI=true")
|
||||||
@@ -217,7 +217,7 @@ func (s *SemanticRelease) WriteChangeLog(changelogContent, file string) error {
|
|||||||
// Release pusblish release to provider
|
// Release pusblish release to provider
|
||||||
func (s *SemanticRelease) Release(force bool) error {
|
func (s *SemanticRelease) Release(force bool) error {
|
||||||
|
|
||||||
provider, err := ci.GetCIProvider(s.gitutil)
|
provider, err := ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Debugf("Will not perform a new release. Could not find CI Provider")
|
log.Debugf("Will not perform a new release. Could not find CI Provider")
|
||||||
|
|||||||
Reference in New Issue
Block a user