lib/release_tools/metadata/compare_service.rb (31 lines of code) (raw):
# frozen_string_literal: true
module ReleaseTools
module Metadata
# Generates a `Metadata::Comparison` between a source version and a previous version.
class CompareService
include ::SemanticLogger::Loggable
# @param source [ProductVersion] version that needs to be compared.
# @param environment [String] where source version is deployed.
def initialize(source:, environment:)
@source = source
@environment = environment
end
def with_latest_successful_deployment
target_version = ProductVersion.from_metadata_sha(latest_successful_deployment.sha)
Comparison.new(source: source, target: target_version)
end
private
attr_reader :source, :environment
def latest_successful_deployment
Retriable.with_context(:api) do
GitlabOpsClient.deployments(
Project::Release::Metadata,
environment,
status: 'success',
order_by: 'id',
sort: 'desc',
opts: {
per_page: 1
}
).first
end
end
end
end
end