refactor(ci): improve testing

This commit is contained in:
Nightapes
2019-07-16 20:42:40 +02:00
parent c86ad684c6
commit ab14ab397c
5 changed files with 30 additions and 29 deletions

View File

@@ -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

View File

@@ -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)
}
}
}

View File

@@ -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")
}

View File

@@ -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
}

View File

@@ -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")