Module: Gitlab::QA::Runtime::Env

Extended by:
Env
Included in:
Env
Defined in:
lib/gitlab/qa/runtime/env.rb

Constant Summary collapse

ENV_VARIABLES =

Variables that are used in tests and are passed through to the docker container that executes the tests. These variables should be listed in /docs/what_tests_can_be_run.md#supported-gitlab-environment-variables

{
  'QA_REMOTE_GRID' => :remote_grid,
  'QA_REMOTE_GRID_USERNAME' => :remote_grid_username,
  'QA_REMOTE_GRID_ACCESS_KEY' => :remote_grid_access_key,
  'QA_REMOTE_GRID_PROTOCOL' => :remote_grid_protocol,
  'QA_BROWSER' => :browser,
  'GITLAB_API_BASE' => :api_base,
  'GITLAB_ADMIN_USERNAME' => :admin_username,
  'GITLAB_ADMIN_PASSWORD' => :admin_password,
  'GITLAB_USERNAME' => :user_username,
  'GITLAB_PASSWORD' => :user_password,
  'GITLAB_LDAP_USERNAME' => :ldap_username,
  'GITLAB_LDAP_PASSWORD' => :ldap_password,
  'GITLAB_FORKER_USERNAME' => :forker_username,
  'GITLAB_FORKER_PASSWORD' => :forker_password,
  'GITLAB_USER_TYPE' => :user_type,
  'GITLAB_SANDBOX_NAME' => :gitlab_sandbox_name,
  'GITLAB_QA_ACCESS_TOKEN' => :qa_access_token,
  'GITLAB_QA_ADMIN_ACCESS_TOKEN' => :qa_admin_access_token,
  'GITHUB_ACCESS_TOKEN' => :github_access_token,
  'GITLAB_URL' => :gitlab_url,
  'SIMPLE_SAML_HOSTNAME' => :simple_saml_hostname,
  'SIMPLE_SAML_FINGERPRINT' => :simple_saml_fingerprint,
  'ACCEPT_INSECURE_CERTS' => :accept_insecure_certs,
  'EE_LICENSE' => :ee_license,
  'GCLOUD_ACCOUNT_EMAIL' => :gcloud_account_email,
  'GCLOUD_ACCOUNT_KEY' => :gcloud_account_key,
  'CLOUDSDK_CORE_PROJECT' => :cloudsdk_core_project,
  'GCLOUD_REGION' => :gcloud_region,
  'SIGNUP_DISABLED' => :signup_disabled,
  'QA_ADDITIONAL_REPOSITORY_STORAGE' => :qa_additional_repository_storage,
  'QA_PRAEFECT_REPOSITORY_STORAGE' => :qa_praefect_repository_storage,
  'QA_GITALY_NON_CLUSTER_STORAGE' => :qa_gitaly_non_cluster_storage,
  'QA_COOKIES' => :qa_cookie,
  'QA_DEBUG' => :qa_debug,
  'QA_LOG_PATH' => :qa_log_path,
  'QA_CAN_TEST_ADMIN_FEATURES' => :qa_can_test_admin_features,
  'QA_CAN_TEST_GIT_PROTOCOL_V2' => :qa_can_test_git_protocol_v2,
  'QA_CAN_TEST_PRAEFECT' => :qa_can_test_praefect,
  'QA_DISABLE_RSPEC_RETRY' => :qa_disable_rspec_retry,
  'QA_SIMULATE_SLOW_CONNECTION' => :qa_simulate_slow_connection,
  'QA_SLOW_CONNECTION_LATENCY_MS' => :qa_slow_connection_latency_ms,
  'QA_SLOW_CONNECTION_THROUGHPUT_KBPS' => :qa_slow_connection_throughput_kbps,
  'GITLAB_QA_USERNAME_1' => :gitlab_qa_username_1,
  'GITLAB_QA_PASSWORD_1' => :gitlab_qa_password_1,
  'GITLAB_QA_USERNAME_2' => :gitlab_qa_username_2,
  'GITLAB_QA_PASSWORD_2' => :gitlab_qa_password_2,
  'GITHUB_USERNAME' => :github_username,
  'GITHUB_PASSWORD' => :github_password,
  'KNAPSACK_GENERATE_REPORT' => :knapsack_generate_report,
  'KNAPSACK_REPORT_PATH' => :knapsack_report_path,
  'KNAPSACK_TEST_FILE_PATTERN' => :knapsack_test_file_pattern,
  'KNAPSACK_TEST_DIR' => :knapsack_test_dir,
  'CI' => :ci,
  'CI_RUNNER_ID' => :ci_runner_id,
  'CI_SERVER_HOST' => :ci_server_host,
  'CI_SERVER_PERSONAL_ACCESS_TOKEN' => :ci_server_personal_access_token,
  'CI_NODE_INDEX' => :ci_node_index,
  'CI_NODE_TOTAL' => :ci_node_total,
  'GITLAB_CI' => :gitlab_ci,
  'QA_SKIP_PULL' => :qa_skip_pull,
  'ELASTIC_URL' => :elastic_url,
  'GITLAB_QA_LOOP_RUNNER_MINUTES' => :gitlab_qa_loop_runner_minutes,
  'MAILHOG_HOSTNAME' => :mailhog_hostname,
  'SLACK_QA_CHANNEL' => :slack_qa_channel,
  'CI_SLACK_WEBHOOK_URL' => :ci_slack_webhook_url,
  'SLACK_ICON_EMOJI' => :slack_icon_emoji,
  'GITLAB_QA_FORMLESS_LOGIN_TOKEN' => :gitlab_qa_formless_login_token,
  'GEO_MAX_FILE_REPLICATION_TIME' => :geo_max_file_replication_time,
  'GEO_MAX_DB_REPLICATION_TIME' => :geo_max_db_replication_time,
  'JIRA_HOSTNAME' => :jira_hostname,
  'JIRA_ADMIN_USERNAME' => :jira_admin_username,
  'JIRA_ADMIN_PASSWORD' => :jira_admin_password,
  'CACHE_NAMESPACE_NAME' => :cache_namespace_name
}.freeze

