From 141f297c8776190996eb1c5b4758fcabf05736f9 Mon Sep 17 00:00:00 2001 From: Aaron Guise Date: Mon, 1 Apr 2024 23:41:26 +1300 Subject: [PATCH] feat(ci): Added woodpecker-ci provider :zap: --- internal/ci/ci.go | 9 +++++---- internal/ci/woodpecker.go | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 internal/ci/woodpecker.go diff --git a/internal/ci/ci.go b/internal/ci/ci.go index 1074aaf..2ac0a97 100644 --- a/internal/ci/ci.go +++ b/internal/ci/ci.go @@ -10,7 +10,7 @@ import ( log "github.com/sirupsen/logrus" ) -//ProviderConfig struct +// ProviderConfig struct type ProviderConfig struct { IsPR bool PR string @@ -23,12 +23,12 @@ type ProviderConfig struct { Name string } -//Service interface +// Service interface type Service interface { detect(envs map[string]string) (*ProviderConfig, error) } -//ReadAllEnvs as a map +// ReadAllEnvs as a map func ReadAllEnvs() map[string]string { envs := map[string]string{} for _, pair := range os.Environ() { @@ -38,13 +38,14 @@ func ReadAllEnvs() map[string]string { return envs } -//GetCIProvider get provider +// GetCIProvider get provider func GetCIProvider(gitUtil *gitutil.GitUtil, configCheck bool, envs map[string]string) (*ProviderConfig, error) { services := []Service{ Travis{}, GithubActions{}, GitlabCI{}, + WoodpeckerCI{}, Git{gitUtil: gitUtil}, // Git must be the last option to check } diff --git a/internal/ci/woodpecker.go b/internal/ci/woodpecker.go new file mode 100644 index 0000000..66ad628 --- /dev/null +++ b/internal/ci/woodpecker.go @@ -0,0 +1,42 @@ +package ci + +import ( + "fmt" + + log "github.com/sirupsen/logrus" +) + +// Travis struct +type WoodpeckerCI struct{} + +// Detect if on travis +func (t WoodpeckerCI) detect(envs map[string]string) (*ProviderConfig, error) { + + if envs["CI"] != "woodpecker" { + return nil, fmt.Errorf("not running on woodpecker") + } + + isPR := false + + value := envs["CI_COMMIT_PULL_REQUEST"] + pr := "" + + if value == "" { + log.Debugf("CI_COMMIT_PULL_REQUEST=%s, not running on pr", value) + } else { + isPR = true + pr = value + } + + return &ProviderConfig{ + Service: "woodpecker", + Name: "Woodpecker CI", + Commit: envs["CI_COMMIT_SHA"], + Tag: envs["CI_COMMIT_TAG"], + BuildURL: envs["CI_PIPELINE_URL"], + Branch: envs["CI_COMMIT_BRANCH"], + IsPR: isPR, + PR: pr, + PRBranch: envs["CI_COMMIT_SOURCE_BRANCH"], + }, nil +}