Module: Gem::CIDetector

Defined in:
lib/rubygems/ci_detector.rb

Constant Summary collapse

ENV_INDICATORS =

Any of these being set is a reasonably reliable indicator that we are executing in a CI environment.

[
  "CI",
  "CI_NAME",
  "CONTINUOUS_INTEGRATION",
  "BUILD_NUMBER",
  "CI_APP_ID",
  "CI_BUILD_ID",
  "CI_BUILD_NUMBER",
  "RUN_ID",
  "TASKCLUSTER_ROOT_URL",
].freeze
ENV_DESCRIPTORS =

For each CI, this env suffices to indicate that we’re on that CI’s containers. (A few of them only supply a CI_NAME variable, which is also nice). And if they set “CI” but we can’t tell which one they are, we also want to know that - a bare “ci” without another token tells us as much.

{
  "TRAVIS" => "travis",
  "CIRCLECI" => "circle",
  "CIRRUS_CI" => "cirrus",
  "DSARI" => "dsari",
  "SEMAPHORE" => "semaphore",
  "JENKINS_URL" => "jenkins",
  "BUILDKITE" => "buildkite",
  "GO_SERVER_URL" => "go",
  "GITLAB_CI" => "gitlab",
  "GITHUB_ACTIONS" => "github",
  "TASKCLUSTER_ROOT_URL" => "taskcluster",
  "CI" => "ci",
}.freeze

Class Method Summary collapse

Class Method Details

.ci?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/rubygems/ci_detector.rb', line 65

def self.ci?
  ENV_INDICATORS.any? {|var| ENV.include?(var) }
end

.ci_stringsObject



69
70
71
72
73
# File 'lib/rubygems/ci_detector.rb', line 69

def self.ci_strings
  matching_names = ENV_DESCRIPTORS.select {|env, _| ENV[env] }.values
  matching_names << ENV["CI_NAME"].downcase if ENV["CI_NAME"]
  matching_names.reject(&:empty?).sort.uniq
end