Instance Method Summary collapse

Instance Method Details

#ci_job_nameObject



107
108
109
# File 'lib/gitlab/qa/runtime/env.rb', line 107

def ci_job_name
  ENV['CI_JOB_NAME']
end

#ci_job_tokenObject



111
112
113
# File 'lib/gitlab/qa/runtime/env.rb', line 111

def ci_job_token
  ENV['CI_JOB_TOKEN']
end

#ci_job_urlObject



115
116
117
# File 'lib/gitlab/qa/runtime/env.rb', line 115

def ci_job_url
  ENV['CI_JOB_URL']
end

#ci_pipeline_sourceObject



119
120
121
# File 'lib/gitlab/qa/runtime/env.rb', line 119

def ci_pipeline_source
  ENV['CI_PIPELINE_SOURCE']
end

#ci_project_nameObject



123
124
125
# File 'lib/gitlab/qa/runtime/env.rb', line 123

def ci_project_name
  ENV['CI_PROJECT_NAME']
end

#ci_slack_webhook_urlObject



127
128
129
# File 'lib/gitlab/qa/runtime/env.rb', line 127

def ci_slack_webhook_url
  ENV['CI_SLACK_WEBHOOK_URL']
end

#dev_access_token_variableObject



151
152
153
# File 'lib/gitlab/qa/runtime/env.rb', line 151

def dev_access_token_variable
  env_value_if_defined('GITLAB_QA_DEV_ACCESS_TOKEN')
end

#elastic_versionObject



167
168
169
# File 'lib/gitlab/qa/runtime/env.rb', line 167

def elastic_version
  ENV['ELASTIC_VERSION'] || '6.4.2'.freeze
end

#gitlab_api_baseObject



99
100
101
# File 'lib/gitlab/qa/runtime/env.rb', line 99

def gitlab_api_base
  ENV['GITLAB_API_BASE'] || 'https://gitlab.com/api/v4'
end

#gitlab_bot_multi_project_pipeline_polling_tokenObject



103
104
105
# File 'lib/gitlab/qa/runtime/env.rb', line 103

def gitlab_bot_multi_project_pipeline_polling_token
  ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
end

#gitlab_dev_usernameObject



95
96
97
# File 'lib/gitlab/qa/runtime/env.rb', line 95

def gitlab_dev_username
  ENV['GITLAB_DEV_USERNAME'] || 'gitlab-qa-bot'
end

#gitlab_qa_formless_login_tokenObject



230
231
232
# File 'lib/gitlab/qa/runtime/env.rb', line 230

def 
  env_value_if_defined('GITLAB_QA_FORMLESS_LOGIN_TOKEN')
end

#gitlab_usernameObject



91
92
93
# File 'lib/gitlab/qa/runtime/env.rb', line 91

def gitlab_username
  ENV['GITLAB_USERNAME'] || 'gitlab-qa'
end

#host_artifacts_dirObject



163
164
165
# File 'lib/gitlab/qa/runtime/env.rb', line 163

def host_artifacts_dir
  @host_artifacts_dir ||= File.join(ENV['QA_ARTIFACTS_DIR'] || '/tmp/gitlab-qa', Runtime::Env.run_id)
end

#pipeline_from_project_nameObject



131
132
133
# File 'lib/gitlab/qa/runtime/env.rb', line 131

