diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /app/services/releases | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) | |
download | gitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'app/services/releases')
-rw-r--r-- | app/services/releases/create_evidence_service.rb | 25 | ||||
-rw-r--r-- | app/services/releases/create_service.rb | 33 |
2 files changed, 56 insertions, 2 deletions
diff --git a/app/services/releases/create_evidence_service.rb b/app/services/releases/create_evidence_service.rb new file mode 100644 index 00000000000..ac13dce1729 --- /dev/null +++ b/app/services/releases/create_evidence_service.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Releases + class CreateEvidenceService + def initialize(release, pipeline: nil) + @release = release + @pipeline = pipeline + end + + def execute + evidence = release.evidences.build + + summary = Evidences::EvidenceSerializer.new.represent(evidence) # rubocop: disable CodeReuse/Serializer + evidence.summary = summary + # TODO: fix the sha generating https://gitlab.com/gitlab-org/gitlab/-/issues/209000 + evidence.summary_sha = Gitlab::CryptoHelper.sha256(summary) + + evidence.save! + end + + private + + attr_reader :release + end +end diff --git a/app/services/releases/create_service.rb b/app/services/releases/create_service.rb index 81ca9d6d123..92a0b875dd4 100644 --- a/app/services/releases/create_service.rb +++ b/app/services/releases/create_service.rb @@ -9,11 +9,16 @@ module Releases return error('Release already exists', 409) if release return error("Milestone(s) not found: #{inexistent_milestones.join(', ')}", 400) if inexistent_milestones.any? + # should be found before the creation of new tag + # because tag creation can spawn new pipeline + # which won't have any data for evidence yet + evidence_pipeline = find_evidence_pipeline + tag = ensure_tag return tag unless tag.is_a?(Gitlab::Git::Tag) - create_release(tag) + create_release(tag, evidence_pipeline) end def find_or_build_release @@ -42,13 +47,15 @@ module Releases Ability.allowed?(current_user, :create_release, project) end - def create_release(tag) + def create_release(tag, evidence_pipeline) release = build_release(tag) release.save! notify_create_release(release) + create_evidence!(release, evidence_pipeline) + success(tag: tag, release: release) rescue => e error(e.message, 400) @@ -70,5 +77,27 @@ module Releases milestones: milestones ) end + + def find_evidence_pipeline + # TODO: remove this with the release creation moved to it's own form https://gitlab.com/gitlab-org/gitlab/-/issues/214245 + return params[:evidence_pipeline] if params[:evidence_pipeline] + + sha = existing_tag&.dereferenced_target&.sha + sha ||= repository.commit(ref)&.sha + + return unless sha + + project.ci_pipelines.for_sha(sha).last + end + + def create_evidence!(release, pipeline) + return if release.historical_release? + + if release.upcoming_release? + CreateEvidenceWorker.perform_at(release.released_at, release.id, pipeline&.id) + else + CreateEvidenceWorker.perform_async(release.id, pipeline&.id) + end + end end end |