2018-06-14 07:05:16 -04:00
#!/usr/bin/env ruby
2018-10-04 06:06:34 -04:00
# frozen_string_literal: true
2018-06-14 07:05:16 -04:00
2018-09-04 16:56:20 -04:00
require 'gitlab'
2018-06-14 07:05:16 -04:00
module Trigger
def self . ee?
2019-09-24 11:06:34 -04:00
# Support former project name for `dev`
%w[ gitlab gitlab-ee ] . include? ( ENV [ 'CI_PROJECT_NAME' ] )
2018-06-14 07:05:16 -04:00
end
2020-06-10 14:09:15 -04:00
def self . security?
%r{ \ Agitlab-org/security( \ z|/) } . match? ( ENV [ 'CI_PROJECT_NAMESPACE' ] )
end
2020-03-02 19:08:11 -05:00
def self . non_empty_variable_value ( variable )
variable_value = ENV [ variable ]
return if variable_value . nil? || variable_value . empty?
variable_value
end
2022-02-15 07:14:49 -05:00
def self . variables_for_env_file ( variables )
variables . map do | key , value |
%Q( #{ key } = #{ value } )
end . join ( " \n " )
end
2018-09-04 16:56:20 -04:00
class Base
2020-07-22 23:09:42 -04:00
# Can be overridden
def self . access_token
ENV [ 'GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN' ]
end
def invoke! ( post_comment : false , downstream_job_name : nil )
2020-01-08 01:08:13 -05:00
pipeline_variables = variables
puts " Triggering downstream pipeline on #{ downstream_project_path } "
puts " with variables #{ pipeline_variables } "
2021-01-27 13:09:08 -05:00
pipeline = gitlab_client ( :downstream ) . run_trigger (
2018-09-04 16:56:20 -04:00
downstream_project_path ,
2018-10-04 06:06:34 -04:00
trigger_token ,
2018-09-04 16:56:20 -04:00
ref ,
2020-01-08 01:08:13 -05:00
pipeline_variables )
2018-06-14 07:05:16 -04:00
2018-10-04 06:06:34 -04:00
puts " Triggered downstream pipeline: #{ pipeline . web_url } \n "
2018-09-04 16:56:20 -04:00
puts " Waiting for downstream pipeline status "
2018-06-14 07:05:16 -04:00
2021-01-27 13:09:08 -05:00
Trigger :: CommitComment . post! ( pipeline , gitlab_client ( :upstream ) ) if post_comment
2019-10-24 11:06:02 -04:00
downstream_job =
if downstream_job_name
2021-01-27 13:09:08 -05:00
gitlab_client ( :downstream ) . pipeline_jobs ( downstream_project_path , pipeline . id ) . auto_paginate . find do | potential_job |
2019-10-24 11:06:02 -04:00
potential_job . name == downstream_job_name
end
end
if downstream_job
2021-01-27 13:09:08 -05:00
Trigger :: Job . new ( downstream_project_path , downstream_job . id , gitlab_client ( :downstream ) )
2019-10-24 11:06:02 -04:00
else
2021-01-27 13:09:08 -05:00
Trigger :: Pipeline . new ( downstream_project_path , pipeline . id , gitlab_client ( :downstream ) )
2019-10-24 11:06:02 -04:00
end
2018-06-14 07:05:16 -04:00
end
2022-02-15 07:14:49 -05:00
def variables
simple_forwarded_variables . merge ( base_variables , extra_variables , version_file_variables )
end
def simple_forwarded_variables
{
'TRIGGER_SOURCE' = > ENV [ 'CI_JOB_URL' ] ,
'TOP_UPSTREAM_SOURCE_PROJECT' = > ENV [ 'CI_PROJECT_PATH' ] ,
'TOP_UPSTREAM_SOURCE_REF' = > ENV [ 'CI_COMMIT_REF_NAME' ] ,
'TOP_UPSTREAM_SOURCE_JOB' = > ENV [ 'CI_JOB_URL' ] ,
'TOP_UPSTREAM_MERGE_REQUEST_PROJECT_ID' = > ENV [ 'CI_MERGE_REQUEST_PROJECT_ID' ] ,
'TOP_UPSTREAM_MERGE_REQUEST_IID' = > ENV [ 'CI_MERGE_REQUEST_IID' ]
}
end
2018-06-14 07:05:16 -04:00
private
2021-01-27 13:09:08 -05:00
# Override to trigger and work with pipeline on different GitLab instance
# type: :downstream -> downstream build and pipeline status
# type: :upstream -> this project, e.g. for posting comments
2022-04-21 14:10:22 -04:00
def gitlab_client ( _type )
2021-01-27 13:09:08 -05:00
# By default, always use the same client
@gitlab_client || = Gitlab . client (
endpoint : 'https://gitlab.com/api/v4' ,
private_token : self . class . access_token
)
end
2018-10-30 06:53:01 -04:00
# Must be overridden
2018-09-04 16:56:20 -04:00
def downstream_project_path
raise NotImplementedError
end
2018-10-30 06:53:01 -04:00
# Must be overridden
2022-04-21 14:10:22 -04:00
def ref_param_name
2018-09-04 16:56:20 -04:00
raise NotImplementedError
end
2022-04-21 14:10:22 -04:00
# Can be overridden
def primary_ref
'main'
end
2020-07-22 23:09:42 -04:00
# Can be overridden
2018-10-04 06:06:34 -04:00
def trigger_token
2020-07-22 23:09:42 -04:00
ENV [ 'CI_JOB_TOKEN' ]
2018-10-04 06:06:34 -04:00
end
2018-10-30 06:53:01 -04:00
# Can be overridden
2018-09-04 16:56:20 -04:00
def extra_variables
{ }
end
2018-10-30 06:53:01 -04:00
# Can be overridden
2018-09-04 16:56:20 -04:00
def version_param_value ( version_file )
2019-11-27 13:06:30 -05:00
ENV [ version_file ] & . strip || File . read ( version_file ) . strip
2018-09-04 16:56:20 -04:00
end
2022-04-21 14:10:22 -04:00
# Can be overridden
def trigger_stable_branch_if_detected?
false
end
def stable_branch?
ENV [ 'CI_COMMIT_REF_NAME' ] =~ / ^[ \ d-]+-stable(-ee)?$ /
end
def fallback_ref
if trigger_stable_branch_if_detected? && stable_branch?
ENV [ 'CI_COMMIT_REF_NAME' ] . delete_suffix ( '-ee' )
else
primary_ref
end
end
def ref
ENV . fetch ( ref_param_name , fallback_ref )
end
2018-09-04 16:56:20 -04:00
def base_variables
2020-03-02 19:08:11 -05:00
# Use CI_MERGE_REQUEST_SOURCE_BRANCH_SHA for omnibus checkouts due to pipeline for merged results,
# and fallback to CI_COMMIT_SHA for the `detached` pipelines.
2018-06-14 07:05:16 -04:00
{
2019-01-18 03:13:08 -05:00
'GITLAB_REF_SLUG' = > ENV [ 'CI_COMMIT_TAG' ] ? ENV [ 'CI_COMMIT_REF_NAME' ] : ENV [ 'CI_COMMIT_REF_SLUG' ] ,
2018-10-04 06:06:34 -04:00
'TRIGGERED_USER' = > ENV [ 'TRIGGERED_USER' ] || ENV [ 'GITLAB_USER_NAME' ] ,
2022-02-15 07:14:49 -05:00
'TOP_UPSTREAM_SOURCE_SHA' = > Trigger . non_empty_variable_value ( 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' ) || ENV [ 'CI_COMMIT_SHA' ]
2018-06-14 07:05:16 -04:00
}
end
2018-09-04 16:56:20 -04:00
# Read version files from all components
def version_file_variables
Dir . glob ( " *_VERSION " ) . each_with_object ( { } ) do | version_file , params |
params [ version_file ] = version_param_value ( version_file )
2018-06-14 07:05:16 -04:00
end
end
end
2018-09-04 16:56:20 -04:00
class Omnibus < Base
2021-07-27 11:09:49 -04:00
def self . access_token
# Default to "Multi-pipeline (from 'gitlab-org/gitlab' 'package-and-qa' job)" at https://gitlab.com/gitlab-org/build/omnibus-gitlab-mirror/-/settings/access_tokens
ENV [ 'OMNIBUS_GITLAB_PROJECT_ACCESS_TOKEN' ] || super
end
2018-09-04 16:56:20 -04:00
private
2018-06-14 07:05:16 -04:00
2018-09-04 16:56:20 -04:00
def downstream_project_path
2021-07-27 11:09:49 -04:00
ENV . fetch ( 'OMNIBUS_PROJECT_PATH' , 'gitlab-org/build/omnibus-gitlab-mirror' )
2018-06-14 07:05:16 -04:00
end
2022-04-21 14:10:22 -04:00
def ref_param_name
'OMNIBUS_BRANCH'
end
def primary_ref
'master'
end
def trigger_stable_branch_if_detected?
true
2018-09-04 16:56:20 -04:00
end
def extra_variables
2021-06-22 05:07:12 -04:00
# Use CI_MERGE_REQUEST_SOURCE_BRANCH_SHA (MR HEAD commit) so that the image is in sync with the assets and QA images.
2021-04-01 14:13:56 -04:00
# See https://docs.gitlab.com/ee/development/testing_guide/end_to_end/index.html#with-pipeline-for-merged-results.
# We also set IMAGE_TAG so the GitLab Docker image is tagged with that SHA.
2020-08-20 08:10:27 -04:00
source_sha = Trigger . non_empty_variable_value ( 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' ) || ENV [ 'CI_COMMIT_SHA' ]
2021-06-22 05:07:12 -04:00
2018-09-04 16:56:20 -04:00
{
2020-08-20 08:10:27 -04:00
'GITLAB_VERSION' = > source_sha ,
'IMAGE_TAG' = > source_sha ,
2021-07-21 14:09:27 -04:00
'QA_IMAGE' = > ENV [ 'QA_IMAGE' ] ,
2021-04-01 14:13:56 -04:00
'SKIP_QA_DOCKER' = > 'true' ,
2018-09-04 16:56:20 -04:00
'ALTERNATIVE_SOURCES' = > 'true' ,
2020-06-10 14:09:15 -04:00
'SECURITY_SOURCES' = > Trigger . security? ? 'true' : 'false' ,
2018-10-22 10:33:32 -04:00
'ee' = > Trigger . ee? ? 'true' : 'false' ,
2021-08-10 08:11:00 -04:00
'QA_BRANCH' = > ENV [ 'QA_BRANCH' ] || 'master' ,
2021-10-18 20:10:29 -04:00
'CACHE_UPDATE' = > ENV [ 'OMNIBUS_GITLAB_CACHE_UPDATE' ] ,
2021-12-02 22:14:42 -05:00
'GITLAB_QA_OPTIONS' = > ENV [ 'GITLAB_QA_OPTIONS' ] ,
2021-12-13 16:14:32 -05:00
'QA_TESTS' = > ENV [ 'QA_TESTS' ] ,
'ALLURE_JOB_NAME' = > ENV [ 'ALLURE_JOB_NAME' ]
2018-09-04 16:56:20 -04:00
}
end
end
class CNG < Base
2022-02-15 07:14:49 -05:00
def variables
# Delete variables that aren't useful when using native triggers.
super . tap do | hash |
hash . delete ( 'TRIGGER_SOURCE' )
hash . delete ( 'TRIGGERED_USER' )
end
2021-07-27 11:09:49 -04:00
end
2018-06-14 07:05:16 -04:00
private
2022-04-21 14:10:22 -04:00
def ref_param_name
'CNG_BRANCH'
end
def primary_ref
'master'
end
2018-09-04 16:56:20 -04:00
2022-04-21 14:10:22 -04:00
def trigger_stable_branch_if_detected?
true
2018-10-04 06:06:34 -04:00
end
2018-09-04 16:56:20 -04:00
def extra_variables
2021-06-22 05:07:12 -04:00
# Use CI_MERGE_REQUEST_SOURCE_BRANCH_SHA (MR HEAD commit) so that the image is in sync with the assets and QA images.
source_sha = Trigger . non_empty_variable_value ( 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' ) || ENV [ 'CI_COMMIT_SHA' ]
2018-09-04 16:56:20 -04:00
{
2022-02-15 07:14:49 -05:00
" TRIGGER_BRANCH " = > ref ,
2021-06-22 05:07:12 -04:00
" GITLAB_VERSION " = > source_sha ,
2022-02-15 07:14:49 -05:00
" GITLAB_TAG " = > ENV [ 'CI_COMMIT_TAG' ] , # Always set a value, even an empty string, so that the downstream pipeline can correctly check it.
2021-06-22 05:07:12 -04:00
" GITLAB_ASSETS_TAG " = > ENV [ 'CI_COMMIT_TAG' ] ? ENV [ 'CI_COMMIT_REF_NAME' ] : source_sha ,
2019-06-04 12:11:48 -04:00
" FORCE_RAILS_IMAGE_BUILDS " = > 'true' ,
2022-02-15 07:14:49 -05:00
" CE_PIPELINE " = > Trigger . ee? ? nil : " true " , # Always set a value, even an empty string, so that the downstream pipeline can correctly check it.
" EE_PIPELINE " = > Trigger . ee? ? " true " : nil # Always set a value, even an empty string, so that the downstream pipeline can correctly check it.
2018-06-14 07:05:16 -04:00
}
2018-09-04 16:56:20 -04:00
end
2018-06-14 07:05:16 -04:00
2018-09-04 16:56:20 -04:00
def version_param_value ( _version_file )
raw_version = super
# if the version matches semver format, treat it as a tag and prepend `v`
if raw_version =~ Regexp . compile ( / ^ \ d+ \ . \ d+ \ . \ d+(-rc \ d+)?(-ee)?$ / )
" v #{ raw_version } "
2018-06-14 07:05:16 -04:00
else
2018-09-04 16:56:20 -04:00
raw_version
2018-06-14 07:05:16 -04:00
end
end
2018-09-04 16:56:20 -04:00
end
2018-06-14 07:05:16 -04:00
2020-07-22 23:09:42 -04:00
class Docs < Base
2020-07-27 08:09:50 -04:00
def self . access_token
2021-07-27 11:09:49 -04:00
# Default to "DOCS_PROJECT_API_TOKEN" at https://gitlab.com/gitlab-org/gitlab-docs/-/settings/access_tokens
ENV [ 'DOCS_PROJECT_API_TOKEN' ] || super
2020-07-27 08:09:50 -04:00
end
2020-07-22 23:09:42 -04:00
SUCCESS_MESSAGE = << ~ MSG
= > You should now be able to preview your changes under the following URL :
%< app_url > s
= > For more information , see the documentation
= > https : / / docs . gitlab . com / ee / development / documentation / index . html #previewing-the-changes-live
= > If something doesn ' t work , drop a line in the #docs chat channel.
MSG
def deploy!
invoke! . wait!
display_success_message
end
#
# Remove a remote branch in gitlab-docs.
#
def cleanup!
2021-03-17 08:09:19 -04:00
environment = gitlab_client ( :downstream ) . environments ( downstream_project_path , name : downstream_environment ) . first
return unless environment
environment = gitlab_client ( :downstream ) . stop_environment ( downstream_project_path , environment . id )
if environment . state == 'stopped'
puts " => Downstream environment ' #{ downstream_environment } ' stopped "
else
puts " => Downstream environment ' #{ downstream_environment } ' failed to stop. "
end
2020-07-22 23:09:42 -04:00
end
private
2021-03-17 08:09:19 -04:00
def downstream_environment
" review/ #{ ref } #{ review_slug } "
end
# We prepend the `-` here because we cannot use variable substitution in `environment.name`/`environment.url`
# Some projects (e.g. `omnibus-gitlab`) use this script for branch pipelines, so we fallback to using `CI_COMMIT_REF_SLUG` for those cases.
def review_slug
identifier = ENV [ 'CI_MERGE_REQUEST_IID' ] || ENV [ 'CI_COMMIT_REF_SLUG' ]
" - #{ project_slug } - #{ identifier } "
end
2020-07-22 23:09:42 -04:00
def downstream_project_path
2021-07-27 11:09:49 -04:00
ENV . fetch ( 'DOCS_PROJECT_PATH' , 'gitlab-org/gitlab-docs' )
2020-07-22 23:09:42 -04:00
end
2022-04-21 14:10:22 -04:00
def ref_param_name
'DOCS_BRANCH'
2020-07-22 23:09:42 -04:00
end
2021-04-07 05:09:06 -04:00
# `gitlab-org/gitlab-docs` pipeline trigger "Triggered from gitlab-org/gitlab 'review-docs-deploy' job"
def trigger_token
ENV [ 'DOCS_TRIGGER_TOKEN' ]
end
2020-07-22 23:09:42 -04:00
def extra_variables
{
2021-03-17 08:09:19 -04:00
" BRANCH_ #{ project_slug . upcase } " = > ENV [ 'CI_COMMIT_REF_NAME' ] ,
" REVIEW_SLUG " = > review_slug
2020-07-22 23:09:42 -04:00
}
end
2021-03-17 08:09:19 -04:00
def project_slug
2020-07-22 23:09:42 -04:00
case ENV [ 'CI_PROJECT_PATH' ]
when 'gitlab-org/gitlab-foss'
'ce'
when 'gitlab-org/gitlab'
'ee'
when 'gitlab-org/gitlab-runner'
'runner'
when 'gitlab-org/omnibus-gitlab'
'omnibus'
when 'gitlab-org/charts/gitlab'
'charts'
end
end
2021-03-17 08:09:19 -04:00
# app_url is the URL of the `gitlab-docs` Review App URL defined in
# https://gitlab.com/gitlab-org/gitlab-docs/-/blob/b38038132cf82a24271bbb294dead7c2f529e275/.gitlab-ci.yml#L383
2020-07-22 23:09:42 -04:00
def app_url
2021-03-17 08:09:19 -04:00
" http:// #{ ref } #{ review_slug } . #{ ENV [ 'DOCS_REVIEW_APPS_DOMAIN' ] } / #{ project_slug } "
2020-07-22 23:09:42 -04:00
end
def display_success_message
2021-03-17 08:09:19 -04:00
puts format ( SUCCESS_MESSAGE , app_url : app_url )
2020-07-22 23:09:42 -04:00
end
end
2021-01-27 13:09:08 -05:00
class DatabaseTesting < Base
2021-05-25 11:10:33 -04:00
IDENTIFIABLE_NOTE_TAG = 'gitlab-org/database-team/gitlab-com-database-testing:identifiable-note'
2021-01-27 13:09:08 -05:00
def self . access_token
ENV [ 'GITLABCOM_DATABASE_TESTING_ACCESS_TOKEN' ]
end
2021-05-25 11:10:33 -04:00
def invoke! ( post_comment : false , downstream_job_name : nil )
pipeline = super
gitlab = gitlab_client ( :upstream )
2022-02-21 13:18:42 -05:00
project_path = variables [ 'TOP_UPSTREAM_SOURCE_PROJECT' ]
merge_request_id = variables [ 'TOP_UPSTREAM_MERGE_REQUEST_IID' ]
2021-05-25 11:10:33 -04:00
comment = " <!-- #{ IDENTIFIABLE_NOTE_TAG } --> \n Started database testing [pipeline](https://ops.gitlab.net/ #{ downstream_project_path } /-/pipelines/ #{ pipeline . id } ) " \
" (limited access). This comment will be updated once the pipeline has finished running. "
2021-07-01 02:07:35 -04:00
# Look for an existing note
2021-05-25 11:10:33 -04:00
db_testing_notes = gitlab . merge_request_notes ( project_path , merge_request_id ) . auto_paginate . select do | note |
note . body . include? ( IDENTIFIABLE_NOTE_TAG )
end
2021-07-01 02:07:35 -04:00
if db_testing_notes . empty?
# This is the first note
2021-05-25 11:10:33 -04:00
note = gitlab . create_merge_request_note ( project_path , merge_request_id , comment )
puts " Posted comment to: \n "
2021-07-01 02:07:35 -04:00
puts " https://gitlab.com/ #{ project_path } /-/merge_requests/ #{ merge_request_id } # note_ #{ note . id } "
2021-05-25 11:10:33 -04:00
end
end
2021-01-27 13:09:08 -05:00
private
def gitlab_client ( type )
@gitlab_clients || = {
downstream : Gitlab . client (
endpoint : 'https://ops.gitlab.net/api/v4' ,
private_token : self . class . access_token
) ,
upstream : Gitlab . client (
endpoint : 'https://gitlab.com/api/v4' ,
private_token : Base . access_token
)
}
@gitlab_clients [ type ]
end
def trigger_token
ENV [ 'GITLABCOM_DATABASE_TESTING_TRIGGER_TOKEN' ]
end
def downstream_project_path
2021-07-27 11:09:49 -04:00
ENV . fetch ( 'GITLABCOM_DATABASE_TESTING_PROJECT_PATH' , 'gitlab-com/database-team/gitlab-com-database-testing' )
2021-01-27 13:09:08 -05:00
end
def extra_variables
{
# Use CI_MERGE_REQUEST_SOURCE_BRANCH_SHA for omnibus checkouts due to pipeline for merged results
# and fallback to CI_COMMIT_SHA for the `detached` pipelines.
'GITLAB_COMMIT_SHA' = > Trigger . non_empty_variable_value ( 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' ) || ENV [ 'CI_COMMIT_SHA' ] ,
'TRIGGERED_USER_LOGIN' = > ENV [ 'GITLAB_USER_LOGIN' ]
}
end
2022-04-21 14:10:22 -04:00
def ref_param_name
'GITLABCOM_DATABASE_TESTING_TRIGGER_REF'
end
def primary_ref
'master'
2021-01-27 13:09:08 -05:00
end
end
2018-09-04 16:56:20 -04:00
class CommitComment
2021-01-27 13:09:08 -05:00
def self . post! ( downstream_pipeline , gitlab_client )
gitlab_client . create_commit_comment (
2018-09-04 16:56:20 -04:00
ENV [ 'CI_PROJECT_PATH' ] ,
2020-03-02 19:08:11 -05:00
Trigger . non_empty_variable_value ( 'CI_MERGE_REQUEST_SOURCE_BRANCH_SHA' ) || ENV [ 'CI_COMMIT_SHA' ] ,
2018-09-04 16:56:20 -04:00
" The [` #{ ENV [ 'CI_JOB_NAME' ] } `]( #{ ENV [ 'CI_JOB_URL' ] } ) job from pipeline #{ ENV [ 'CI_PIPELINE_URL' ] } triggered #{ downstream_pipeline . web_url } downstream. " )
2018-10-04 06:06:34 -04:00
rescue Gitlab :: Error :: Error = > error
puts " Ignoring the following error: #{ error } "
2018-06-14 07:05:16 -04:00
end
end
class Pipeline
INTERVAL = 60 # seconds
MAX_DURATION = 3600 * 3 # 3 hours
2021-05-25 11:10:33 -04:00
attr_reader :id
2019-10-24 11:06:02 -04:00
def self . unscoped_class_name
name . split ( '::' ) . last
end
def self . gitlab_api_method_name
unscoped_class_name . downcase
end
2021-01-27 13:09:08 -05:00
def initialize ( project , id , gitlab_client )
2018-09-04 16:56:20 -04:00
@project = project
@id = id
2021-01-27 13:09:08 -05:00
@gitlab_client = gitlab_client
2020-08-21 05:10:08 -04:00
@start_time = Time . now . to_i
2018-06-14 07:05:16 -04:00
end
def wait!
2020-08-21 05:10:08 -04:00
( MAX_DURATION / INTERVAL ) . times do
2018-06-14 07:05:16 -04:00
case status
when :created , :pending , :running
print " . "
sleep INTERVAL
when :success
2019-10-24 11:06:02 -04:00
puts " #{ self . class . unscoped_class_name } succeeded in #{ duration } minutes! "
2020-08-21 11:10:03 -04:00
return
2018-06-14 07:05:16 -04:00
else
2019-10-24 11:06:02 -04:00
raise " #{ self . class . unscoped_class_name } did not succeed! "
2018-06-14 07:05:16 -04:00
end
2021-06-08 11:10:00 -04:00
$stdout . flush
2018-06-14 07:05:16 -04:00
end
2020-08-21 05:10:08 -04:00
raise " #{ self . class . unscoped_class_name } timed out after waiting for #{ duration } minutes! "
2018-06-14 07:05:16 -04:00
end
def duration
2020-08-21 05:10:08 -04:00
( Time . now . to_i - start_time ) / 60
2018-06-14 07:05:16 -04:00
end
def status
2021-01-27 13:09:08 -05:00
gitlab_client . public_send ( self . class . gitlab_api_method_name , project , id ) . status . to_sym # rubocop:disable GitlabSecurity/PublicSend
2018-09-04 16:56:20 -04:00
rescue Gitlab :: Error :: Error = > error
puts " Ignoring the following error: #{ error } "
2018-06-20 11:17:29 -04:00
# Ignore GitLab API hiccups. If GitLab is really down, we'll hit the job
# timeout anyway.
:running
2018-06-14 07:05:16 -04:00
end
2020-08-21 05:10:08 -04:00
private
2021-05-25 11:10:33 -04:00
attr_reader :project , :gitlab_client , :start_time
2018-06-14 07:05:16 -04:00
end
2019-10-24 11:06:02 -04:00
Job = Class . new ( Pipeline )
2018-06-14 07:05:16 -04:00
end
2022-02-15 07:14:49 -05:00
if $0 == __FILE__
case ARGV [ 0 ]
when 'omnibus'
Trigger :: Omnibus . new . invoke! ( post_comment : true , downstream_job_name : 'Trigger:qa-test' ) . wait!
when 'cng'
Trigger :: CNG . new . invoke! . wait!
when 'gitlab-com-database-testing'
Trigger :: DatabaseTesting . new . invoke!
when 'docs'
docs_trigger = Trigger :: Docs . new
case ARGV [ 1 ]
when 'deploy'
docs_trigger . deploy!
when 'cleanup'
docs_trigger . cleanup!
else
puts 'usage: trigger-build docs <deploy|cleanup>'
exit 1
end
2020-07-22 23:09:42 -04:00
else
2022-02-15 07:14:49 -05:00
puts " Please provide a valid option:
omnibus - Triggers a pipeline that builds the omnibus - gitlab package
cng - Triggers a pipeline that builds images used by the GitLab helm chart
gitlab - com - database - testing - Triggers a pipeline that tests database changes on GitLab . com data "
2020-07-22 23:09:42 -04:00
end
2018-06-14 07:05:16 -04:00
end