90 lines
2.5 KiB
Ruby
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
|