lib/release_tools/security/components_update_task.rb (75 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Security
class ComponentsUpdateTask
include ::SemanticLogger::Loggable
CouldNotUpdateError = Class.new(StandardError)
PIPELINE_SCHEDULE_ID = 112
# @param action [Sym] - Accepts :enable or :disable
def initialize(action:)
@project = ReleaseTools::Project::ReleaseTools
@client = ReleaseTools::GitlabOpsClient
@action = action
end
def execute
logger.info('Toggling components update pipeline schedule', description: pipeline_schedule.description, action: action)
return if SharedStatus.dry_run?
take_ownership_of_pipeline
update_pipeline_schedule
send_slack_notification(:success)
rescue StandardError => ex
logger.fatal(failure_message, error: ex)
send_slack_notification(:failed)
raise CouldNotUpdateError
end
private
attr_reader :project, :client, :action
def pipeline_schedule
Retriable.with_context(:api) do
client
.pipeline_schedule(project, PIPELINE_SCHEDULE_ID)
end
end
def take_ownership_of_pipeline
logger.info('Taking ownership of the pipeline schedule', pipeline_schedule: PIPELINE_SCHEDULE_ID)
Retriable.with_context(:api) do
client.pipeline_schedule_take_ownership(
project,
PIPELINE_SCHEDULE_ID
)
end
end
def update_pipeline_schedule
Retriable.with_context(:api) do
client.edit_pipeline_schedule(
project.ops_path,
PIPELINE_SCHEDULE_ID,
active: enabling_components_update_task?
)
end
end
def send_slack_notification(status)
ReleaseTools::Slack::ReleaseJobEndNotifier.new(
job_type: job_type,
status: status,
release_type: :patch
).send_notification
end
def job_type
if enabling_components_update_task?
'Enable components update task'
else
'Disable components update task'
end
end
def enabling_components_update_task?
action == :enable
end
def failure_message
<<~MSG
Toggling components update task failed. This job may be retried. If this job continues to fail,
the #{pipeline_schedule.description} schedule can be manually updated at
https://ops.gitlab.net/gitlab-org/release/tools/-/pipeline_schedules.
MSG
end
end
end
end