module Gitlab::QA::Runtime::Env

def ci_job_name

def ci_job_name
  ENV['CI_JOB_NAME']
end

def ci_job_url

def ci_job_url
  ENV['CI_JOB_URL']
end

def ci_project_name

def ci_project_name
  ENV['CI_PROJECT_NAME']
end

def ci_slack_webhook_url

def ci_slack_webhook_url
  ENV['CI_SLACK_WEBHOOK_URL']
end

def dev_access_token_variable

def dev_access_token_variable
  env_value_if_defined('GITLAB_QA_DEV_ACCESS_TOKEN')
end

def env_value_if_defined(variable)

def env_value_if_defined(variable)
  # Pass through the variables if they are defined in the environment
  return "$#{variable}" if ENV[variable]
end

def gitlab_api_base

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

def host_artifacts_dir

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

def qa_access_token

def qa_access_token
  ENV['GITLAB_QA_ACCESS_TOKEN']
end

def qa_dev_access_token

def qa_dev_access_token
  ENV['GITLAB_QA_DEV_ACCESS_TOKEN']
end

def require_ci_slack_webhook_url!

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

def require_kubernetes_environment!

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

def require_license!

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

def require_no_license!

def require_no_license!
  return unless ENV.include?('EE_LICENSE')
  raise ArgumentError, "Unexpected EE_LICENSE provided. Please unset it to continue."
end

def require_qa_access_token!

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

def require_qa_dev_access_token!

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

def require_slack_qa_channel!

def require_slack_qa_channel!
  return unless ENV['SLACK_QA_CHANNEL'].to_s.strip.empty?
  raise ArgumentError, "Please provide SLACK_QA_CHANNEL"
end

def run_id

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

def skip_pull?

def skip_pull?
  (ENV['QA_SKIP_PULL'] =~ /^(false|no|0)$/i) != 0
end

def slack_icon_emoji

def slack_icon_emoji
  ENV['SLACK_ICON_EMOJI']
end

def slack_qa_channel

def slack_qa_channel
  ENV['SLACK_QA_CHANNEL']
end

def variables

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