gitlab-org--gitlab-foss/lib/atlassian/jira_connect/serializers/deployment_entity.rb

90 lines
2.5 KiB
Ruby

# frozen_string_literal: true
module Atlassian
module JiraConnect
module Serializers
class DeploymentEntity < Grape::Entity
include Gitlab::Routing
format_with(:iso8601, &:iso8601)
expose :schema_version, as: :schemaVersion
expose :iid, as: :deploymentSequenceNumber
expose :update_sequence_id, as: :updateSequenceNumber
expose :display_name, as: :displayName
expose :description
expose :associations
expose :url
expose :label
expose :state
expose :updated_at, as: :lastUpdated, format_with: :iso8601
expose :pipeline_entity, as: :pipeline
expose :environment_entity, as: :environment
def issue_keys
return [] unless build&.pipeline.present?
@issue_keys ||= BuildEntity.new(build.pipeline).issue_keys
end
private
delegate :project, :deployable, :environment, :iid, :ref, :short_sha, to: :object
alias_method :deployment, :object
alias_method :build, :deployable
def associations
keys = issue_keys
[{ associationType: :issueKeys, values: keys }] if keys.present?
end
def display_name
"Deployment #{iid} (#{ref}@#{short_sha}) to #{environment.name}"
end
def label
"#{project.full_path}-#{environment.name}-#{iid}-#{short_sha}"
end
def description
"Deployment #{deployment.iid} of #{project.name} at #{short_sha} (#{build&.name}) to #{environment.name}"
end
def url
# There is no controller action to show a single deployment, so we
# link to the build instead
project_job_url(project, build) if build
end
def state
case deployment.status
when 'created' then 'pending'
when 'running' then 'in_progress'
when 'success' then 'successful'
when 'failed' then 'failed'
when 'canceled', 'skipped' then 'cancelled'
else
'unknown'
end
end
def schema_version
'1.0'
end
def pipeline_entity
PipelineEntity.new(build.pipeline) if build&.pipeline.present?
end
def environment_entity
EnvironmentEntity.new(environment)
end
def update_sequence_id
options[:update_sequence_id] || Client.generate_update_sequence_id
end
end
end
end
end