Commit 906b79c4 authored by Jaime Martinez's avatar Jaime Martinez Committed by Shinya Maeda

Add asset links to release CLI commands

parent c6059630
---
title: Add asset links to release keyword
merge_request: 60896
author:
type: added
...@@ -18,8 +18,9 @@ module Gitlab ...@@ -18,8 +18,9 @@ module Gitlab
command = BASE_COMMAND.dup command = BASE_COMMAND.dup
single_flags.each { |k, v| command.concat(" --#{k.to_s.dasherize} \"#{v}\"") } single_flags.each { |k, v| command.concat(" --#{k.to_s.dasherize} \"#{v}\"") }
array_commands.each { |k, v| v.each { |elem| command.concat(" --#{k.to_s.singularize.dasherize} \"#{elem}\"") } } array_commands.each { |k, v| v.each { |elem| command.concat(" --#{k.to_s.singularize.dasherize} \"#{elem}\"") } }
asset_links.each { |link| command.concat(" --assets-link #{stringified_json(link)}") }
[command] [command.freeze]
end end
private private
...@@ -31,6 +32,14 @@ module Gitlab ...@@ -31,6 +32,14 @@ module Gitlab
def array_commands def array_commands
config.slice(*ARRAY_FLAGS) config.slice(*ARRAY_FLAGS)
end end
def asset_links
config.dig(:assets, :links) || []
end
def stringified_json(object)
"#{object.to_json.to_json}"
end
end end
end end
end end
......
...@@ -431,7 +431,8 @@ FactoryBot.define do ...@@ -431,7 +431,8 @@ FactoryBot.define do
name: 'Release $CI_COMMIT_SHA', name: 'Release $CI_COMMIT_SHA',
description: 'Created using the release-cli $EXTRA_DESCRIPTION', description: 'Created using the release-cli $EXTRA_DESCRIPTION',
tag_name: 'release-$CI_COMMIT_SHA', tag_name: 'release-$CI_COMMIT_SHA',
ref: '$CI_COMMIT_SHA' ref: '$CI_COMMIT_SHA',
assets: { links: [{ name: 'asset1', url: 'https://example.com/assets/1' }] }
} }
} }
end end
......
...@@ -15,18 +15,25 @@ RSpec.describe Gitlab::Ci::Build::Releaser do ...@@ -15,18 +15,25 @@ RSpec.describe Gitlab::Ci::Build::Releaser do
tag_name: 'release-$CI_COMMIT_SHA', tag_name: 'release-$CI_COMMIT_SHA',
ref: '$CI_COMMIT_SHA', ref: '$CI_COMMIT_SHA',
milestones: %w[m1 m2 m3], milestones: %w[m1 m2 m3],
released_at: '2020-07-15T08:00:00Z' released_at: '2020-07-15T08:00:00Z',
assets: {
links: [
{ name: 'asset1', url: 'https://example.com/assets/1', link_type: 'other', filepath: '/pretty/asset/1' },
{ name: 'asset2', url: 'https://example.com/assets/2' }
]
}
} }
} }
end end
it 'generates the script' do it 'generates the script' do
expect(subject).to eq(['release-cli create --name "Release $CI_COMMIT_SHA" --description "Created using the release-cli $EXTRA_DESCRIPTION" --tag-name "release-$CI_COMMIT_SHA" --ref "$CI_COMMIT_SHA" --released-at "2020-07-15T08:00:00Z" --milestone "m1" --milestone "m2" --milestone "m3"']) expect(subject).to eq(['release-cli create --name "Release $CI_COMMIT_SHA" --description "Created using the release-cli $EXTRA_DESCRIPTION" --tag-name "release-$CI_COMMIT_SHA" --ref "$CI_COMMIT_SHA" --released-at "2020-07-15T08:00:00Z" --milestone "m1" --milestone "m2" --milestone "m3" --assets-link "{\"name\":\"asset1\",\"url\":\"https://example.com/assets/1\",\"link_type\":\"other\",\"filepath\":\"/pretty/asset/1\"}" --assets-link "{\"name\":\"asset2\",\"url\":\"https://example.com/assets/2\"}"'])
end end
end end
context 'individual nodes' do context 'individual nodes' do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
links = { links: [{ name: 'asset1', url: 'https://example.com/assets/1', link_type: 'other', filepath: '/pretty/asset/1' }] }
where(:node_name, :node_value, :result) do where(:node_name, :node_value, :result) do
:name | 'Release $CI_COMMIT_SHA' | 'release-cli create --name "Release $CI_COMMIT_SHA"' :name | 'Release $CI_COMMIT_SHA' | 'release-cli create --name "Release $CI_COMMIT_SHA"'
...@@ -35,6 +42,7 @@ RSpec.describe Gitlab::Ci::Build::Releaser do ...@@ -35,6 +42,7 @@ RSpec.describe Gitlab::Ci::Build::Releaser do
:ref | '$CI_COMMIT_SHA' | 'release-cli create --ref "$CI_COMMIT_SHA"' :ref | '$CI_COMMIT_SHA' | 'release-cli create --ref "$CI_COMMIT_SHA"'
:milestones | %w[m1 m2 m3] | 'release-cli create --milestone "m1" --milestone "m2" --milestone "m3"' :milestones | %w[m1 m2 m3] | 'release-cli create --milestone "m1" --milestone "m2" --milestone "m3"'
:released_at | '2020-07-15T08:00:00Z' | 'release-cli create --released-at "2020-07-15T08:00:00Z"' :released_at | '2020-07-15T08:00:00Z' | 'release-cli create --released-at "2020-07-15T08:00:00Z"'
:assets | links | "release-cli create --assets-link #{links[:links][0].to_json.to_json}"
end end
with_them do with_them do
......
...@@ -62,7 +62,7 @@ RSpec.describe Gitlab::Ci::Build::Step do ...@@ -62,7 +62,7 @@ RSpec.describe Gitlab::Ci::Build::Step do
let(:job) { create(:ci_build, :release_options) } let(:job) { create(:ci_build, :release_options) }
it 'returns the release-cli command line' do it 'returns the release-cli command line' do
expect(subject.script).to eq(["release-cli create --name \"Release $CI_COMMIT_SHA\" --description \"Created using the release-cli $EXTRA_DESCRIPTION\" --tag-name \"release-$CI_COMMIT_SHA\" --ref \"$CI_COMMIT_SHA\""]) expect(subject.script).to eq(["release-cli create --name \"Release $CI_COMMIT_SHA\" --description \"Created using the release-cli $EXTRA_DESCRIPTION\" --tag-name \"release-$CI_COMMIT_SHA\" --ref \"$CI_COMMIT_SHA\" --assets-link \"{\\\"name\\\":\\\"asset1\\\",\\\"url\\\":\\\"https://example.com/assets/1\\\"}\""])
end end
end end
......
...@@ -378,7 +378,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do ...@@ -378,7 +378,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do
{ {
"name" => "release", "name" => "release",
"script" => "script" =>
["release-cli create --name \"Release $CI_COMMIT_SHA\" --description \"Created using the release-cli $EXTRA_DESCRIPTION\" --tag-name \"release-$CI_COMMIT_SHA\" --ref \"$CI_COMMIT_SHA\""], ["release-cli create --name \"Release $CI_COMMIT_SHA\" --description \"Created using the release-cli $EXTRA_DESCRIPTION\" --tag-name \"release-$CI_COMMIT_SHA\" --ref \"$CI_COMMIT_SHA\" --assets-link \"{\\\"url\\\":\\\"https://example.com/assets/1\\\",\\\"name\\\":\\\"asset1\\\"}\""],
"timeout" => 3600, "timeout" => 3600,
"when" => "on_success", "when" => "on_success",
"allow_failure" => false "allow_failure" => false
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment