From 73b3c3045292e487df5e8afbf555d55b2ca28690 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Wed, 14 Jan 2015 15:37:10 -0800 Subject: [PATCH] ci-pkgs: added travis and jenkins ci pkgs --- util/testutil/ci/ci.go | 52 +++++++++++++++++++++ util/testutil/ci/jenkins/jenkins.go | 58 ++++++++++++++++++++++++ util/testutil/ci/jenkins/jenkins_test.go | 16 +++++++ util/testutil/ci/travis/travis.go | 57 +++++++++++++++++++++++ util/testutil/ci/travis/travis_test.go | 13 ++++++ 5 files changed, 196 insertions(+) create mode 100644 util/testutil/ci/ci.go create mode 100644 util/testutil/ci/jenkins/jenkins.go create mode 100644 util/testutil/ci/jenkins/jenkins_test.go create mode 100644 util/testutil/ci/travis/travis.go create mode 100644 util/testutil/ci/travis/travis_test.go diff --git a/util/testutil/ci/ci.go b/util/testutil/ci/ci.go new file mode 100644 index 000000000..2534bc1a7 --- /dev/null +++ b/util/testutil/ci/ci.go @@ -0,0 +1,52 @@ +// Package ci implements some helper functions to use during +// tests. Many times certain facilities are not available, or tests +// must run differently. +package ci + +import ( + "os" + + jenkins "github.com/jbenet/go-ipfs/util/testutil/ci/jenkins" + travis "github.com/jbenet/go-ipfs/util/testutil/ci/travis" +) + +// EnvVar is a type to use travis-only env var names with +// the type system. +type EnvVar string + +// Environment variables that TravisCI uses. +const ( + VarCI EnvVar = "TEST_NO_FUSE" + VarNoFuse EnvVar = "TEST_NO_FUSE" + VarVerbose EnvVar = "TEST_VERBOSE" +) + +// IsRunning attempts to determine whether this process is +// running on CI. This is done by checking any of: +// +// CI=true +// travis.IsRunning() +// jenkins.IsRunning() +// +func IsRunning() bool { + if os.Getenv(string(VarCI)) == "true" { + return true + } + + return travis.IsRunning() || jenkins.IsRunning() +} + +// Env returns the value of a CI env variable. +func Env(v EnvVar) string { + return os.Getenv(string(v)) +} + +// Returns whether FUSE is explicitly disabled wiht TEST_NO_FUSE. +func NoFuse(v EnvVar) bool { + return os.Getenv(string(VarNoFuse)) == "1" +} + +// Returns whether TEST_VERBOSE is enabled. +func Verbose(v EnvVar) bool { + return os.Getenv(string(VarVerbose)) == "1" +} diff --git a/util/testutil/ci/jenkins/jenkins.go b/util/testutil/ci/jenkins/jenkins.go new file mode 100644 index 000000000..ea13d8c98 --- /dev/null +++ b/util/testutil/ci/jenkins/jenkins.go @@ -0,0 +1,58 @@ +// Package jenkins implements some helper functions to use during +// tests. Many times certain facilities are not available, or tests +// must run differently. +package jenkins + +import ( + "os" + "strings" +) + +// EnvVar is a type to use travis-only env var names with +// the type system. +type EnvVar string + +// Environment variables that TravisCI uses. +const ( + VarBuildNumber EnvVar = "BUILD_NUMBER" + VarBuildId EnvVar = "BUILD_ID" + VarBuildUrl EnvVar = "BUILD_URL" + VarNodeName EnvVar = "NODE_NAME" + VarJobName EnvVar = "JOB_NAME" + VarBuildTag EnvVar = "BUILD_TAG" + VarJenkinsUrl EnvVar = "JENKINS_URL" + VarExecutorNumber EnvVar = "EXECUTOR_NUMBER" + VarJavaHome EnvVar = "JAVA_HOME" + VarWorkspace EnvVar = "WORKSPACE" + VarSvnRevision EnvVar = "SVN_REVISION" + VarCvsBranch EnvVar = "CVS_BRANCH" + VarGitCommit EnvVar = "GIT_COMMIT" + VarGitUrl EnvVar = "GIT_URL" + VarGitBranch EnvVar = "GIT_BRANCH" +) + +// IsRunning attempts to determine whether this process is +// running on Jenkins CI. This is done by checking any of the +// following: +// +// JENKINS_URL is set +// BuildTag has prefix "jenkins-" +// +func IsRunning() bool { + return len(Env(VarJenkinsUrl)) > 0 || strings.HasPrefix(Env(VarBuildTag), "jenkins-") +} + +// Env returns the value of a travis env variable. +func Env(v EnvVar) string { + return os.Getenv(string(v)) +} + +// JobName returns the jenkins JOB_NAME of this build. +func JobName() string { + return Env(VarJobName) +} + +// BuildTag returns the jenkins BUILD_TAG. +func BuildTag() string { + return Env(VarBuildTag) +} diff --git a/util/testutil/ci/jenkins/jenkins_test.go b/util/testutil/ci/jenkins/jenkins_test.go new file mode 100644 index 000000000..d37cdf6a5 --- /dev/null +++ b/util/testutil/ci/jenkins/jenkins_test.go @@ -0,0 +1,16 @@ +package jenkins + +import ( + "os" + "strings" + "testing" +) + +func TestIsRunning(t *testing.T) { + hasPrefix := strings.HasPrefix(os.Getenv("BUILD_TAG"), "jenkins-") + tr := len(os.Getenv("JENKINS_URL")) > 0 || hasPrefix + + if tr != IsRunning() { + t.Error("IsRunning() does not match TRAVIS && CI env var check") + } +} diff --git a/util/testutil/ci/travis/travis.go b/util/testutil/ci/travis/travis.go new file mode 100644 index 000000000..2c72404fc --- /dev/null +++ b/util/testutil/ci/travis/travis.go @@ -0,0 +1,57 @@ +// Package travis implements some helper functions to use during +// tests. Many times certain facilities are not available, or tests +// must run differently. +package travis + +import "os" + +// EnvVar is a type to use travis-only env var names with +// the type system. +type EnvVar string + +// Environment variables that TravisCI uses. +const ( + VarCI EnvVar = "CI" + VarTravis EnvVar = "TRAVIS" + VarBranch EnvVar = "TRAVIS_BRANCH" + VarBuildDir EnvVar = "TRAVIS_BUILD_DIR" + VarBuildId EnvVar = "TRAVIS_BUILD_ID" + VarBuildNumber EnvVar = "TRAVIS_BUILD_NUMBER" + VarCommit EnvVar = "TRAVIS_COMMIT" + VarCommitRange EnvVar = "TRAVIS_COMMIT_RANGE" + VarJobId EnvVar = "TRAVIS_JOB_ID" + VarJobNumber EnvVar = "TRAVIS_JOB_NUMBER" + VarPullRequest EnvVar = "TRAVIS_PULL_REQUEST" + VarSecureEnvVars EnvVar = "TRAVIS_SECURE_ENV_VARS" + VarRepoSlug EnvVar = "TRAVIS_REPO_SLUG" + VarOsName EnvVar = "TRAVIS_OS_NAME" + VarTag EnvVar = "TRAVIS_TAG" + VarGoVersion EnvVar = "TRAVIS_GO_VERSION" +) + +// IsRunning attempts to determine whether this process is +// running on Travis-CI. This is done by checking ALL of the +// following env vars are set: +// +// CI=true +// TRAVIS=true +// +// Note: cannot just check CI. +func IsRunning() bool { + return Env(VarCI) == "true" && Env(VarTravis) == "true" +} + +// Env returns the value of a travis env variable. +func Env(v EnvVar) string { + return os.Getenv(string(v)) +} + +// JobId returns the travis JOB_ID of this build. +func JobId() string { + return Env(VarJobId) +} + +// JobNumber returns the travis JOB_NUMBER of this build. +func JobNumber() string { + return Env(VarJobNumber) +} diff --git a/util/testutil/ci/travis/travis_test.go b/util/testutil/ci/travis/travis_test.go new file mode 100644 index 000000000..f7b925951 --- /dev/null +++ b/util/testutil/ci/travis/travis_test.go @@ -0,0 +1,13 @@ +package travis + +import ( + "os" + "testing" +) + +func TestIsRunning(t *testing.T) { + tr := os.Getenv("TRAVIS") == "true" && os.Getenv("CI") == "true" + if tr != IsRunning() { + t.Error("IsRunning() does not match TRAVIS && CI env var check") + } +}