Commit 7dbc73af authored by Stan Hu's avatar Stan Hu

Merge branch 'forward_deployment_enabled-api' into 'master'

Support ci_forward_deployment_enabled in edit project API

See merge request gitlab-org/gitlab!44510
parents e3c914ef d1b8743e
...@@ -76,9 +76,9 @@ module Projects ...@@ -76,9 +76,9 @@ module Projects
[ [
:runners_token, :builds_enabled, :build_allow_git_fetch, :runners_token, :builds_enabled, :build_allow_git_fetch,
:build_timeout_human_readable, :build_coverage_regex, :public_builds, :build_timeout_human_readable, :build_coverage_regex, :public_builds,
:auto_cancel_pending_pipelines, :forward_deployment_enabled, :ci_config_path, :auto_cancel_pending_pipelines, :ci_config_path,
auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy], auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy],
ci_cd_settings_attributes: [:default_git_depth] ci_cd_settings_attributes: [:default_git_depth, :forward_deployment_enabled]
].tap do |list| ].tap do |list|
list << :max_artifacts_size if can?(current_user, :update_max_artifacts_size, project) list << :max_artifacts_size if can?(current_user, :update_max_artifacts_size, project)
end end
......
...@@ -70,7 +70,7 @@ class Deployment < ApplicationRecord ...@@ -70,7 +70,7 @@ class Deployment < ApplicationRecord
end end
after_transition any => :running do |deployment| after_transition any => :running do |deployment|
next unless deployment.project.forward_deployment_enabled? next unless deployment.project.ci_forward_deployment_enabled?
deployment.run_after_commit do deployment.run_after_commit do
Deployments::DropOlderDeploymentsWorker.perform_async(id) Deployments::DropOlderDeploymentsWorker.perform_async(id)
......
...@@ -400,7 +400,7 @@ class Project < ApplicationRecord ...@@ -400,7 +400,7 @@ class Project < ApplicationRecord
delegate :external_dashboard_url, to: :metrics_setting, allow_nil: true, prefix: true delegate :external_dashboard_url, to: :metrics_setting, allow_nil: true, prefix: true
delegate :dashboard_timezone, to: :metrics_setting, allow_nil: true, prefix: true delegate :dashboard_timezone, to: :metrics_setting, allow_nil: true, prefix: true
delegate :default_git_depth, :default_git_depth=, to: :ci_cd_settings, prefix: :ci delegate :default_git_depth, :default_git_depth=, to: :ci_cd_settings, prefix: :ci
delegate :forward_deployment_enabled, :forward_deployment_enabled=, :forward_deployment_enabled?, to: :ci_cd_settings delegate :forward_deployment_enabled, :forward_deployment_enabled=, :forward_deployment_enabled?, to: :ci_cd_settings, prefix: :ci
delegate :actual_limits, :actual_plan_name, to: :namespace, allow_nil: true delegate :actual_limits, :actual_plan_name, to: :namespace, allow_nil: true
delegate :allow_merge_on_skipped_pipeline, :allow_merge_on_skipped_pipeline?, delegate :allow_merge_on_skipped_pipeline, :allow_merge_on_skipped_pipeline?,
:allow_merge_on_skipped_pipeline=, :has_confluence?, :allow_merge_on_skipped_pipeline=, :has_confluence?,
......
...@@ -90,12 +90,13 @@ ...@@ -90,12 +90,13 @@
.form-group .form-group
.form-check .form-check
= f.check_box :forward_deployment_enabled, { class: 'form-check-input' } = f.fields_for :ci_cd_settings_attributes, @project.ci_cd_settings do |form|
= f.label :forward_deployment_enabled, class: 'form-check-label' do = form.check_box :forward_deployment_enabled, { class: 'form-check-input' }
%strong= _("Skip outdated deployment jobs") = form.label :forward_deployment_enabled, class: 'form-check-label' do
.form-text.text-muted %strong= _("Skip outdated deployment jobs")
= _("When a deployment job is successful, skip older deployment jobs that are still pending") .form-text.text-muted
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'skip-outdated-deployment-jobs'), target: '_blank' = _("When a deployment job is successful, skip older deployment jobs that are still pending")
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings', anchor: 'skip-outdated-deployment-jobs'), target: '_blank'
%hr %hr
.form-group .form-group
......
---
title: Support ci_forward_deployment_enabled in edit API
merge_request: 44510
author:
type: added
...@@ -440,6 +440,7 @@ Example response: ...@@ -440,6 +440,7 @@ Example response:
"import_status":"failed", "import_status":"failed",
"open_issues_count":10, "open_issues_count":10,
"ci_default_git_depth":50, "ci_default_git_depth":50,
"ci_forward_deployment_enabled":true,
"public_jobs":true, "public_jobs":true,
"build_timeout":3600, "build_timeout":3600,
"auto_cancel_pending_pipelines":"enabled", "auto_cancel_pending_pipelines":"enabled",
......
...@@ -156,6 +156,7 @@ When the user is authenticated and `simple` is not set this returns something li ...@@ -156,6 +156,7 @@ When the user is authenticated and `simple` is not set this returns something li
"star_count": 0, "star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02", "runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 50, "ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
...@@ -248,6 +249,7 @@ When the user is authenticated and `simple` is not set this returns something li ...@@ -248,6 +249,7 @@ When the user is authenticated and `simple` is not set this returns something li
"star_count": 0, "star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02", "runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 0, "ci_default_git_depth": 0,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
...@@ -410,6 +412,7 @@ This endpoint supports [keyset pagination](README.md#keyset-based-pagination) fo ...@@ -410,6 +412,7 @@ This endpoint supports [keyset pagination](README.md#keyset-based-pagination) fo
"star_count": 0, "star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02", "runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 50, "ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
...@@ -502,6 +505,7 @@ This endpoint supports [keyset pagination](README.md#keyset-based-pagination) fo ...@@ -502,6 +505,7 @@ This endpoint supports [keyset pagination](README.md#keyset-based-pagination) fo
"star_count": 0, "star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02", "runners_token": "b8547b1dc37721d05889db52fa2f02",
"ci_default_git_depth": 0, "ci_default_git_depth": 0,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
...@@ -856,6 +860,7 @@ GET /projects/:id ...@@ -856,6 +860,7 @@ GET /projects/:id
"star_count": 0, "star_count": 0,
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b", "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50, "ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [ "shared_with_groups": [
{ {
...@@ -1218,6 +1223,7 @@ PUT /projects/:id ...@@ -1218,6 +1223,7 @@ PUT /projects/:id
| `build_coverage_regex` | string | no | Test coverage parsing | | `build_coverage_regex` | string | no | Test coverage parsing |
| `ci_config_path` | string | no | The path to CI configuration file | | `ci_config_path` | string | no | The path to CI configuration file |
| `ci_default_git_depth` | integer | no | Default number of revisions for [shallow cloning](../ci/pipelines/settings.md#git-shallow-clone) | | `ci_default_git_depth` | integer | no | Default number of revisions for [shallow cloning](../ci/pipelines/settings.md#git-shallow-clone) |
| `ci_forward_deployment_enabled` | boolean | no | When a new deployment job starts, [skip older deployment jobs](../ci/pipelines/settings.md#skip-outdated-deployment-jobs) that are still pending |
| `auto_devops_enabled` | boolean | no | Enable Auto DevOps for this project | | `auto_devops_enabled` | boolean | no | Enable Auto DevOps for this project |
| `auto_devops_deploy_strategy` | string | no | Auto Deploy strategy (`continuous`, `manual` or `timed_incremental`) | | `auto_devops_deploy_strategy` | string | no | Auto Deploy strategy (`continuous`, `manual` or `timed_incremental`) |
| `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins | | `repository_storage` | string | no | Which storage shard the repository is on. Available only to admins |
...@@ -1701,6 +1707,7 @@ Example response: ...@@ -1701,6 +1707,7 @@ Example response:
"star_count": 0, "star_count": 0,
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b", "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50, "ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
...@@ -1811,6 +1818,7 @@ Example response: ...@@ -1811,6 +1818,7 @@ Example response:
"star_count": 0, "star_count": 0,
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b", "runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"ci_default_git_depth": 50, "ci_default_git_depth": 50,
"ci_forward_deployment_enabled": true,
"public_jobs": true, "public_jobs": true,
"shared_with_groups": [], "shared_with_groups": [],
"only_allow_merge_if_pipeline_succeeds": false, "only_allow_merge_if_pipeline_succeeds": false,
......
...@@ -84,6 +84,7 @@ module API ...@@ -84,6 +84,7 @@ module API
expose :open_issues_count, if: lambda { |project, options| project.feature_available?(:issues, options[:current_user]) } expose :open_issues_count, if: lambda { |project, options| project.feature_available?(:issues, options[:current_user]) }
expose :runners_token, if: lambda { |_project, options| options[:user_can_admin_project] } expose :runners_token, if: lambda { |_project, options| options[:user_can_admin_project] }
expose :ci_default_git_depth expose :ci_default_git_depth
expose :ci_forward_deployment_enabled
expose :public_builds, as: :public_jobs expose :public_builds, as: :public_jobs
expose :build_git_strategy, if: lambda { |project, options| options[:user_can_admin_project] } do |project, options| expose :build_git_strategy, if: lambda { |project, options| options[:user_can_admin_project] } do |project, options|
project.build_allow_git_fetch ? 'fetch' : 'clone' project.build_allow_git_fetch ? 'fetch' : 'clone'
......
...@@ -83,9 +83,18 @@ module API ...@@ -83,9 +83,18 @@ module API
params :optional_filter_params_ee do params :optional_filter_params_ee do
end end
params :optional_update_params_ce do
optional :ci_forward_deployment_enabled, type: Boolean, desc: 'Skip older deployment jobs that are still pending'
end
params :optional_update_params_ee do params :optional_update_params_ee do
end end
params :optional_update_params do
use :optional_update_params_ce
use :optional_update_params_ee
end
params :optional_container_expiration_policy_params do params :optional_container_expiration_policy_params do
optional :cadence, type: String, desc: 'Container expiration policy cadence for recurring job' optional :cadence, type: String, desc: 'Container expiration policy cadence for recurring job'
optional :keep_n, type: String, desc: 'Container expiration policy number of images to keep' optional :keep_n, type: String, desc: 'Container expiration policy number of images to keep'
...@@ -108,6 +117,7 @@ module API ...@@ -108,6 +117,7 @@ module API
:builds_access_level, :builds_access_level,
:ci_config_path, :ci_config_path,
:ci_default_git_depth, :ci_default_git_depth,
:ci_forward_deployment_enabled,
:container_registry_enabled, :container_registry_enabled,
:container_expiration_policy_attributes, :container_expiration_policy_attributes,
:default_branch, :default_branch,
......
...@@ -353,7 +353,7 @@ module API ...@@ -353,7 +353,7 @@ module API
optional :path, type: String, desc: 'The path of the repository' optional :path, type: String, desc: 'The path of the repository'
use :optional_project_params use :optional_project_params
use :optional_update_params_ee use :optional_update_params
at_least_one_of(*Helpers::ProjectsHelpers.update_params_at_least_one_of) at_least_one_of(*Helpers::ProjectsHelpers.update_params_at_least_one_of)
end end
......
...@@ -230,6 +230,21 @@ RSpec.describe Projects::Settings::CiCdController do ...@@ -230,6 +230,21 @@ RSpec.describe Projects::Settings::CiCdController do
end end
end end
context 'when forward_deployment_enabled is not specified' do
let(:params) { { ci_cd_settings_attributes: { forward_deployment_enabled: false } } }
before do
project.ci_cd_settings.update!(forward_deployment_enabled: nil)
end
it 'sets forward deployment enabled' do
subject
project.reload
expect(project.ci_forward_deployment_enabled).to eq(false)
end
end
context 'when max_artifacts_size is specified' do context 'when max_artifacts_size is specified' do
let(:params) { { max_artifacts_size: 10 } } let(:params) { { max_artifacts_size: 10 } }
......
...@@ -64,7 +64,7 @@ RSpec.describe "Projects > Settings > Pipelines settings" do ...@@ -64,7 +64,7 @@ RSpec.describe "Projects > Settings > Pipelines settings" do
it 'updates forward_deployment_enabled' do it 'updates forward_deployment_enabled' do
visit project_settings_ci_cd_path(project) visit project_settings_ci_cd_path(project)
checkbox = find_field('project_forward_deployment_enabled') checkbox = find_field('project_ci_cd_settings_attributes_forward_deployment_enabled')
expect(checkbox).to be_checked expect(checkbox).to be_checked
checkbox.set(false) checkbox.set(false)
...@@ -79,7 +79,7 @@ RSpec.describe "Projects > Settings > Pipelines settings" do ...@@ -79,7 +79,7 @@ RSpec.describe "Projects > Settings > Pipelines settings" do
expect(page).to have_button('Save changes', disabled: false) expect(page).to have_button('Save changes', disabled: false)
end end
checkbox = find_field('project_forward_deployment_enabled') checkbox = find_field('project_ci_cd_settings_attributes_forward_deployment_enabled')
expect(checkbox).not_to be_checked expect(checkbox).not_to be_checked
end end
......
...@@ -1615,6 +1615,7 @@ RSpec.describe API::Projects do ...@@ -1615,6 +1615,7 @@ RSpec.describe API::Projects do
expect(json_response['allow_merge_on_skipped_pipeline']).to eq(project.allow_merge_on_skipped_pipeline) expect(json_response['allow_merge_on_skipped_pipeline']).to eq(project.allow_merge_on_skipped_pipeline)
expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved) expect(json_response['only_allow_merge_if_all_discussions_are_resolved']).to eq(project.only_allow_merge_if_all_discussions_are_resolved)
expect(json_response['ci_default_git_depth']).to eq(project.ci_default_git_depth) expect(json_response['ci_default_git_depth']).to eq(project.ci_default_git_depth)
expect(json_response['ci_forward_deployment_enabled']).to eq(project.ci_forward_deployment_enabled)
expect(json_response['merge_method']).to eq(project.merge_method.to_s) expect(json_response['merge_method']).to eq(project.merge_method.to_s)
expect(json_response['readme_url']).to eq(project.readme_url) expect(json_response['readme_url']).to eq(project.readme_url)
expect(json_response).to have_key 'packages_enabled' expect(json_response).to have_key 'packages_enabled'
...@@ -2607,6 +2608,7 @@ RSpec.describe API::Projects do ...@@ -2607,6 +2608,7 @@ RSpec.describe API::Projects do
merge_requests_enabled: true, merge_requests_enabled: true,
merge_method: 'ff', merge_method: 'ff',
ci_default_git_depth: 20, ci_default_git_depth: 20,
ci_forward_deployment_enabled: false,
description: 'new description' } description: 'new description' }
put api("/projects/#{project3.id}", user4), params: project_param put api("/projects/#{project3.id}", user4), params: project_param
......
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