feat(ci): check if running on a ci, else skip release

This commit is contained in:
Nightapes
2019-07-15 21:20:44 +02:00
parent e3b54c63b0
commit 13afcea8a0
5 changed files with 169 additions and 35 deletions

44
internal/ci/ci.go Normal file
View File

@@ -0,0 +1,44 @@
package ci
import (
"fmt"
"github.com/Nightapes/go-semantic-release/internal/gitutil"
log "github.com/sirupsen/logrus"
)
//ProviderConfig struct
type ProviderConfig struct {
IsPR bool
PR string
PRBranch string
Branch string
Tag string
Commit string
BuildURL string
Service string
Name string
}
//Service interface
type Service interface {
Detect() (*ProviderConfig, error)
}
//GetCIProvider get provider
func GetCIProvider(gitUtil *gitutil.GitUtil) (*ProviderConfig, error) {
services := []Service{
Travis{},
Git{gitUtil: gitUtil}, // GIt must be the last option to check
}
for _, service := range services {
config, err := service.Detect()
if err == nil {
log.Infof("Found CI: %s", config.Name)
return config, nil
}
log.Debugf("%s", err.Error())
}
return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true")
}

38
internal/ci/git.go Normal file
View File

@@ -0,0 +1,38 @@
package ci
import (
"fmt"
"github.com/Nightapes/go-semantic-release/internal/gitutil"
"os"
)
//Git struct
type Git struct {
gitUtil *gitutil.GitUtil
}
//Detect if on Git
func (t Git) Detect() (*ProviderConfig, error) {
if _, exists := os.LookupEnv("CI"); !exists {
return nil, fmt.Errorf("running not git only")
}
hash, err := t.gitUtil.GetHash()
if err != nil {
return nil, err
}
currentBranch, err := t.gitUtil.GetBranch()
if err != nil {
return nil, err
}
return &ProviderConfig{
Service: "Git",
Name: "Git only",
Commit: hash,
Branch: currentBranch,
IsPR: false,
}, nil
}

39
internal/ci/travis.go Normal file
View File

@@ -0,0 +1,39 @@
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) {
if _, exists := os.LookupEnv("TRAVIS"); !exists {
return nil, fmt.Errorf("not running on travis")
}
isPR := false
value := os.Getenv("TRAVIS_PULL_REQUEST")
if value == "false" {
log.Debugf("TRAVIS_PULL_REQUEST=%s, not running on pr", value)
} else {
isPR = true
}
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"),
IsPR: isPR,
PRBranch: os.Getenv("TRAVIS_PULL_REQUEST_BRANCH"),
}, nil
}