Module: Coveralls::Configuration

Defined in:
lib/coveralls/configuration.rb

Class Method Summary collapse

Class Method Details

.configurationObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/coveralls/configuration.rb', line 9

def configuration
  config = {
    environment: relevant_env,
    git:         git
  }

  yml = yaml_config

  if yml
    config[:configuration] = yml
    config[:repo_token] = yml['repo_token'] || yml['repo_secret_token']
  end

  if ENV['COVERALLS_REPO_TOKEN']
    config[:repo_token] = ENV['COVERALLS_REPO_TOKEN']
  end

  if ENV['COVERALLS_PARALLEL'] && ENV['COVERALLS_PARALLEL'] != 'false'
    config[:parallel] = true
  end

  if ENV['COVERALLS_FLAG_NAME']
    config[:flag_name] = ENV['COVERALLS_FLAG_NAME']
  end

  if ENV['TRAVIS']
    define_service_params_for_travis(config, yml ? yml['service_name'] : nil)
  elsif ENV['CIRCLECI']
    define_service_params_for_circleci(config)
  elsif ENV['SEMAPHORE']
    define_service_params_for_semaphore(config)
  elsif ENV['JENKINS_URL'] || ENV['JENKINS_HOME']
    define_service_params_for_jenkins(config)
  elsif ENV['APPVEYOR']
    define_service_params_for_appveyor(config)
  elsif ENV['TDDIUM']
    define_service_params_for_tddium(config)
  elsif ENV['GITLAB_CI']
    define_service_params_for_gitlab(config)
  elsif ENV['COVERALLS_RUN_LOCALLY'] || Coveralls.testing
    define_service_params_for_coveralls_local(config)
  end

  # standardized env vars
  define_standard_service_params_for_generic_ci(config)

  if ENV['COVERALLS_SERVICE_NAME']
    config[:service_name] = ENV['COVERALLS_SERVICE_NAME']
  end

  config
end

.configuration_pathObject



142
143
144
145
146
# File 'lib/coveralls/configuration.rb', line 142

def configuration_path
  return unless root

  File.expand_path(File.join(root, '.coveralls.yml'))
end

.define_service_params_for_appveyor(config) ⇒ Object



94
95
96
97
98
99
100
101
# File 'lib/coveralls/configuration.rb', line 94

def define_service_params_for_appveyor(config)
  config[:service_name]      = 'appveyor'
  config[:service_number]    = ENV['APPVEYOR_BUILD_VERSION']
  config[:service_branch]    = ENV['APPVEYOR_REPO_BRANCH']
  config[:commit_sha]        = ENV['APPVEYOR_REPO_COMMIT']
  repo_name                  = ENV['APPVEYOR_REPO_NAME']
  config[:service_build_url] = format('https://ci.appveyor.com/project/%<repo_name>s/build/%<service_number>s', repo_name: repo_name, service_number: config[:service_number])
end

.define_service_params_for_circleci(config) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/coveralls/configuration.rb', line 69

def define_service_params_for_circleci(config)
  config[:service_name]         = 'circleci'
  config[:service_number]       = ENV['CIRCLE_WORKFLOW_ID']
  config[:service_pull_request] = ENV['CI_PULL_REQUEST'].split('/pull/')[1] unless ENV['CI_PULL_REQUEST'].nil?
  config[:service_job_number]   = ENV['CIRCLE_BUILD_NUM']
  config[:git_commit]           = ENV['CIRCLE_SHA1']
  config[:git_branch]           = ENV['CIRCLE_BRANCH']
end

.define_service_params_for_coveralls_local(config) ⇒ Object



121
122
123
124
125
# File 'lib/coveralls/configuration.rb', line 121

def define_service_params_for_coveralls_local(config)
  config[:service_job_id]     = nil
  config[:service_name]       = 'coveralls-ruby'
  config[:service_event_type] = 'manual'
end

.define_service_params_for_gitlab(config) ⇒ Object



112
113
114
115
116
117
118
119
# File 'lib/coveralls/configuration.rb', line 112

def define_service_params_for_gitlab(config)
  config[:service_name]       = 'gitlab-ci'
  config[:service_number]     = ENV['CI_PIPELINE_ID']
  config[:service_job_number] = ENV['CI_BUILD_NAME']
  config[:service_job_id]     = ENV['CI_BUILD_ID']
  config[:service_branch]     = ENV['CI_BUILD_REF_NAME']
  config[:commit_sha]         = ENV['CI_BUILD_REF']
end

.define_service_params_for_jenkins(config) ⇒ Object



87
88
89
90
91
92
# File 'lib/coveralls/configuration.rb', line 87

def define_service_params_for_jenkins(config)
  config[:service_name]         = 'jenkins'
  config[:service_number]       = ENV['BUILD_NUMBER']
  config[:service_branch]       = ENV['BRANCH_NAME']
  config[:service_pull_request] = ENV['ghprbPullId']
end

.define_service_params_for_semaphore(config) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/coveralls/configuration.rb', line 78

