From 8b5c2a4525819c6b18f422b4baa0f6568286909b Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 18 Mar 2020 21:09:22 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 6 ++- app/models/service.rb | 1 + bin/background_jobs | 2 +- bin/background_jobs_sk | 2 +- bin/background_jobs_sk_cluster | 2 +- ...ice-project-type-uniqueness-validation.yml | 5 ++ .../img/label_based_stage_vsm_v12_9.png | Bin 0 -> 26700 bytes .../analytics/img/new_vsm_stage_v12_9.png | Bin 0 -> 15154 bytes .../analytics/img/vsm_stage_list_v12_9.png | Bin 0 -> 28784 bytes doc/user/analytics/value_stream_analytics.md | 50 ++++++++++++++++++ .../gitlab/import_export/complex/project.json | 2 +- .../gitlab/import_export/light/project.json | 4 +- spec/models/service_spec.rb | 8 +++ 13 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/207385-service-project-type-uniqueness-validation.yml create mode 100644 doc/user/analytics/img/label_based_stage_vsm_v12_9.png create mode 100644 doc/user/analytics/img/new_vsm_stage_v12_9.png create mode 100644 doc/user/analytics/img/vsm_stage_list_v12_9.png diff --git a/.rubocop.yml b/.rubocop.yml index ebc27c4cc9e..a05fffe8740 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -299,7 +299,11 @@ RSpec/ImplicitSubject: Enabled: false RSpec/LeakyConstantDeclaration: - Enabled: false + Enabled: true + Exclude: + - 'spec/**/*.rb' + - 'ee/spec/**/*.rb' + - 'qa/spec/**/*.rb' RSpec/EmptyLineAfterHook: Enabled: false diff --git a/app/models/service.rb b/app/models/service.rb index d866eeb3531..5782fab3266 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -34,6 +34,7 @@ class Service < ApplicationRecord validates :project_id, presence: true, unless: -> { template? || instance? } validates :project_id, absence: true, if: -> { template? || instance? } + validates :type, uniqueness: { scope: :project_id }, unless: -> { template? || instance? }, on: :create validates :type, presence: true validates :template, uniqueness: { scope: :type }, if: -> { template? } validates :instance, uniqueness: { scope: :type }, if: -> { instance? } diff --git a/bin/background_jobs b/bin/background_jobs index b3d7cc04d4f..598d36abde6 100755 --- a/bin/background_jobs +++ b/bin/background_jobs @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash cd $(dirname $0)/.. diff --git a/bin/background_jobs_sk b/bin/background_jobs_sk index 25218718bb8..131cfe116ff 100755 --- a/bin/background_jobs_sk +++ b/bin/background_jobs_sk @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash cd $(dirname $0)/.. app_root=$(pwd) diff --git a/bin/background_jobs_sk_cluster b/bin/background_jobs_sk_cluster index 9f44bb7381f..1982fd0810d 100755 --- a/bin/background_jobs_sk_cluster +++ b/bin/background_jobs_sk_cluster @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash cd $(dirname $0)/.. app_root=$(pwd) diff --git a/changelogs/unreleased/207385-service-project-type-uniqueness-validation.yml b/changelogs/unreleased/207385-service-project-type-uniqueness-validation.yml new file mode 100644 index 00000000000..93f55ae6312 --- /dev/null +++ b/changelogs/unreleased/207385-service-project-type-uniqueness-validation.yml @@ -0,0 +1,5 @@ +--- +title: Validate uniqueness of project_id and type when a new project service is created +merge_request: 26308 +author: +type: fixed diff --git a/doc/user/analytics/img/label_based_stage_vsm_v12_9.png b/doc/user/analytics/img/label_based_stage_vsm_v12_9.png new file mode 100644 index 0000000000000000000000000000000000000000..f1cbd9e1a8e27fd0b05dbb27463ab39e25318bd1 GIT binary patch literal 26700 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 ZAub`_rfLM1Y@Qf78`B~g-<9kQ}B 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 literal 0 HcmV?d00001 diff --git a/doc/user/analytics/img/vsm_stage_list_v12_9.png b/doc/user/analytics/img/vsm_stage_list_v12_9.png new file mode 100644 index 0000000000000000000000000000000000000000..3775cdeddb452d4fb24e89f7334cec2db5adccac GIT binary patch literal 28784 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 ujHg9{&{l?7R(-hx@_96%V)pd;mY1hG?)YC9 Value Stream** +1. Click the "Add a stage" button. +1. Fill in the new stage form: + - Name: Issue start to finish + - Start event: Issue created + - End event: Issue closed +1. Click the "Add stage" button. + +![New Value Stream Analytics Stage](img/new_vsm_stage_v12_9.png "Form for creating a new stage") + +The new stage is persisted and it will always show up on the value stream analytics page for your group. In case you want to alter or delete the stage you can easily do that for customized stages by hovering over the stage and clicking the three-dot icon that appears. + +![Value Stream Analytics Stages](img/vsm_stage_list_v12_9.png) + +Creating a custom stage requires specifying two events, a start and an end. Be careful to choose a start event that occurs *before* your end event. For example, consider if a stage started when an issue is added to a board, and ended when the issue is created. This stage would not work because the end event has already happened when the start event occurs. To prevent such invalid stages, the form prohibits incompatible start and end events. After you select the start event, the stop event dropdown will only list the compatible events. + +Note: The ability to re-order the stages is a [planned enhancement](https://gitlab.com/gitlab-org/gitlab/issues/196698). + +### Label based stages + +The pre-defined start and end events can cover many use cases involving both issues and merge requests. For supporting more complex workflows, we can use stages based on group labels. These events are based on labels being added/removed. In particular, [scoped labels](../project/labels.md#scoped-labels-premium) are useful for complex workflows. + +In this example we'd like to measure more accurate code review times. The workflow is the following: + +- When the code review starts, the reviewer adds `workflow::code_review_start` label to the merge request. +- When the code review is finished, the reviewer adds `workflow::code_review_complete` label to the merge request. + +Creating a new stage called "Code Review": + +![New Label Based Value Stream Analytics Stage](img/label_based_stage_vsm_v12_9.png "Creating a label based Value Stream Analytics Stage") + +### Hiding unused stages + +Sometimes certain default stages are not relevant to a team. In this case you can easily hide stages so they no longer appear in the list. First, add a custom stage to activate customizability. Then hover over the default stage you want to hide, click the three-dot icon that appears and select "Hide stage". + +To recover a default stage that was previously hidden: + +1. Click "Add a stage" button. +1. In the top right corner open the "Recover hidden stage" dropdown. +1. Select a stage. + ## Days to completion chart > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21631) in GitLab 12.6. diff --git a/spec/fixtures/lib/gitlab/import_export/complex/project.json b/spec/fixtures/lib/gitlab/import_export/complex/project.json index 72ed8b818d8..0fbe33a3f8a 100644 --- a/spec/fixtures/lib/gitlab/import_export/complex/project.json +++ b/spec/fixtures/lib/gitlab/import_export/complex/project.json @@ -7312,7 +7312,7 @@ "tag_push_events": true, "note_events": true, "job_events": true, - "type": "AssemblaService", + "type": "AsanaService", "category": "common", "default": false, "wiki_page_events": true diff --git a/spec/fixtures/lib/gitlab/import_export/light/project.json b/spec/fixtures/lib/gitlab/import_export/light/project.json index 51e2e9ac623..c0ef3690d27 100644 --- a/spec/fixtures/lib/gitlab/import_export/light/project.json +++ b/spec/fixtures/lib/gitlab/import_export/light/project.json @@ -125,7 +125,7 @@ }, { "id": 101, - "title": "JetBrains TeamCity CI", + "title": "Jira", "project_id": 5, "created_at": "2016-06-14T15:01:51.315Z", "updated_at": "2016-06-14T15:01:51.315Z", @@ -139,7 +139,7 @@ "tag_push_events": true, "note_events": true, "job_events": true, - "type": "TeamcityService", + "type": "JiraService", "category": "ci", "default": false, "wiki_page_events": true diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb index d0673b21329..7c80b5231d1 100644 --- a/spec/models/service_spec.rb +++ b/spec/models/service_spec.rb @@ -56,6 +56,14 @@ describe Service do expect(build(:service, :instance)).to be_invalid end end + + it 'validates uniqueness of type and project_id on create' do + project = create(:project) + + expect(create(:service, project: project, type: 'Service')).to be_valid + expect(build(:service, project: project, type: 'Service').valid?(:create)).to eq(false) + expect(build(:service, project: project, type: 'Service').valid?(:update)).to eq(true) + end end describe 'Scopes' do