2019-07-15 21:20:44 +02:00
|
|
|
package ci
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
2019-07-16 20:42:40 +02:00
|
|
|
|
|
|
|
|
"os"
|
|
|
|
|
"strings"
|
2019-09-15 20:13:17 +02:00
|
|
|
|
|
|
|
|
"github.com/Nightapes/go-semantic-release/internal/gitutil"
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
2019-07-15 21:20:44 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
//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 {
|
2019-07-16 20:42:40 +02:00
|
|
|
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
|
2019-07-15 21:20:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//GetCIProvider get provider
|
2019-07-16 20:42:40 +02:00
|
|
|
func GetCIProvider(gitUtil *gitutil.GitUtil, envs map[string]string) (*ProviderConfig, error) {
|
2019-07-15 21:20:44 +02:00
|
|
|
|
|
|
|
|
services := []Service{
|
|
|
|
|
Travis{},
|
2019-08-21 21:39:05 +02:00
|
|
|
GithubActions{},
|
2019-09-15 20:13:17 +02:00
|
|
|
GitlabCI{},
|
2019-07-15 21:20:44 +02:00
|
|
|
Git{gitUtil: gitUtil}, // GIt must be the last option to check
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _, service := range services {
|
2019-07-16 20:42:40 +02:00
|
|
|
config, err := service.detect(envs)
|
2019-07-15 21:20:44 +02:00
|
|
|
if err == nil {
|
|
|
|
|
log.Infof("Found CI: %s", config.Name)
|
2019-09-03 22:18:13 +02:00
|
|
|
log.Tracef("Found CI config: %+v", config)
|
2019-07-15 21:20:44 +02:00
|
|
|
return config, nil
|
|
|
|
|
}
|
2019-07-24 22:14:03 +02:00
|
|
|
log.Debugf("%s", err.Error())
|
2019-07-15 21:20:44 +02:00
|
|
|
}
|
|
|
|
|
return nil, fmt.Errorf("could not find any CI, if running locally set env CI=true")
|
|
|
|
|
}
|