From ab14ab397cff7ceddb751020b7f207acf1ca9aee Mon Sep 17 00:00:00 2001 From: Nightapes Date: Tue, 16 Jul 2019 20:42:40 +0200 Subject: [PATCH] refactor(ci): improve testing --- internal/ci/ci.go | 19 ++++++++++++++++--- internal/ci/ci_test.go | 12 +----------- internal/ci/git.go | 5 ++--- internal/ci/travis.go | 17 ++++++++--------- pkg/semanticrelease/semantic-release.go | 6 +++--- 5 files changed, 30 insertions(+), 29 deletions(-) diff --git a/internal/ci/ci.go b/internal/ci/ci.go index 52173e5..124e9a9 100644 --- a/internal/ci/ci.go +++ b/internal/ci/ci.go @@ -2,8 +2,11 @@ package ci import ( "fmt" + "github.com/Nightapes/go-semantic-release/internal/gitutil" log "github.com/sirupsen/logrus" + "os" + "strings" ) //ProviderConfig struct @@ -21,11 +24,21 @@ type ProviderConfig struct { //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 -func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) { +func GetCIProvider(gitUtil *gitutil.GitUtil, envs map[string]string) (*ProviderConfig, error) { services := []Service{ Travis{}, @@ -33,7 +46,7 @@ func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) { } for _, service := range services { - config, err := service.detect() + config, err := service.detect(envs) if err == nil { log.Infof("Found CI: %s", config.Name) return config, nil diff --git a/internal/ci/ci_test.go b/internal/ci/ci_test.go index 38f948f..b1e46bb 100644 --- a/internal/ci/ci_test.go +++ b/internal/ci/ci_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/assert" "gopkg.in/src-d/go-git.v4" "gopkg.in/src-d/go-git.v4/storage/memory" - "os" ) func TestSum(t *testing.T) { @@ -69,18 +68,9 @@ func TestSum(t *testing.T) { } for _, config := range testConfigs { - - for key, value := range config.envs { - os.Setenv(key, value) - } - - provider, err := ci.GetCIProvider(gitUtilInMemory) + provider, err := ci.GetCIProvider(gitUtilInMemory, 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.result, provider, "Service %s should have provider", config.service) - - for key, _ := range config.envs { - os.Unsetenv(key) - } } } diff --git a/internal/ci/git.go b/internal/ci/git.go index a531e86..075cb83 100644 --- a/internal/ci/git.go +++ b/internal/ci/git.go @@ -3,7 +3,6 @@ package ci import ( "fmt" "github.com/Nightapes/go-semantic-release/internal/gitutil" - "os" ) //Git struct @@ -12,9 +11,9 @@ type Git struct { } //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") } diff --git a/internal/ci/travis.go b/internal/ci/travis.go index f069c59..7feed2e 100644 --- a/internal/ci/travis.go +++ b/internal/ci/travis.go @@ -3,22 +3,21 @@ package ci import ( "fmt" log "github.com/sirupsen/logrus" - "os" ) //Travis struct type Travis struct{} //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") } isPR := false - value := os.Getenv("TRAVIS_PULL_REQUEST") + value := envs["TRAVIS_PULL_REQUEST"] pr := "" if value == "false" { @@ -31,12 +30,12 @@ func (t Travis) detect() (*ProviderConfig, error) { return &ProviderConfig{ Service: "travis", Name: "Travis CI", - Commit: os.Getenv("TRAVIS_COMMIT"), - Tag: os.Getenv("TRAVIS_TAG"), - BuildURL: os.Getenv("TRAVIS_BUILD_WEB_URL"), - Branch: os.Getenv("TRAVIS_BRANCH"), + Commit: envs["TRAVIS_COMMIT"], + Tag: envs["TRAVIS_TAG"], + BuildURL: envs["TRAVIS_BUILD_WEB_URL"], + Branch: envs["TRAVIS_BRANCH"], IsPR: isPR, PR: pr, - PRBranch: os.Getenv("TRAVIS_PULL_REQUEST_BRANCH"), + PRBranch: envs["TRAVIS_PULL_REQUEST_BRANCH"], }, nil } diff --git a/pkg/semanticrelease/semantic-release.go b/pkg/semanticrelease/semantic-release.go index a2b3507..b5a96b1 100644 --- a/pkg/semanticrelease/semantic-release.go +++ b/pkg/semanticrelease/semantic-release.go @@ -54,7 +54,7 @@ func New(c *config.ReleaseConfig, repository string) (*SemanticRelease, error) { // GetNextVersion from .version or calculate new from commits 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 { fakeVersion, _ := semver.NewVersion("0.0.0-fake.0") @@ -161,7 +161,7 @@ func (s *SemanticRelease) SetVersion(version string) error { return err } - provider, err := ci.GetCIProvider(s.gitutil) + provider, err := ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs()) if err != nil { 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 func (s *SemanticRelease) Release(force bool) error { - provider, err := ci.GetCIProvider(s.gitutil) + provider, err := ci.GetCIProvider(s.gitutil, ci.ReadAllEnvs()) if err != nil { log.Debugf("Will not perform a new release. Could not find CI Provider")