You've already forked go-semantic-release
feat(ci): check if running on a ci, else skip release
This commit is contained in:
44
internal/ci/ci.go
Normal file
44
internal/ci/ci.go
Normal 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
38
internal/ci/git.go
Normal 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
39
internal/ci/travis.go
Normal 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
|
||||
}
|
||||
@@ -100,7 +100,7 @@ func (g *GitUtil) GetLastVersion() (*semver.Version, string, error) {
|
||||
log.Debugf("Add tag %s", p.Name().Short())
|
||||
tags = append(tags, v)
|
||||
} else {
|
||||
log.Debugf("Found tag %s, but is not annotated, skip", err.Error())
|
||||
log.Debugf("Found tag, but is not annotated, skip")
|
||||
}
|
||||
} else {
|
||||
log.Debugf("Tag %s is not a valid version, skip", p.Name().Short())
|
||||
|
||||
Reference in New Issue
Block a user