mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-07-25 16:00:50 +00:00
74 lines
2.2 KiB
Ruby
Executable File
74 lines
2.2 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
require 'net/http'
|
|
require 'uri'
|
|
require 'json'
|
|
class ReleaseEnvironmentNotification
|
|
OPS_RELEASE_TOOLS_API_URL = "https://ops.gitlab.net/api/v4/projects/130"
|
|
|
|
def initialize
|
|
raise "Missing required environment variable." unless set_required_env_vars?
|
|
|
|
@version = fetch_version
|
|
end
|
|
|
|
def execute
|
|
response = trigger_notification
|
|
puts "Response body: #{response.body}"
|
|
|
|
return if response.is_a? Net::HTTPSuccess
|
|
|
|
raise "Something was wrong when triggering the notification pipeline. Response code: #{response.code}"
|
|
end
|
|
|
|
attr_reader :version
|
|
|
|
private
|
|
|
|
def set_required_env_vars?
|
|
# List of required environment variables.
|
|
# CI_PIPELINE_URL supposes to be set by the CI pipeline, so we don't check it.
|
|
required_env_vars = %w[ENVIRONMENT VERSIONS OPS_RELEASE_TOOLS_PIPELINE_TOKEN RELEASE_ENVIRONMENT_NOTIFICATION_TYPE]
|
|
|
|
required_env_vars.each do |var|
|
|
if ENV.fetch(var, nil).to_s.empty?
|
|
puts "Missing required environment variable: #{var}"
|
|
return false
|
|
end
|
|
end
|
|
end
|
|
|
|
# Get the version from the VERSIONS environment variable
|
|
# All components use the same version, so we can just get the version of gitlab
|
|
def fetch_version
|
|
versions_data.fetch('gitlab', nil)
|
|
end
|
|
|
|
def versions_data
|
|
JSON.parse(ENV.fetch('VERSIONS', '{}'))
|
|
end
|
|
|
|
def trigger_notification
|
|
uri = URI.parse("#{OPS_RELEASE_TOOLS_API_URL}/trigger/pipeline")
|
|
request = Net::HTTP::Post.new(uri)
|
|
|
|
data = {
|
|
"variables[RELEASE_ENVIRONMENT_PIPELINE]" => "true",
|
|
"variables[RELEASE_ENVIRONMENT_NOTIFICATION_TYPE]" => ENV.fetch('RELEASE_ENVIRONMENT_NOTIFICATION_TYPE', nil),
|
|
"variables[RELEASE_ENVIRONMENT_CI_PIPELINE_URL]" => ENV.fetch('CI_PIPELINE_URL', nil),
|
|
"variables[RELEASE_ENVIRONMENT_NAME]" => ENV.fetch('ENVIRONMENT', nil),
|
|
"variables[RELEASE_ENVIRONMENT_VERSION]" => version,
|
|
"token" => ENV.fetch('OPS_RELEASE_TOOLS_PIPELINE_TOKEN', nil),
|
|
"ref" => "master"
|
|
}
|
|
request.set_form_data(data)
|
|
|
|
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
|
http.request(request)
|
|
end
|
|
end
|
|
end
|
|
|
|
ReleaseEnvironmentNotification.new.execute if $PROGRAM_NAME == __FILE__
|