410 lines
8.2 KiB
Go
410 lines
8.2 KiB
Go
package ci_ingo
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
var environment = map[string]string{
|
|
"APPVEYOR": "true",
|
|
"APPVEYOR_X": "1",
|
|
"CODEBUILD": "",
|
|
}
|
|
|
|
func TestSimpleMatcher(t *testing.T) {
|
|
params := []struct {
|
|
name string
|
|
envvar string
|
|
expect bool
|
|
}{
|
|
{"appveyor present", "APPVEYOR", true},
|
|
{"codebuild present", "CODEBUILD", true},
|
|
{"travis not present", "TRAVIS", false},
|
|
}
|
|
|
|
for _, p := range params {
|
|
t.Run(p.name, func(t *testing.T) {
|
|
matcher := simpleEnvMatcher{p.envvar}
|
|
res := matcher.matchEnv(environment)
|
|
assert.Equal(t, p.expect, res)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestAnyMatcher(t *testing.T) {
|
|
params := []struct {
|
|
name string
|
|
envvars []string
|
|
expect bool
|
|
}{
|
|
{"appveyor present", []string{"APPVEYOR_X", "APPVEYOR"}, true},
|
|
{"codebuild present", []string{"CODEBUILD", "CODEBUILD_X"}, true},
|
|
{"travis not present", []string{"TRAVIS_X", "TRAVIS"}, false},
|
|
}
|
|
|
|
for _, p := range params {
|
|
t.Run(p.name, func(t *testing.T) {
|
|
matcher := anyEnvMatcher{p.envvars}
|
|
res := matcher.matchEnv(environment)
|
|
assert.Equal(t, p.expect, res)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestAllMatcher(t *testing.T) {
|
|
params := []struct {
|
|
name string
|
|
envvars []string
|
|
expect bool
|
|
}{
|
|
{"appveyor present", []string{"APPVEYOR_X", "APPVEYOR"}, true},
|
|
{"codebuild not present", []string{"CODEBUILD", "CODEBUILD_X"}, false},
|
|
{"travis not present", []string{"TRAVIS_X", "TRAVIS"}, false},
|
|
}
|
|
|
|
for _, p := range params {
|
|
t.Run(p.name, func(t *testing.T) {
|
|
matcher := allEnvMatcher{p.envvars}
|
|
res := matcher.matchEnv(environment)
|
|
assert.Equal(t, p.expect, res)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNeMatcher(t *testing.T) {
|
|
params := []struct {
|
|
name string
|
|
envvar string
|
|
cmp string
|
|
expect bool
|
|
}{
|
|
{"appveyor present", "APPVEYOR", "false", true},
|
|
{"codebuild not present", "CODEBUILD", "", false},
|
|
{"travis not present", "TRAVIS", "true", false},
|
|
}
|
|
|
|
for _, p := range params {
|
|
t.Run(p.name, func(t *testing.T) {
|
|
matcher := neEnvMatcher{p.envvar, p.cmp}
|
|
res := matcher.matchEnv(environment)
|
|
assert.Equal(t, p.expect, res)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetCI(t *testing.T) {
|
|
params := []struct {
|
|
name string
|
|
envvars map[string]string
|
|
ciName string
|
|
ciConstant string
|
|
isPR bool
|
|
}{
|
|
{
|
|
"AppVeyor - PR",
|
|
map[string]string{"APPVEYOR": "true", "APPVEYOR_PULL_REQUEST_NUMBER": "42"},
|
|
"AppVeyor", "APPVEYOR", true,
|
|
},
|
|
{
|
|
"AppVeyor - No PR",
|
|
map[string]string{"APPVEYOR": "true"},
|
|
"AppVeyor", "APPVEYOR", false,
|
|
},
|
|
{
|
|
"Azure Pipelines - PR",
|
|
map[string]string{
|
|
"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/Contoso",
|
|
"SYSTEM_PULLREQUEST_PULLREQUESTID": "42",
|
|
},
|
|
"Azure Pipelines", "AZURE_PIPELINES", true,
|
|
},
|
|
{
|
|
"Azure Pipelines - No PR",
|
|
map[string]string{
|
|
"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI": "https://dev.azure.com/Contoso",
|
|
},
|
|
"Azure Pipelines", "AZURE_PIPELINES", false,
|
|
},
|
|
{
|
|
"Bitbucket Pipelines - PR",
|
|
map[string]string{
|
|
"BITBUCKET_COMMIT": "true",
|
|
"BITBUCKET_PR_ID": "42",
|
|
},
|
|
"Bitbucket Pipelines", "BITBUCKET", true,
|
|
},
|
|
{
|
|
"Bitbucket Pipelines - No PR",
|
|
map[string]string{
|
|
"BITBUCKET_COMMIT": "true",
|
|
},
|
|
"Bitbucket Pipelines", "BITBUCKET", false,
|
|
},
|
|
{
|
|
"Buildkite - PR",
|
|
map[string]string{
|
|
"BUILDKITE": "true",
|
|
"BUILDKITE_PULL_REQUEST": "42",
|
|
},
|
|
"Buildkite", "BUILDKITE", true,
|
|
},
|
|
{
|
|
"Buildkite - No PR",
|
|
map[string]string{
|
|
"BUILDKITE": "true",
|
|
"BUILDKITE_PULL_REQUEST": "false",
|
|
},
|
|
"Buildkite", "BUILDKITE", false,
|
|
},
|
|
{
|
|
"CircleCI - PR",
|
|
map[string]string{
|
|
"CIRCLECI": "true",
|
|
"CIRCLE_PULL_REQUEST": "42",
|
|
},
|
|
"CircleCI", "CIRCLE", true,
|
|
},
|
|
{
|
|
"CircleCI - No PR",
|
|
map[string]string{
|
|
"CIRCLECI": "true",
|
|
},
|
|
"CircleCI", "CIRCLE", false,
|
|
},
|
|
{
|
|
"Cirrus CI - PR",
|
|
map[string]string{
|
|
"CIRRUS_CI": "true",
|
|
"CIRRUS_PR": "42",
|
|
},
|
|
"Cirrus CI", "CIRRUS", true,
|
|
},
|
|
{
|
|
"Cirrus CI - No PR",
|
|
map[string]string{
|
|
"CIRRUS_CI": "true",
|
|
},
|
|
"Cirrus CI", "CIRRUS", false,
|
|
},
|
|
{
|
|
"Codefresh - PR",
|
|
map[string]string{
|
|
"CF_BUILD_ID": "true",
|
|
"CF_PULL_REQUEST_ID": "42",
|
|
},
|
|
"Codefresh", "CODEFRESH", true,
|
|
},
|
|
{
|
|
"Codefresh - No PR",
|
|
map[string]string{
|
|
"CF_BUILD_ID": "true",
|
|
},
|
|
"Codefresh", "CODEFRESH", false,
|
|
},
|
|
{
|
|
"LayerCI - PR",
|
|
map[string]string{
|
|
"LAYERCI": "true",
|
|
"LAYERCI_PULL_REQUEST": "https://link-to-pr/5",
|
|
},
|
|
"LayerCI", "LAYERCI", true,
|
|
},
|
|
{
|
|
"LayerCI - No PR",
|
|
map[string]string{
|
|
"LAYERCI": "true",
|
|
},
|
|
"LayerCI", "LAYERCI", false,
|
|
},
|
|
{
|
|
"Appcircle",
|
|
map[string]string{"AC_APPCIRCLE": "true"},
|
|
"Appcircle", "APPCIRCLE", false,
|
|
},
|
|
{
|
|
"Render - PR",
|
|
map[string]string{
|
|
"RENDER": "true",
|
|
"IS_PULL_REQUEST": "true",
|
|
},
|
|
"Render", "RENDER", true,
|
|
},
|
|
{
|
|
"Render - No PR",
|
|
map[string]string{
|
|
"RENDER": "true",
|
|
"IS_PULL_REQUEST": "false",
|
|
},
|
|
"Render", "RENDER", false,
|
|
},
|
|
{
|
|
"Semaphore - PR",
|
|
map[string]string{
|
|
"SEMAPHORE": "true",
|
|
"PULL_REQUEST_NUMBER": "42",
|
|
},
|
|
"Semaphore", "SEMAPHORE", true,
|
|
},
|
|
{
|
|
"Semaphore - No PR",
|
|
map[string]string{
|
|
"SEMAPHORE": "true",
|
|
},
|
|
"Semaphore", "SEMAPHORE", false,
|
|
},
|
|
{
|
|
"Shippable - PR",
|
|
map[string]string{
|
|
"SHIPPABLE": "true",
|
|
"IS_PULL_REQUEST": "true",
|
|
},
|
|
"Shippable", "SHIPPABLE", true,
|
|
},
|
|
{
|
|
"Shippable - No PR",
|
|
map[string]string{
|
|
"SHIPPABLE": "true",
|
|
"IS_PULL_REQUEST": "false",
|
|
},
|
|
"Shippable", "SHIPPABLE", false,
|
|
},
|
|
{
|
|
"Solano CI - PR",
|
|
map[string]string{
|
|
"TDDIUM": "true",
|
|
"TDDIUM_PR_ID": "42",
|
|
},
|
|
"Solano CI", "SOLANO", true,
|
|
},
|
|
{
|
|
"Solano CI - No PR",
|
|
map[string]string{
|
|
"TDDIUM": "true",
|
|
},
|
|
"Solano CI", "SOLANO", false,
|
|
},
|
|
{
|
|
"Travis CI - PR",
|
|
map[string]string{
|
|
"TRAVIS": "true",
|
|
"TRAVIS_PULL_REQUEST": "42",
|
|
},
|
|
"Travis CI", "TRAVIS", true,
|
|
},
|
|
{
|
|
"Travis CI - No PR",
|
|
map[string]string{
|
|
"TRAVIS": "true",
|
|
"TRAVIS_PULL_REQUEST": "false",
|
|
},
|
|
"Travis CI", "TRAVIS", false,
|
|
},
|
|
{
|
|
"Netlify CI - PR",
|
|
map[string]string{
|
|
"NETLIFY": "true",
|
|
"PULL_REQUEST": "true",
|
|
},
|
|
"Netlify CI", "NETLIFY", true,
|
|
},
|
|
{
|
|
"Netlify CI - No PR",
|
|
map[string]string{
|
|
"NETLIFY": "true",
|
|
"PULL_REQUEST": "false",
|
|
},
|
|
"Netlify CI", "NETLIFY", false,
|
|
},
|
|
{
|
|
"Vercel",
|
|
map[string]string{"NOW_BUILDER": "1"},
|
|
"Vercel", "VERCEL", false,
|
|
},
|
|
{
|
|
"Nevercode - PR",
|
|
map[string]string{
|
|
"NEVERCODE": "true",
|
|
"NEVERCODE_PULL_REQUEST": "true",
|
|
},
|
|
"Nevercode", "NEVERCODE", true,
|
|
},
|
|
{
|
|
"Nevercode - No PR",
|
|
map[string]string{
|
|
"NEVERCODE": "true",
|
|
"NEVERCODE_PULL_REQUEST": "false",
|
|
},
|
|
"Nevercode", "NEVERCODE", false,
|
|
},
|
|
{
|
|
"GitHub Actions - PR",
|
|
map[string]string{
|
|
"GITHUB_ACTIONS": "true",
|
|
"GITHUB_EVENT_NAME": "pull_request",
|
|
},
|
|
"GitHub Actions", "GITHUB_ACTIONS", true,
|
|
},
|
|
{
|
|
"GitHub Actions - No PR",
|
|
map[string]string{
|
|
"GITHUB_ACTIONS": "true",
|
|
"GITHUB_EVENT_NAME": "push",
|
|
},
|
|
"GitHub Actions", "GITHUB_ACTIONS", false,
|
|
},
|
|
{
|
|
"Screwdriver - PR",
|
|
map[string]string{
|
|
"SCREWDRIVER": "true",
|
|
"SD_PULL_REQUEST": "1",
|
|
},
|
|
"Screwdriver", "SCREWDRIVER", true,
|
|
},
|
|
{
|
|
"Screwdriver - No PR",
|
|
map[string]string{
|
|
"SCREWDRIVER": "true",
|
|
"SD_PULL_REQUEST": "false",
|
|
},
|
|
"Screwdriver", "SCREWDRIVER", false,
|
|
},
|
|
{
|
|
"Visual Studio App Center",
|
|
map[string]string{"APPCENTER_BUILD_ID": "1"},
|
|
"Visual Studio App Center", "APPCENTER", false,
|
|
},
|
|
{
|
|
"Unknown CI",
|
|
map[string]string{"CI": "true"},
|
|
"Unknown CI", "CI", false,
|
|
},
|
|
}
|
|
|
|
for _, p := range params {
|
|
t.Run(p.name, func(t *testing.T) {
|
|
os.Clearenv()
|
|
|
|
for envvar, value := range p.envvars {
|
|
_ = os.Setenv(envvar, value)
|
|
}
|
|
|
|
ci := GetCI()
|
|
|
|
assert.True(t, IsCI())
|
|
assert.Equal(t, p.ciName, ci.Name)
|
|
assert.Equal(t, p.ciConstant, ci.Constant)
|
|
assert.Equal(t, p.isPR, ci.IsPR)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNoCI(t *testing.T) {
|
|
os.Clearenv()
|
|
|
|
ci := GetCI()
|
|
|
|
assert.False(t, IsCI())
|
|
assert.Nil(t, ci)
|
|
}
|