Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/atlassian/jira_connect/serializers/build_entity.rb')
-rw-r--r--lib/atlassian/jira_connect/serializers/build_entity.rb94
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/atlassian/jira_connect/serializers/build_entity.rb b/lib/atlassian/jira_connect/serializers/build_entity.rb
new file mode 100644
index 00000000000..3eb8b1f1978
--- /dev/null
+++ b/lib/atlassian/jira_connect/serializers/build_entity.rb
@@ -0,0 +1,94 @@
+# frozen_string_literal: true
+
+module Atlassian
+ module JiraConnect
+ module Serializers
+ # A Jira 'build' represents what we call a 'pipeline'
+ class BuildEntity < Grape::Entity
+ include Gitlab::Routing
+
+ format_with(:iso8601, &:iso8601)
+
+ expose :schema_version, as: :schemaVersion
+ expose :pipeline_id, as: :pipelineId
+ expose :iid, as: :buildNumber
+ expose :update_sequence_id, as: :updateSequenceNumber
+ expose :source_ref, as: :displayName
+ expose :url
+ expose :state
+ expose :updated_at, as: :lastUpdated, format_with: :iso8601
+ expose :issue_keys, as: :issueKeys
+ expose :test_info, as: :testInfo
+ expose :references
+
+ def issue_keys
+ # extract Jira issue keys from either the source branch/ref or the
+ # merge request title.
+ @issue_keys ||= begin
+ src = "#{pipeline.source_ref} #{pipeline.merge_request&.title}"
+ JiraIssueKeyExtractor.new(src).issue_keys
+ end
+ end
+
+ private
+
+ alias_method :pipeline, :object
+ delegate :project, to: :object
+
+ def url
+ project_pipeline_url(project, pipeline)
+ end
+
+ # translate to Jira status
+ def state
+ case pipeline.status
+ when 'scheduled', 'created', 'pending', 'preparing', 'waiting_for_resource' 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 pipeline_id
+ pipeline.ensure_ci_ref!
+
+ pipeline.ci_ref.id.to_s
+ end
+
+ def schema_version
+ '1.0'
+ end
+
+ def test_info
+ builds = pipeline.builds.pluck(:status) # rubocop: disable CodeReuse/ActiveRecord
+ n = builds.size
+ passed = builds.count { |s| s == 'success' }
+ failed = builds.count { |s| s == 'failed' }
+
+ {
+ totalNumber: n,
+ numberPassed: passed,
+ numberFailed: failed,
+ numberSkipped: n - (passed + failed)
+ }
+ end
+
+ def references
+ ref = pipeline.source_ref
+
+ [{
+ commit: { id: pipeline.sha, repositoryUri: project_url(project) },
+ ref: { name: ref, uri: project_commits_url(project, ref) }
+ }]
+ end
+
+ def update_sequence_id
+ options[:update_sequence_id] || Client.generate_update_sequence_id
+ end
+ end
+ end
+ end
+end