From ae38358310cb9ea613b3a08781158308e0dc4551 Mon Sep 17 00:00:00 2001 From: Mayra Cabrera Date: Tue, 9 Apr 2019 16:47:13 -0500 Subject: [PATCH 1/6] Adds a way to start multiple manual jobs in stage - Adds an endpoint on PipelinesController - Adds a service that iterates over every build in a stage and plays it. - Includes 'play_manual' details on EntitySerializer - Builds a new Stage state: PlayManual. An stage can take this status if it has manual builds or an skipped, scheduled or manual status - Includes FE modifications and specs --- .../components/graph/graph_component.vue | 1 + .../graph/stage_column_component.vue | 25 ++++- app/assets/stylesheets/pages/pipelines.scss | 1 + .../projects/pipelines_controller.rb | 17 +++- app/helpers/gitlab_routing_helper.rb | 6 ++ app/models/ci/legacy_stage.rb | 8 ++ app/models/ci/pipeline.rb | 4 + app/models/ci/stage.rb | 4 + app/models/concerns/has_status.rb | 4 + app/serializers/stage_entity.rb | 8 +- .../stages/detailed_status_entity.rb | 9 ++ app/serializers/stages/play_manual_entity.rb | 9 ++ .../ci/play_stage_manual_builds_service.rb | 25 +++++ .../unreleased/28741-play-all-manual-jobs.yml | 5 + config/routes/project.rb | 1 + lib/gitlab/ci/status/stage/common.rb | 4 + lib/gitlab/ci/status/stage/factory.rb | 3 +- lib/gitlab/ci/status/stage/play_manual.rb | 46 +++++++++ locale/gitlab.pot | 3 + .../projects/pipelines_controller_spec.rb | 43 +++++++++ .../projects/pipelines/pipeline_spec.rb | 6 ++ .../graph/stage_column_component_spec.js | 49 ++++++++++ .../gitlab/ci/status/stage/factory_spec.rb | 18 ++++ .../ci/status/stage/play_manual_spec.rb | 95 +++++++++++++++++++ spec/models/ci/pipeline_spec.rb | 28 ++++++ spec/models/ci/stage_spec.rb | 31 +++++- spec/models/concerns/has_status_spec.rb | 24 +++++ spec/serializers/pipeline_serializer_spec.rb | 4 +- spec/serializers/stage_entity_spec.rb | 16 ++++ .../play_stage_manual_builds_service_spec.rb | 49 ++++++++++ 30 files changed, 539 insertions(+), 7 deletions(-) create mode 100644 app/serializers/stages/detailed_status_entity.rb create mode 100644 app/serializers/stages/play_manual_entity.rb create mode 100644 app/services/ci/play_stage_manual_builds_service.rb create mode 100644 changelogs/unreleased/28741-play-all-manual-jobs.yml create mode 100644 lib/gitlab/ci/status/stage/play_manual.rb create mode 100644 spec/lib/gitlab/ci/status/stage/play_manual_spec.rb create mode 100644 spec/services/ci/play_stage_manual_builds_service_spec.rb diff --git a/app/assets/javascripts/pipelines/components/graph/graph_component.vue b/app/assets/javascripts/pipelines/components/graph/graph_component.vue index a49dc311bd0..62b81d8d937 100644 --- a/app/assets/javascripts/pipelines/components/graph/graph_component.vue +++ b/app/assets/javascripts/pipelines/components/graph/graph_component.vue @@ -24,6 +24,7 @@ export default { :groups="stage.groups" :stage-connector-class="stageConnectorClass(index, stage)" :is-first-column="isFirstColumn(index)" + :action="stage.play_manual_details" @refreshPipelineGraph="refreshPipelineGraph" /> diff --git a/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue b/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue index 348c407f1b5..7e611b93087 100644 --- a/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue +++ b/app/assets/javascripts/pipelines/components/graph/stage_column_component.vue @@ -3,11 +3,13 @@ import _ from 'underscore'; import stageColumnMixin from 'ee_else_ce/pipelines/mixins/stage_column_mixin'; import JobItem from './job_item.vue'; import JobGroupDropdown from './job_group_dropdown.vue'; +import ActionComponent from './action_component.vue'; export default { components: { JobItem, JobGroupDropdown, + ActionComponent, }, mixins: [stageColumnMixin], props: { @@ -29,6 +31,16 @@ export default { required: false, default: '', }, + action: { + type: Object, + required: false, + default: () => ({}), + }, + }, + computed: { + hasAction() { + return !_.isEmpty(this.action); + }, }, methods: { groupId(group) { @@ -42,7 +54,18 @@ export default {