def pipeline_from_project_name
  ci_project_name.to_s.start_with?('gitlab-qa') ? 'master' : ci_project_name
end

#qa_access_tokenObject



147
148
149
# File 'lib/gitlab/qa/runtime/env.rb', line 147

def qa_access_token
  ENV['GITLAB_QA_ACCESS_TOKEN']
end

#qa_container_registry_access_tokenObject



159
160
161
# File 'lib/gitlab/qa/runtime/env.rb', line 159

def qa_container_registry_access_token
  ENV['GITLAB_QA_CONTAINER_REGISTRY_ACCESS_TOKEN']
end

#qa_dev_access_tokenObject



155
156
157
# File 'lib/gitlab/qa/runtime/env.rb', line 155

def qa_dev_access_token
  ENV['GITLAB_QA_DEV_ACCESS_TOKEN']
end

#require_ci_slack_webhook_url!Object

Raises:

  • (ArgumentError)


214
215
216
217
218
# File 'lib/gitlab/qa/runtime/env.rb', line 214

def require_ci_slack_webhook_url!
  return unless ENV['CI_SLACK_WEBHOOK_URL'].to_s.strip.empty?

  raise ArgumentError, "Please provide CI_SLACK_WEBHOOK_URL"
end

#require_kubernetes_environment!Object



220
221
222
223
224
# File 'lib/gitlab/qa/runtime/env.rb', line 220

def require_kubernetes_environment!
  %w[GCLOUD_ACCOUNT_EMAIL GCLOUD_ACCOUNT_KEY CLOUDSDK_CORE_PROJECT].each do |env_key|
    raise ArgumentError, "Environment variable #{env_key} must be set to run kubernetes specs" unless ENV.key?(env_key)
  end
end

#require_license!Object

Raises:

  • (ArgumentError)


184
185
186
187
188
# File 'lib/gitlab/qa/runtime/env.rb', line 184

def require_license!
  return if ENV.include?('EE_LICENSE')

  raise ArgumentError, 'GitLab License is not available. Please load a license into EE_LICENSE env variable.'
end

#require_no_license!Object

Raises:

  • (ArgumentError)


190
191
192
193
194
# File 'lib/gitlab/qa/runtime/env.rb', line 190

def require_no_license!
  return unless ENV.include?('EE_LICENSE')

  raise ArgumentError, "Unexpected EE_LICENSE provided. Please unset it to continue."
end

#require_qa_access_token!Object

Raises:

  • (ArgumentError)


196
197
198
199
200
# File 'lib/gitlab/qa/runtime/env.rb', line 196

def require_qa_access_token!
  return unless ENV['GITLAB_QA_ACCESS_TOKEN'].to_s.strip.empty?

  raise ArgumentError, "Please provide GITLAB_QA_ACCESS_TOKEN"
end

#require_qa_dev_access_token!Object

Raises:

  • (ArgumentError)


202
203
204
205
206
# File 'lib/gitlab/qa/runtime/env.rb', line 202

def require_qa_dev_access_token!
  return unless ENV['GITLAB_QA_DEV_ACCESS_TOKEN'].to_s.strip.empty?

  raise ArgumentError, "Please provide GITLAB_QA_DEV_ACCESS_TOKEN"
end

#require_slack_qa_channel!Object

Raises:

  • (ArgumentError)


208
209
210
211
212
# File 'lib/gitlab/qa/runtime/env.rb', line 208

def require_slack_qa_channel!
  return unless ENV['SLACK_QA_CHANNEL'].to_s.strip.empty?

  raise ArgumentError, "Please provide SLACK_QA_CHANNEL"
end

#run_idObject



143
144
145
# File 'lib/gitlab/qa/runtime/env.rb', line 143

def run_id
  @run_id ||= "gitlab-qa-run-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}-#{SecureRandom.hex(4)}"
end

#skip_pull?Boolean

Returns:

  • (Boolean)


226
227
228
# File 'lib/gitlab/qa/runtime/env.rb', line 226

def skip_pull?
  enabled?(ENV['QA_SKIP_PULL'], default: false)
end

#slack_icon_emojiObject



139
140
141
# File 'lib/gitlab/qa/runtime/env.rb', line 139

def slack_icon_emoji
  ENV['SLACK_ICON_EMOJI']
end

#slack_qa_channelObject



135
136
137
# File 'lib/gitlab/qa/runtime/env.rb', line 135

def slack_qa_channel
  ENV['SLACK_QA_CHANNEL']
end

#variablesObject



171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/gitlab/qa/runtime/env.rb', line 171

def variables
  vars = {}

  ENV_VARIABLES.each do |name, attribute|
    # Variables that are overridden in the environment take precedence
    # over the defaults specified by the QA runtime.
    value = env_value_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
    vars[name] = value if value
  end

  vars
end