def define_service_params_for_semaphore(config)
  config[:service_name]         = 'semaphore'
  config[:service_number]       = ENV['SEMAPHORE_WORKFLOW_ID']
  config[:service_job_id]       = ENV['SEMAPHORE_JOB_ID']
  config[:service_build_url]    = "#{ENV['SEMAPHORE_ORGANIZATION_URL']}/jobs/#{ENV['SEMAPHORE_JOB_ID']}"
  config[:service_branch]       = ENV['SEMAPHORE_GIT_WORKING_BRANCH']
  config[:service_pull_request] = ENV['SEMAPHORE_GIT_PR_NUMBER']
end

.define_service_params_for_tddium(config) ⇒ Object



103
104
105
106
107
108
109
110
# File 'lib/coveralls/configuration.rb', line 103

def define_service_params_for_tddium(config)
  config[:service_name]         = 'tddium'
  config[:service_number]       = ENV['TDDIUM_SESSION_ID']
  config[:service_job_number]   = ENV['TDDIUM_TID']
  config[:service_pull_request] = ENV['TDDIUM_PR_ID']
  config[:service_branch]       = ENV['TDDIUM_CURRENT_BRANCH']
  config[:service_build_url]    = "https://ci.solanolabs.com/reports/#{ENV['TDDIUM_SESSION_ID']}"
end

.define_service_params_for_travis(config, service_name) ⇒ Object



62
63
64
65
66
67
# File 'lib/coveralls/configuration.rb', line 62

def define_service_params_for_travis(config, service_name)
  config[:service_job_id]       = ENV['TRAVIS_JOB_ID']
  config[:service_pull_request] = ENV['TRAVIS_PULL_REQUEST'] unless ENV['TRAVIS_PULL_REQUEST'] == 'false'
  config[:service_name]         = service_name || 'travis-ci'
  config[:service_branch]       = ENV['TRAVIS_BRANCH']
end

.define_standard_service_params_for_generic_ci(config) ⇒ Object



127
128
129
130
131
132
133
134
# File 'lib/coveralls/configuration.rb', line 127

def define_standard_service_params_for_generic_ci(config)
  config[:service_name]         ||= ENV['CI_NAME']
  config[:service_number]       ||= ENV['CI_BUILD_NUMBER']
  config[:service_job_id]       ||= ENV['CI_JOB_ID']
  config[:service_build_url]    ||= ENV['CI_BUILD_URL']
  config[:service_branch]       ||= ENV['CI_BRANCH']
  config[:service_pull_request] ||= (ENV['CI_PULL_REQUEST'] || '')[/(\d+)$/, 1]
end

.gitObject



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/coveralls/configuration.rb', line 168

def git
  hash = {}

  Dir.chdir(root) do
    hash[:head] = {
      id:              ENV.fetch('GIT_ID', `git log -1 --pretty=format:'%H'`),
      author_name:     ENV.fetch('GIT_AUTHOR_NAME', `git log -1 --pretty=format:'%aN'`),
      author_email:    ENV.fetch('GIT_AUTHOR_EMAIL', `git log -1 --pretty=format:'%ae'`),
      committer_name:  ENV.fetch('GIT_COMMITTER_NAME', `git log -1 --pretty=format:'%cN'`),
      committer_email: ENV.fetch('GIT_COMMITTER_EMAIL', `git log -1 --pretty=format:'%ce'`),
      message:         ENV.fetch('GIT_MESSAGE', `git log -1 --pretty=format:'%s'`)
    }

    # Branch
    hash[:branch] = ENV.fetch('GIT_BRANCH', `git rev-parse --abbrev-ref HEAD`)

    # Remotes
    remotes = nil
    begin
      remotes = `git remote -v`.split("\n").map do |remote|
        splits = remote.split.compact
        { name: splits[0], url: splits[1] }
      end.uniq
    rescue StandardError => e
      # TODO: Add error action
      puts e.message
    end

    hash[:remotes] = remotes
  end

  hash
rescue StandardError => e
  Coveralls::Output.puts 'Coveralls git error:', color: 'red'
  Coveralls::Output.puts e.to_s, color: 'red'
  nil
end

.pwdObject



152
153
154
# File 'lib/coveralls/configuration.rb', line 152

def pwd
  Dir.pwd
end

.rails_rootObject



162
163
164
165
166
# File 'lib/coveralls/configuration.rb', line 162

def rails_root
  Rails.root.to_s
rescue StandardError
  nil
end

.relevant_envObject



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# File 'lib/coveralls/configuration.rb', line 206

def relevant_env
  base_env = {
    pwd:            pwd,
    rails_root:     rails_root,
    simplecov_root: simplecov_root,
    gem_version:    VERSION
  }

  service_env =
    if ENV['TRAVIS']
      travis_env_hash
    elsif ENV['CIRCLECI']
      circleci_env_hash
    elsif ENV['JENKINS_URL']
      jenkins_env_hash
    elsif ENV['SEMAPHORE']
      semaphore_env_hash
    else
      {}
    end

  base_env.merge! service_env
end

.rootObject



148
149
150
# File 'lib/coveralls/configuration.rb', line 148

def root
  pwd
end

.simplecov_rootObject



156
157
158
159
160
# File 'lib/coveralls/configuration.rb', line 156

def simplecov_root
  return unless defined?(::SimpleCov)

  ::SimpleCov.root
end

.yaml_configObject



136
137
138
139
140
# File 'lib/coveralls/configuration.rb', line 136

def yaml_config
  return unless configuration_path && File.exist?(configuration_path)

  YAML.load_file(configuration_path)
end