Commit b76d37c2 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'fix-retries-on-manual-actions' into 'master'

Fix two small problems on how we handle manual actions

## What does this MR do?
Fixes two small problems in how we handle manual actions:
- On environments page we show a `Play` for the same action that is lately deployed, we should show other actions only
- When we process a pipeline that have only a manual action in a stage, the pipeline will stop being processed.

- Tests
  - [ ] Added for this feature/bug
  - [ ] All builds are passing
- [ ] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [ ] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)


See merge request !5366
parent ed3cda00
...@@ -97,7 +97,7 @@ module Ci ...@@ -97,7 +97,7 @@ module Ci
end end
def other_actions def other_actions
pipeline.manual_actions.where.not(id: self) pipeline.manual_actions.where.not(name: name)
end end
def playable? def playable?
......
...@@ -217,8 +217,9 @@ module Ci ...@@ -217,8 +217,9 @@ module Ci
# build builds only for the first stage that has builds available. # build builds only for the first stage that has builds available.
# #
stages.any? do |stage| stages.any? do |stage|
CreateBuildsService.new(self) CreateBuildsService.new(self).
.execute(stage, user, status, trigger_request).present? execute(stage, user, status, trigger_request).
any?(&:active?)
end end
end end
......
...@@ -811,6 +811,22 @@ describe Ci::Build, models: true do ...@@ -811,6 +811,22 @@ describe Ci::Build, models: true do
it 'returns other actions' do it 'returns other actions' do
is_expected.to contain_exactly(other_build) is_expected.to contain_exactly(other_build)
end end
context 'when build is retried' do
let!(:new_build) { Ci::Build.retry(build) }
it 'does not return any of them' do
is_expected.not_to include(build, new_build)
end
end
context 'when other build is retried' do
let!(:retried_build) { Ci::Build.retry(other_build) }
it 'returns a retried build' do
is_expected.to contain_exactly(retried_build)
end
end
end end
describe '#play' do describe '#play' do
......
...@@ -264,7 +264,7 @@ describe Ci::Pipeline, models: true do ...@@ -264,7 +264,7 @@ describe Ci::Pipeline, models: true do
context 'when listing manual actions' do context 'when listing manual actions' do
let(:yaml) do let(:yaml) do
{ {
stages: ["build", "test", "test_failure", "deploy", "cleanup"], stages: ["build", "test", "staging", "production", "cleanup"],
build: { build: {
stage: "build", stage: "build",
script: "BUILD", script: "BUILD",
...@@ -273,17 +273,12 @@ describe Ci::Pipeline, models: true do ...@@ -273,17 +273,12 @@ describe Ci::Pipeline, models: true do
stage: "test", stage: "test",
script: "TEST", script: "TEST",
}, },
test_failure: { staging: {
stage: "test_failure", stage: "staging",
script: "ON test failure",
when: "on_failure",
},
deploy: {
stage: "deploy",
script: "PUBLISH", script: "PUBLISH",
}, },
production: { production: {
stage: "deploy", stage: "production",
script: "PUBLISH", script: "PUBLISH",
when: "manual", when: "manual",
}, },
...@@ -311,11 +306,18 @@ describe Ci::Pipeline, models: true do ...@@ -311,11 +306,18 @@ describe Ci::Pipeline, models: true do
# succeed stage test # succeed stage test
pipeline.builds.running_or_pending.each(&:success) pipeline.builds.running_or_pending.each(&:success)
expect(manual_actions).to be_one # production expect(manual_actions).to be_empty
# succeed stage deploy # succeed stage staging and skip stage production
pipeline.builds.running_or_pending.each(&:success) pipeline.builds.running_or_pending.each(&:success)
expect(manual_actions).to be_many # production and clear cache expect(manual_actions).to be_many # production and clear cache
# succeed stage cleanup
pipeline.builds.running_or_pending.each(&:success)
# after processing a pipeline we should have 6 builds, 5 succeeded
expect(pipeline.builds.count).to eq(6)
expect(pipeline.builds.success.count).to eq(4)
end end
def manual_actions def manual_actions
......
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