diff options
Diffstat (limited to 'lib/atlassian/jira_connect/serializers/deployment_entity.rb')
-rw-r--r-- | lib/atlassian/jira_connect/serializers/deployment_entity.rb | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/atlassian/jira_connect/serializers/deployment_entity.rb b/lib/atlassian/jira_connect/serializers/deployment_entity.rb new file mode 100644 index 00000000000..9ef1666b61c --- /dev/null +++ b/lib/atlassian/jira_connect/serializers/deployment_entity.rb @@ -0,0 +1,90 @@ +# 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 |