From 3c267c74c125892a53654fa45a31a42c9fcfbecc Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Wed, 5 Jul 2017 14:38:54 -0500 Subject: [PATCH] Port of feature/intermediate/32568-adding-variables-to-pipelines-schedules to EE See https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12372 --- .../pipeline_schedule_form_bundle.js | 3 + .../setup_pipeline_variable_list.js | 71 +++++ .../stylesheets/framework/variables.scss | 6 + .../stylesheets/pages/pipeline_schedules.scss | 62 ++++ .../projects/pipeline_schedules_controller.rb | 15 +- app/models/ci/build.rb | 1 + app/models/ci/pipeline_schedule.rb | 8 + app/models/ci/pipeline_schedule_variable.rb | 10 + app/policies/ci/pipeline_schedule_policy.rb | 21 ++ .../variable_duplicates_validator.rb | 13 + .../pipeline_schedules/_form.html.haml | 8 + .../_variable_row.html.haml | 16 + ...dding-variables-to-pipelines-schedules.yml | 4 + ...8_create_ci_pipeline_schedule_variables.rb | 25 ++ ...n_key_to_ci_pipeline_schedule_variables.rb | 15 + db/schema.rb | 24 +- doc/ci/variables/README.md | 2 +- .../img/pipeline_schedule_variables.png | Bin 0 -> 13478 bytes .../img/pipeline_schedules_new_form.png | Bin 49873 -> 72501 bytes doc/user/project/pipelines/schedules.md | 10 + locale/en/gitlab.po | 62 +++- locale/gitlab.pot | 26 +- .../pipeline_schedules_controller_spec.rb | 300 +++++++++++++++--- .../ci/pipeline_schedule_variables.rb | 8 + .../projects/pipeline_schedules_spec.rb | 95 +++++- .../setup_pipeline_variable_list_spec.js | 145 +++++++++ spec/lib/gitlab/import_export/all_models.yml | 3 + spec/models/ci/build_spec.rb | 17 + spec/models/ci/pipeline_schedule_spec.rb | 17 + .../ci/pipeline_schedule_variable_spec.rb | 8 + .../access_matchers_for_controller.rb | 28 +- 31 files changed, 948 insertions(+), 75 deletions(-) create mode 100644 app/assets/javascripts/pipeline_schedules/setup_pipeline_variable_list.js create mode 100644 app/models/ci/pipeline_schedule_variable.rb create mode 100644 app/validators/variable_duplicates_validator.rb create mode 100644 app/views/projects/pipeline_schedules/_variable_row.html.haml create mode 100644 changelogs/unreleased/feature-intermediate-32568-adding-variables-to-pipelines-schedules.yml create mode 100644 db/migrate/20170620064728_create_ci_pipeline_schedule_variables.rb create mode 100644 db/migrate/20170620065449_add_foreign_key_to_ci_pipeline_schedule_variables.rb create mode 100644 doc/user/project/pipelines/img/pipeline_schedule_variables.png create mode 100644 spec/factories/ci/pipeline_schedule_variables.rb create mode 100644 spec/javascripts/pipeline_schedules/setup_pipeline_variable_list_spec.js create mode 100644 spec/models/ci/pipeline_schedule_variable_spec.rb diff --git a/app/assets/javascripts/pipeline_schedules/pipeline_schedule_form_bundle.js b/app/assets/javascripts/pipeline_schedules/pipeline_schedule_form_bundle.js index b424e7f205d438..50c725aa3d5495 100644 --- a/app/assets/javascripts/pipeline_schedules/pipeline_schedule_form_bundle.js +++ b/app/assets/javascripts/pipeline_schedules/pipeline_schedule_form_bundle.js @@ -3,6 +3,7 @@ import Translate from '../vue_shared/translate'; import intervalPatternInput from './components/interval_pattern_input.vue'; import TimezoneDropdown from './components/timezone_dropdown'; import TargetBranchDropdown from './components/target_branch_dropdown'; +import { setupPipelineVariableList } from './setup_pipeline_variable_list'; Vue.use(Translate); @@ -39,4 +40,6 @@ document.addEventListener('DOMContentLoaded', () => { gl.timezoneDropdown = new TimezoneDropdown(); gl.targetBranchDropdown = new TargetBranchDropdown(); gl.pipelineScheduleFieldErrors = new gl.GlFieldErrors(formElement); + + setupPipelineVariableList($('.js-pipeline-variable-list')); }); diff --git a/app/assets/javascripts/pipeline_schedules/setup_pipeline_variable_list.js b/app/assets/javascripts/pipeline_schedules/setup_pipeline_variable_list.js new file mode 100644 index 00000000000000..644efd10509b08 --- /dev/null +++ b/app/assets/javascripts/pipeline_schedules/setup_pipeline_variable_list.js @@ -0,0 +1,71 @@ +function insertRow($row) { + const $rowClone = $row.clone(); + $rowClone.removeAttr('data-is-persisted'); + $rowClone.find('input, textarea').val(''); + $row.after($rowClone); +} + +function removeRow($row) { + const isPersisted = gl.utils.convertPermissionToBoolean($row.attr('data-is-persisted')); + + if (isPersisted) { + $row.hide(); + $row + .find('.js-destroy-input') + .val(1); + } else { + $row.remove(); + } +} + +function checkIfRowTouched($row) { + return $row.find('.js-user-input').toArray().some(el => $(el).val().length > 0); +} + +function setupPipelineVariableList(parent = document) { + const $parent = $(parent); + + $parent.on('click', '.js-row-remove-button', (e) => { + const $row = $(e.currentTarget).closest('.js-row'); + removeRow($row); + + e.preventDefault(); + }); + + // Remove any empty rows except the last r + $parent.on('blur', '.js-user-input', (e) => { + const $row = $(e.currentTarget).closest('.js-row'); + + const isTouched = checkIfRowTouched($row); + if ($row.is(':not(:last-child)') && !isTouched) { + removeRow($row); + } + }); + + // Always make sure there is an empty last row + $parent.on('input', '.js-user-input', () => { + const $lastRow = $parent.find('.js-row').last(); + + const isTouched = checkIfRowTouched($lastRow); + if (isTouched) { + insertRow($lastRow); + } + }); + + // Clear out the empty last row so it + // doesn't get submitted and throw validation errors + $parent.closest('form').on('submit', () => { + const $lastRow = $parent.find('.js-row').last(); + + const isTouched = checkIfRowTouched($lastRow); + if (!isTouched) { + $lastRow.find('input, textarea').attr('name', ''); + } + }); +} + +export { + setupPipelineVariableList, + insertRow, + removeRow, +}; diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index d2dd156633b733..fb889af3175c6c 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -579,6 +579,12 @@ $stage-hover-bg: #eaf3fc; $stage-hover-border: #d1e7fc; $action-icon-color: #d6d6d6; +/* +Pipeline Schedules +*/ +$pipeline-variable-remove-button-width: calc(1em + #{2 * $gl-padding}); + + /* Filtered Search */ diff --git a/app/assets/stylesheets/pages/pipeline_schedules.scss b/app/assets/stylesheets/pages/pipeline_schedules.scss index 595eb40fec71d6..b3743a7c88dd1c 100644 --- a/app/assets/stylesheets/pages/pipeline_schedules.scss +++ b/app/assets/stylesheets/pages/pipeline_schedules.scss @@ -74,3 +74,65 @@ margin-right: 3px; } } + +.pipeline-variable-list { + margin-left: 0; + margin-bottom: 0; + padding-left: 0; +} + +.pipeline-variable-row { + display: flex; + + &:not(:last-child) { + margin-bottom: $gl-btn-padding; + } + + @media (max-width: $screen-xs-max) { + flex-wrap: wrap; + } + + &:last-child { + & > .pipeline-variable-row-remove-button { + display: none; + } + + & > .pipeline-variable-value-input { + margin-right: $pipeline-variable-remove-button-width; + } + } +} + +.pipeline-variable-key-input { + margin-right: $gl-btn-padding; + + @media (max-width: $screen-xs-max) { + margin-right: $pipeline-variable-remove-button-width; + margin-bottom: $gl-btn-padding; + } +} + +.pipeline-variable-value-input { + @media (max-width: $screen-xs-max) { + flex: 1; + } +} + +.pipeline-variable-row-remove-button { + flex-shrink: 0; + display: flex; + justify-content: center; + align-items: center; + width: $pipeline-variable-remove-button-width; + padding: 0; + background: transparent; + border: 0; + color: $gl-text-color-secondary; + @include transition(color); + + &:hover, + &:focus { + outline: none; + color: $gl-text-color; + } +} diff --git a/app/controllers/projects/pipeline_schedules_controller.rb b/app/controllers/projects/pipeline_schedules_controller.rb index 60db179277b574..aa71f6066577b4 100644 --- a/app/controllers/projects/pipeline_schedules_controller.rb +++ b/app/controllers/projects/pipeline_schedules_controller.rb @@ -1,11 +1,11 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController + before_action :schedule, except: [:index, :new, :create] + before_action :authorize_read_pipeline_schedule! before_action :authorize_create_pipeline_schedule!, only: [:new, :create] - before_action :authorize_update_pipeline_schedule!, only: [:edit, :take_ownership, :update] + before_action :authorize_update_pipeline_schedule!, except: [:index, :new, :create] before_action :authorize_admin_pipeline_schedule!, only: [:destroy] - before_action :schedule, only: [:edit, :update, :destroy, :take_ownership] - def index @scope = params[:scope] @all_schedules = PipelineSchedulesFinder.new(@project).execute @@ -53,7 +53,7 @@ def destroy redirect_to pipeline_schedules_path(@project), status: 302 else redirect_to pipeline_schedules_path(@project), - status: 302, + status: :forbidden, alert: _("Failed to remove the pipeline schedule") end end @@ -66,6 +66,11 @@ def schedule def schedule_params params.require(:schedule) - .permit(:description, :cron, :cron_timezone, :ref, :active) + .permit(:description, :cron, :cron_timezone, :ref, :active, + variables_attributes: [:id, :key, :value, :_destroy] ) + end + + def authorize_update_pipeline_schedule! + return access_denied! unless can?(current_user, :update_pipeline_schedule, schedule) end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 179a17c1545546..24fa5b8ab5eff7 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -204,6 +204,7 @@ def variables(environment: persisted_environment) variables += secret_variables(environment: environment) variables += trigger_request.user_variables if trigger_request variables += persisted_environment_variables if environment + variables += pipeline.pipeline_schedule.job_variables if pipeline.pipeline_schedule variables end diff --git a/app/models/ci/pipeline_schedule.rb b/app/models/ci/pipeline_schedule.rb index 45d8cd34359b8e..e4ae1b35f66f6e 100644 --- a/app/models/ci/pipeline_schedule.rb +++ b/app/models/ci/pipeline_schedule.rb @@ -9,17 +9,21 @@ class PipelineSchedule < ActiveRecord::Base belongs_to :owner, class_name: 'User' has_one :last_pipeline, -> { order(id: :desc) }, class_name: 'Ci::Pipeline' has_many :pipelines + has_many :variables, class_name: 'Ci::PipelineScheduleVariable' validates :cron, unless: :importing?, cron: true, presence: { unless: :importing? } validates :cron_timezone, cron_timezone: true, presence: { unless: :importing? } validates :ref, presence: { unless: :importing? } validates :description, presence: true + validates :variables, variable_duplicates: true before_save :set_next_run_at scope :active, -> { where(active: true) } scope :inactive, -> { where(active: false) } + accepts_nested_attributes_for :variables, allow_destroy: true + def owned_by?(current_user) owner == current_user end @@ -56,5 +60,9 @@ def real_next_run( Gitlab::Ci::CronParser.new(worker_cron, worker_time_zone) .next_time_from(next_run_at) end + + def job_variables + variables&.map(&:to_runner_variable) || [] + end end end diff --git a/app/models/ci/pipeline_schedule_variable.rb b/app/models/ci/pipeline_schedule_variable.rb new file mode 100644 index 00000000000000..ee5b8733facee7 --- /dev/null +++ b/app/models/ci/pipeline_schedule_variable.rb @@ -0,0 +1,10 @@ +module Ci + class PipelineScheduleVariable < ActiveRecord::Base + extend Ci::Model + include HasVariable + + belongs_to :pipeline_schedule + + validates :key, uniqueness: { scope: :pipeline_schedule_id } + end +end diff --git a/app/policies/ci/pipeline_schedule_policy.rb b/app/policies/ci/pipeline_schedule_policy.rb index 1877e89bb23f1c..db561dafbd34a1 100644 --- a/app/policies/ci/pipeline_schedule_policy.rb +++ b/app/policies/ci/pipeline_schedule_policy.rb @@ -1,4 +1,25 @@ module Ci class PipelineSchedulePolicy < PipelinePolicy + alias_method :pipeline_schedule, :subject + + condition(:protected_action) do + owned_by_developer? && owned_by_another? + end + + rule { protected_action }.prevent :update_pipeline_schedule + + private + + def owned_by_developer? + return false unless @user + + pipeline_schedule.project.team.developer?(@user) + end + + def owned_by_another? + return false unless @user + + !pipeline_schedule.owned_by?(@user) + end end end diff --git a/app/validators/variable_duplicates_validator.rb b/app/validators/variable_duplicates_validator.rb new file mode 100644 index 00000000000000..8a9d8892e9bd40 --- /dev/null +++ b/app/validators/variable_duplicates_validator.rb @@ -0,0 +1,13 @@ +# VariableDuplicatesValidator +# +# This validtor is designed for especially the following condition +# - Use `accepts_nested_attributes_for :xxx` in a parent model +# - Use `validates :xxx, uniqueness: { scope: :xxx_id }` in a child model +class VariableDuplicatesValidator < ActiveModel::EachValidator + def validate_each(record, attribute, value) + duplicates = value.reject(&:marked_for_destruction?).group_by(&:key).select { |_, v| v.many? }.map(&:first) + if duplicates.any? + record.errors.add(attribute, "Duplicate variables: #{duplicates.join(", ")}") + end + end +end diff --git a/app/views/projects/pipeline_schedules/_form.html.haml b/app/views/projects/pipeline_schedules/_form.html.haml index fc7fa5c1876792..bafb0013f91cff 100644 --- a/app/views/projects/pipeline_schedules/_form.html.haml +++ b/app/views/projects/pipeline_schedules/_form.html.haml @@ -22,6 +22,14 @@ = f.label :ref, _('Target Branch'), class: 'label-light' = dropdown_tag(_("Select target branch"), options: { toggle_class: 'btn js-target-branch-dropdown', dropdown_class: 'git-revision-dropdown', title: _("Select target branch"), filter: true, placeholder: s_("OfSearchInADropdown|Filter"), data: { data: @project.repository.branch_names, default_branch: @project.default_branch } } ) = f.text_field :ref, value: @schedule.ref, id: 'schedule_ref', class: 'hidden', name: 'schedule[ref]', required: true + .form-group + .col-md-9 + %label.label-light + #{ s_('PipelineSchedules|Variables') } + %ul.js-pipeline-variable-list.pipeline-variable-list + - @schedule.variables.each do |variable| + = render 'variable_row', id: variable.id, key: variable.key, value: variable.value + = render 'variable_row' .form-group .col-md-9 = f.label :active, s_('PipelineSchedules|Activated'), class: 'label-light' diff --git a/app/views/projects/pipeline_schedules/_variable_row.html.haml b/app/views/projects/pipeline_schedules/_variable_row.html.haml new file mode 100644 index 00000000000000..68713561f258ab --- /dev/null +++ b/app/views/projects/pipeline_schedules/_variable_row.html.haml @@ -0,0 +1,16 @@ +- id = local_assigns.fetch(:id, nil) +- key = local_assigns.fetch(:key, "") +- value = local_assigns.fetch(:value, "") +%li.js-row.pipeline-variable-row{ data: { is_persisted: "#{!id.nil?}" } } + %input{ type: "hidden", name: "schedule[variables_attributes][][id]", value: id } + %input.js-destroy-input{ type: "hidden", name: "schedule[variables_attributes][][_destroy]" } + %input.js-user-input.pipeline-variable-key-input.form-control{ type: "text", + name: "schedule[variables_attributes][][key]", + value: key, + placeholder: s_('PipelineSchedules|Input variable key') } + %textarea.js-user-input.pipeline-variable-value-input.form-control{ rows: 1, + name: "schedule[variables_attributes][][value]", + placeholder: s_('PipelineSchedules|Input variable value') } + = value + %button.js-row-remove-button.pipeline-variable-row-remove-button{ 'aria-label': s_('PipelineSchedules|Remove variable row') } + %i.fa.fa-minus-circle{ 'aria-hidden': "true" } diff --git a/changelogs/unreleased/feature-intermediate-32568-adding-variables-to-pipelines-schedules.yml b/changelogs/unreleased/feature-intermediate-32568-adding-variables-to-pipelines-schedules.yml new file mode 100644 index 00000000000000..d497575b7f3c78 --- /dev/null +++ b/changelogs/unreleased/feature-intermediate-32568-adding-variables-to-pipelines-schedules.yml @@ -0,0 +1,4 @@ +--- +title: Add variables to pipelines schedules +merge_request: 12372 +author: diff --git a/db/migrate/20170620064728_create_ci_pipeline_schedule_variables.rb b/db/migrate/20170620064728_create_ci_pipeline_schedule_variables.rb new file mode 100644 index 00000000000000..92833765a82745 --- /dev/null +++ b/db/migrate/20170620064728_create_ci_pipeline_schedule_variables.rb @@ -0,0 +1,25 @@ +class CreateCiPipelineScheduleVariables < ActiveRecord::Migration + DOWNTIME = false + + def up + create_table :ci_pipeline_schedule_variables do |t| + t.string :key, null: false + t.text :value + t.text :encrypted_value + t.string :encrypted_value_salt + t.string :encrypted_value_iv + t.integer :pipeline_schedule_id, null: false + + t.timestamps_with_timezone null: true + end + + add_index :ci_pipeline_schedule_variables, + [:pipeline_schedule_id, :key], + name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", + unique: true + end + + def down + drop_table :ci_pipeline_schedule_variables + end +end diff --git a/db/migrate/20170620065449_add_foreign_key_to_ci_pipeline_schedule_variables.rb b/db/migrate/20170620065449_add_foreign_key_to_ci_pipeline_schedule_variables.rb new file mode 100644 index 00000000000000..7bbf66e0ac392a --- /dev/null +++ b/db/migrate/20170620065449_add_foreign_key_to_ci_pipeline_schedule_variables.rb @@ -0,0 +1,15 @@ +class AddForeignKeyToCiPipelineScheduleVariables < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_foreign_key(:ci_pipeline_schedule_variables, :ci_pipeline_schedules, column: :pipeline_schedule_id) + end + + def down + remove_foreign_key(:ci_pipeline_schedule_variables, column: :pipeline_schedule_id) + end +end diff --git a/db/schema.rb b/db/schema.rb index 98034d638c788d..784c7d175bbadc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -136,12 +136,12 @@ t.integer "cached_markdown_version" t.boolean "clientside_sentry_enabled", default: false, null: false t.string "clientside_sentry_dsn" - t.boolean "prometheus_metrics_enabled", default: false, null: false t.boolean "check_namespace_plan", default: false, null: false t.integer "mirror_max_delay", default: 5, null: false t.integer "mirror_max_capacity", default: 100, null: false t.integer "mirror_capacity_threshold", default: 50, null: false t.boolean "authorized_keys_enabled", default: true, null: false + t.boolean "prometheus_metrics_enabled", default: false, null: false t.boolean "help_page_hide_commercial_content", default: false t.string "help_page_support_url" end @@ -288,9 +288,9 @@ t.string "coverage_regex" t.integer "auto_canceled_by_id" t.boolean "retried" - t.integer "stage_id" t.integer "artifacts_file_store", default: 1, null: false t.integer "artifacts_metadata_store", default: 1, null: false + t.integer "stage_id" end add_index "ci_builds", ["auto_canceled_by_id"], name: "index_ci_builds_on_auto_canceled_by_id", using: :btree @@ -307,6 +307,19 @@ add_index "ci_builds", ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree add_index "ci_builds", ["user_id"], name: "index_ci_builds_on_user_id", using: :btree + create_table "ci_pipeline_schedule_variables", force: :cascade do |t| + t.string "key", null: false + t.text "value" + t.text "encrypted_value" + t.string "encrypted_value_salt" + t.string "encrypted_value_iv" + t.integer "pipeline_schedule_id", null: false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "ci_pipeline_schedule_variables", ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree + create_table "ci_pipeline_schedules", force: :cascade do |t| t.string "description" t.string "ref" @@ -615,8 +628,8 @@ t.text "deleted_path", null: false t.text "deleted_wiki_path" t.text "deleted_project_name", null: false - t.datetime_with_timezone "created_at", null: false - t.datetime_with_timezone "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false end add_index "geo_repository_deleted_events", ["project_id"], name: "index_geo_repository_deleted_events_on_project_id", using: :btree @@ -1805,8 +1818,8 @@ t.string "token" t.boolean "pipeline_events", default: false, null: false t.boolean "confidential_issues_events", default: false, null: false - t.boolean "repository_update_events", default: false, null: false t.boolean "job_events", default: false, null: false + t.boolean "repository_update_events", default: false, null: false end add_index "web_hooks", ["project_id"], name: "index_web_hooks_on_project_id", using: :btree @@ -1817,6 +1830,7 @@ add_foreign_key "chat_teams", "namespaces", on_delete: :cascade add_foreign_key "ci_builds", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_a2141b1522", on_delete: :nullify add_foreign_key "ci_builds", "ci_stages", column: "stage_id", name: "fk_3a9eaa254d", on_delete: :cascade + add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade add_foreign_key "ci_pipeline_schedules", "projects", name: "fk_8ead60fcc4", on_delete: :cascade add_foreign_key "ci_pipeline_schedules", "users", column: "owner_id", name: "fk_9ea99f58d2", on_delete: :nullify add_foreign_key "ci_pipelines", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_3d34ab2e06", on_delete: :nullify diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md index 328b2b70f2f221..25360ac574a890 100644 --- a/doc/ci/variables/README.md +++ b/doc/ci/variables/README.md @@ -9,7 +9,7 @@ and a list of **user-defined variables**. The variables can be overwritten and they take precedence over each other in this order: -1. [Trigger variables][triggers] (take precedence over all) +1. [Trigger variables][triggers] or [scheduled pipeline variables](../../user/project/pipelines/schedules.md#making-use-of-scheduled-pipeline-variables) (take precedence over all) 1. [Secret variables](#secret-variables) or [protected secret variables](#protected-secret-variables) 1. YAML-defined [job-level variables](../yaml/README.md#job-variables) 1. YAML-defined [global variables](../yaml/README.md#variables) diff --git a/doc/user/project/pipelines/img/pipeline_schedule_variables.png b/doc/user/project/pipelines/img/pipeline_schedule_variables.png new file mode 100644 index 0000000000000000000000000000000000000000..47a0c6f3697337ddf90e78a3ec834f6e736083f0 GIT binary patch literal 13478 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ⅈ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

FzI~97 zva0%X_?7I#_%&vaY&O39{_v;v_qOTx_uJMy{rg`m%+dbqTmJuEhgNRbUy+gjB#$s&&%4LueV-yH|g|0r9FGEOj(>_yCr`4$2ZpOs=CYm{s@*Bm+2e33J^PKy@iXmri@v|Rn|L!hdHbtxQ9nZy-#p84m>T%T zL?$q`=J@4_pSZp6hPlRm%^hpR2d3d1CBb^f_ApMfK`)IyZ_8_LO?2 zSrnhV_94^w)8&6_gT##wN1wII@xT1C{63HVj>9W<`{&=1s(VcC1)E zN%`%&)}L-xYWF8fpW9ns`s1+Q*{cEtW`CXuJ$?W2!|6+LYW{HoiDlpJPVe1vFLBBL zFNu%qN}EN?iz~LCdi^K7)T+8@dY9zA?JqNa`LuDg}>ZgTYD{5+%E&;E!XI&Syd z;LoZ@%TK-dH~p~utlYq=<_}pLH$UoacyaWo!xj70ygE0MzQu0);V*A?I^>s4?yXr% zZH!d=tH0!if7SnU(r)GSoe#tJMj!59ZF6tG>75-f3s;`*Z||>3b^CC2;)lnF{(iK| zd~H^o)BP!Z>gSgqRtM!5ueC~P+xY9I-ed8~*qxDYeZM|lrE~wvSJz)x{Bt@D^n0zo zZh5zRYkchSC3&u|9=!Z;OS!PPv*sTtqhcZ z^S9>5myI7@{q9Y7csF@{+jhJ3^~Ync?7ZxLh+n&H+w-G>XV1Sd_WS+4MZSN_eAb8I z(&zM(r(T_r>;ERSHtcKJrZ2)fKZ}?AoMRcb{8e?@k5=DTJ2PyQr{4K+Q#mc}spOIw zbL*nNhtE7Ob>8-A>ix}H=XdUk`?CCPWX=6MsoToG{(1Lh&Yg7I^U5FfI_;c^J!mwL6E{EOps^9)~!_E0$7r$*i`|avl{q~%$JEr%0P5jl9?T7RC@AjYmvdLF%`L@ds zZO=#6Jc;~uJG}R~^O-F-RJ|_$nmlFy&G;4Dw%>Zw9Aa%y;eFH7E^KykYv01B=VZ!l z{yjRqD@QqVlFk0CBBNg?Eu;{N`10gl>3^Y0zc*EvEBric zBmZ7AOw8Jv_%irj*SE;!XDi~bew@|0)8YS(X9oAZ=aN~Lt*gMHkg z)qe}lpKOb+3DG_0bkAF>Phi&UJs;jrh@8)Q`f2ZWuciEz+m}CH=YDkmuIbx*D!G%- zJ8jw4!DoN8ImK97UglqrU+fO1>!&h{%0A!!RNpB3^BCKY3+A~MkN@fy{yabF<8PbF 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 diff --git a/doc/user/project/pipelines/schedules.md b/doc/user/project/pipelines/schedules.md index 17cc21238ff391..258b3a2f9555f7 100644 --- a/doc/user/project/pipelines/schedules.md +++ b/doc/user/project/pipelines/schedules.md @@ -31,6 +31,15 @@ is installed on. ![Schedules list](img/pipeline_schedules_list.png) +### Making use of scheduled pipeline variables + +> [Introduced][ce-12328] in GitLab 9.4. + +You can pass any number of arbitrary variables and they will be available in +GitLab CI so that they can be used in your `.gitlab-ci.yml` file. + +![Scheduled pipeline variables](img/pipeline_schedule_variables.png) + ## Using only and except To configure that a job can be executed only when the pipeline has been @@ -79,4 +88,5 @@ don't have admin access to the server, ask your administrator. [ce-10533]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/10533 [ce-10853]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/10853 +[ce-12328]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12328 [settings]: https://about.gitlab.com/gitlab-com/settings/#cron-jobs diff --git a/locale/en/gitlab.po b/locale/en/gitlab.po index afb8fb3176fdad..7af4d9db9155c9 100644 --- a/locale/en/gitlab.po +++ b/locale/en/gitlab.po @@ -17,6 +17,16 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "\n" +msgid "%d additional commit has been omitted to prevent performance issues." +msgid_plural "%d additional commits have been omitted to prevent performance issues." +msgstr[0] "" +msgstr[1] "" + +msgid "%d commit" +msgid_plural "%d commits" +msgstr[0] "" +msgstr[1] "" + msgid "%{commit_author_link} committed %{commit_timeago}" msgstr "" @@ -61,9 +71,24 @@ msgstr[1] "" msgid "Branch %{branch_name} was created. To set up auto deploy, choose a GitLab CI Yaml template and commit your changes. %{link_to_autodeploy_doc}" msgstr "" +msgid "BranchSwitcherPlaceholder|Search branches" +msgstr "" + +msgid "BranchSwitcherTitle|Switch branch" +msgstr "" + msgid "Branches" msgstr "" +msgid "Browse Directory" +msgstr "" + +msgid "Browse File" +msgstr "" + +msgid "Browse Files" +msgstr "" + msgid "Browse files" msgstr "" @@ -171,6 +196,9 @@ msgstr "" msgid "Commits" msgstr "" +msgid "Commits feed" +msgstr "" + msgid "Commits|History" msgstr "" @@ -195,6 +223,9 @@ msgstr "" msgid "Create New Directory" msgstr "" +msgid "Create a personal access token on your account to pull or push via %{protocol}." +msgstr "" + msgid "Create directory" msgstr "" @@ -213,6 +244,9 @@ msgstr "" msgid "CreateTag|Tag" msgstr "" +msgid "CreateTokenToCloneLink|create a personal access token" +msgstr "" + msgid "Cron Timezone" msgstr "" @@ -323,6 +357,9 @@ msgstr "" msgid "Files" msgstr "" +msgid "Filter by commit message" +msgstr "" + msgid "Find by path" msgstr "" @@ -547,6 +584,12 @@ msgstr "" msgid "PipelineSchedules|Inactive" msgstr "" +msgid "PipelineSchedules|Input variable key" +msgstr "" + +msgid "PipelineSchedules|Input variable value" +msgstr "" + msgid "PipelineSchedules|Next Run" msgstr "" @@ -556,12 +599,18 @@ msgstr "" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "" +msgid "PipelineSchedules|Remove variable row" +msgstr "" + msgid "PipelineSchedules|Take ownership" msgstr "" msgid "PipelineSchedules|Target" msgstr "" +msgid "PipelineSchedules|Variables" +msgstr "" + msgid "PipelineSheduleIntervalPattern|Custom" msgstr "" @@ -688,7 +737,7 @@ msgstr "" msgid "Select target branch" msgstr "" -msgid "Set a password on your account to pull or push via %{protocol}" +msgid "Set a password on your account to pull or push via %{protocol}." msgstr "" msgid "Set up CI" @@ -714,10 +763,7 @@ msgstr "" msgid "StarProject|Star" msgstr "" -msgid "Start a %{new_merge_request} with these changes" -msgstr "" - -msgid "Start a new merge request with these changes" +msgid "Start a %{new_merge_request} with these changes" msgstr "" msgid "Switch branch/tag" @@ -948,9 +994,15 @@ msgstr "" msgid "Upload file" msgstr "" +msgid "UploadLink|click to upload" +msgstr "" + msgid "Use your global notification setting" msgstr "" +msgid "View open merge request" +msgstr "" + msgid "VisibilityLevel|Internal" msgstr "" diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 07f9efeb4957d7..68bedf1e3482f6 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: gitlab 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-06-19 15:50-0500\n" -"PO-Revision-Date: 2017-06-19 15:50-0500\n" +"POT-Creation-Date: 2017-07-05 14:24-0500\n" +"PO-Revision-Date: 2017-07-05 14:24-0500\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -msgid "%d additional commit have been omitted to prevent performance issues." +msgid "%d additional commit has been omitted to prevent performance issues." msgid_plural "%d additional commits have been omitted to prevent performance issues." msgstr[0] "" msgstr[1] "" @@ -224,6 +224,9 @@ msgstr "" msgid "Create New Directory" msgstr "" +msgid "Create a personal access token on your account to pull or push via %{protocol}." +msgstr "" + msgid "Create directory" msgstr "" @@ -242,6 +245,9 @@ msgstr "" msgid "CreateTag|Tag" msgstr "" +msgid "CreateTokenToCloneLink|create a personal access token" +msgstr "" + msgid "Cron Timezone" msgstr "" @@ -579,6 +585,12 @@ msgstr "" msgid "PipelineSchedules|Inactive" msgstr "" +msgid "PipelineSchedules|Input variable key" +msgstr "" + +msgid "PipelineSchedules|Input variable value" +msgstr "" + msgid "PipelineSchedules|Next Run" msgstr "" @@ -588,12 +600,18 @@ msgstr "" msgid "PipelineSchedules|Provide a short description for this pipeline" msgstr "" +msgid "PipelineSchedules|Remove variable row" +msgstr "" + msgid "PipelineSchedules|Take ownership" msgstr "" msgid "PipelineSchedules|Target" msgstr "" +msgid "PipelineSchedules|Variables" +msgstr "" + msgid "PipelineSheduleIntervalPattern|Custom" msgstr "" @@ -720,7 +738,7 @@ msgstr "" msgid "Select target branch" msgstr "" -msgid "Set a password on your account to pull or push via %{protocol}" +msgid "Set a password on your account to pull or push via %{protocol}." msgstr "" msgid "Set up CI" diff --git a/spec/controllers/projects/pipeline_schedules_controller_spec.rb b/spec/controllers/projects/pipeline_schedules_controller_spec.rb index a8c44d5c313ec4..d28dd1e3e48bf5 100644 --- a/spec/controllers/projects/pipeline_schedules_controller_spec.rb +++ b/spec/controllers/projects/pipeline_schedules_controller_spec.rb @@ -1,6 +1,8 @@ require 'spec_helper' describe Projects::PipelineSchedulesController do + include AccessMatchersForController + set(:project) { create(:empty_project, :public) } let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) } @@ -17,6 +19,14 @@ expect(response).to render_template(:index) end + it 'avoids N + 1 queries' do + control_count = ActiveRecord::QueryRecorder.new { visit_pipelines_schedules }.count + + create_list(:ci_pipeline_schedule, 2, project: project) + + expect { visit_pipelines_schedules }.not_to exceed_query_limit(control_count) + end + context 'when the scope is set to active' do let(:scope) { 'active' } @@ -36,104 +46,322 @@ def visit_pipelines_schedules end end - describe 'GET edit' do - let(:user) { create(:user) } + describe 'GET #new' do + set(:user) { create(:user) } before do - project.add_master(user) - + project.add_developer(user) sign_in(user) end - it 'loads the pipeline schedule' do - get :edit, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + it 'initializes a pipeline schedule model' do + get :new, namespace_id: project.namespace.to_param, project_id: project expect(response).to have_http_status(:ok) - expect(assigns(:schedule)).to eq(pipeline_schedule) + expect(assigns(:schedule)).to be_a_new(Ci::PipelineSchedule) end end - describe 'DELETE #destroy' do - set(:user) { create(:user) } + describe 'POST #create' do + describe 'functionality' do + set(:user) { create(:user) } - context 'when a developer makes the request' do before do project.add_developer(user) sign_in(user) + end - delete :destroy, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + let(:basic_param) do + attributes_for(:ci_pipeline_schedule) end - it 'does not delete the pipeline schedule' do - expect(response).not_to have_http_status(:ok) + context 'when variables_attributes has one variable' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ key: 'AAA', value: 'AAA123' }] + }) + end + + it 'creates a new schedule' do + expect { go } + .to change { Ci::PipelineSchedule.count }.by(1) + .and change { Ci::PipelineScheduleVariable.count }.by(1) + + expect(response).to have_http_status(:found) + + Ci::PipelineScheduleVariable.last.tap do |v| + expect(v.key).to eq("AAA") + expect(v.value).to eq("AAA123") + end + end + end + + context 'when variables_attributes has two variables and duplicted' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ key: 'AAA', value: 'AAA123' }, { key: 'AAA', value: 'BBB123' }] + }) + end + + it 'returns an error that the keys of variable are duplicated' do + expect { go } + .to change { Ci::PipelineSchedule.count }.by(0) + .and change { Ci::PipelineScheduleVariable.count }.by(0) + + expect(assigns(:schedule).errors['variables']).not_to be_empty + end end end - context 'when a master makes the request' do + describe 'security' do + let(:schedule) { attributes_for(:ci_pipeline_schedule) } + + it { expect { go }.to be_allowed_for(:admin) } + it { expect { go }.to be_allowed_for(:owner).of(project) } + it { expect { go }.to be_allowed_for(:master).of(project) } + it { expect { go }.to be_allowed_for(:developer).of(project) } + it { expect { go }.to be_denied_for(:reporter).of(project) } + it { expect { go }.to be_denied_for(:guest).of(project) } + it { expect { go }.to be_denied_for(:user) } + it { expect { go }.to be_denied_for(:external) } + it { expect { go }.to be_denied_for(:visitor) } + end + + def go + post :create, namespace_id: project.namespace.to_param, project_id: project, schedule: schedule + end + end + + describe 'PUT #update' do + describe 'functionality' do + set(:user) { create(:user) } + let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: user) } + before do - project.add_master(user) + project.add_developer(user) sign_in(user) end - it 'destroys the pipeline schedule' do - expect do - delete :destroy, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id - end.to change { project.pipeline_schedules.count }.by(-1) + context 'when a pipeline schedule has no variables' do + let(:basic_param) do + { description: 'updated_desc', cron: '0 1 * * *', cron_timezone: 'UTC', ref: 'patch-x', active: true } + end - expect(response).to have_http_status(302) + context 'when params include one variable' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ key: 'AAA', value: 'AAA123' }] + }) + end + + it 'inserts new variable to the pipeline schedule' do + expect { go }.to change { Ci::PipelineScheduleVariable.count }.by(1) + + pipeline_schedule.reload + expect(response).to have_http_status(:found) + expect(pipeline_schedule.variables.last.key).to eq('AAA') + expect(pipeline_schedule.variables.last.value).to eq('AAA123') + end + end + + context 'when params include two duplicated variables' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ key: 'AAA', value: 'AAA123' }, { key: 'AAA', value: 'BBB123' }] + }) + end + + it 'returns an error that variables are duplciated' do + go + + expect(assigns(:schedule).errors['variables']).not_to be_empty + end + end + end + + context 'when a pipeline schedule has one variable' do + let(:basic_param) do + { description: 'updated_desc', cron: '0 1 * * *', cron_timezone: 'UTC', ref: 'patch-x', active: true } + end + + let!(:pipeline_schedule_variable) do + create(:ci_pipeline_schedule_variable, + key: 'CCC', pipeline_schedule: pipeline_schedule) + end + + context 'when params include one variable' do + context 'when adds a new variable' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ key: 'AAA', value: 'AAA123' }] + }) + end + + it 'adds the new variable' do + expect { go }.to change { Ci::PipelineScheduleVariable.count }.by(1) + + pipeline_schedule.reload + expect(pipeline_schedule.variables.last.key).to eq('AAA') + end + end + + context 'when updates a variable' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ id: pipeline_schedule_variable.id, value: 'new_value' }] + }) + end + + it 'updates the variable' do + expect { go }.not_to change { Ci::PipelineScheduleVariable.count } + + pipeline_schedule_variable.reload + expect(pipeline_schedule_variable.value).to eq('new_value') + end + end + + context 'when deletes a variable' do + let(:schedule) do + basic_param.merge({ + variables_attributes: [{ id: pipeline_schedule_variable.id, _destroy: true }] + }) + end + + it 'delete the existsed variable' do + expect { go }.to change { Ci::PipelineScheduleVariable.count }.by(-1) + end + end + end end end - end - describe 'security' do - include AccessMatchersForController + describe 'security' do + let(:schedule) { { description: 'updated_desc' } } - describe 'GET edit' do it { expect { go }.to be_allowed_for(:admin) } it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { go }.to be_allowed_for(:master).of(project) } - it { expect { go }.to be_allowed_for(:developer).of(project) } + it { expect { go }.to be_allowed_for(:developer).of(project).own(pipeline_schedule) } it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { go }.to be_denied_for(:user) } it { expect { go }.to be_denied_for(:external) } it { expect { go }.to be_denied_for(:visitor) } - def go + context 'when a developer created a pipeline schedule' do + let(:developer_1) { create(:user) } + let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: developer_1) } + + before do + project.add_developer(developer_1) + end + + it { expect { go }.to be_allowed_for(developer_1) } + it { expect { go }.to be_denied_for(:developer).of(project) } + it { expect { go }.to be_allowed_for(:master).of(project) } + end + + context 'when a master created a pipeline schedule' do + let(:master_1) { create(:user) } + let!(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project, owner: master_1) } + + before do + project.add_master(master_1) + end + + it { expect { go }.to be_allowed_for(master_1) } + it { expect { go }.to be_allowed_for(:master).of(project) } + it { expect { go }.to be_denied_for(:developer).of(project) } + end + end + + def go + put :update, namespace_id: project.namespace.to_param, + project_id: project, id: pipeline_schedule, + schedule: schedule + end + end + + describe 'GET #edit' do + describe 'functionality' do + let(:user) { create(:user) } + + before do + project.add_master(user) + sign_in(user) + end + + it 'loads the pipeline schedule' do get :edit, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + + expect(response).to have_http_status(:ok) + expect(assigns(:schedule)).to eq(pipeline_schedule) end end - describe 'GET take_ownership' do + describe 'security' do it { expect { go }.to be_allowed_for(:admin) } it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { go }.to be_allowed_for(:master).of(project) } - it { expect { go }.to be_allowed_for(:developer).of(project) } + it { expect { go }.to be_allowed_for(:developer).of(project).own(pipeline_schedule) } it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { go }.to be_denied_for(:user) } it { expect { go }.to be_denied_for(:external) } it { expect { go }.to be_denied_for(:visitor) } + end - def go - post :take_ownership, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id - end + def go + get :edit, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id end + end - describe 'PUT update' do + describe 'GET #take_ownership' do + describe 'security' do it { expect { go }.to be_allowed_for(:admin) } it { expect { go }.to be_allowed_for(:owner).of(project) } it { expect { go }.to be_allowed_for(:master).of(project) } - it { expect { go }.to be_allowed_for(:developer).of(project) } + it { expect { go }.to be_allowed_for(:developer).of(project).own(pipeline_schedule) } it { expect { go }.to be_denied_for(:reporter).of(project) } it { expect { go }.to be_denied_for(:guest).of(project) } it { expect { go }.to be_denied_for(:user) } it { expect { go }.to be_denied_for(:external) } it { expect { go }.to be_denied_for(:visitor) } + end - def go - put :update, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id, - schedule: { description: 'a' } + def go + post :take_ownership, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + end + end + + describe 'DELETE #destroy' do + set(:user) { create(:user) } + + context 'when a developer makes the request' do + before do + project.add_developer(user) + sign_in(user) + + delete :destroy, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + end + + it 'does not delete the pipeline schedule' do + expect(response).to have_http_status(:not_found) + end + end + + context 'when a master makes the request' do + before do + project.add_master(user) + sign_in(user) + end + + it 'destroys the pipeline schedule' do + expect do + delete :destroy, namespace_id: project.namespace.to_param, project_id: project, id: pipeline_schedule.id + end.to change { project.pipeline_schedules.count }.by(-1) + + expect(response).to have_http_status(302) end end end diff --git a/spec/factories/ci/pipeline_schedule_variables.rb b/spec/factories/ci/pipeline_schedule_variables.rb new file mode 100644 index 00000000000000..ca64d1aada0bcd --- /dev/null +++ b/spec/factories/ci/pipeline_schedule_variables.rb @@ -0,0 +1,8 @@ +FactoryGirl.define do + factory :ci_pipeline_schedule_variable, class: Ci::PipelineScheduleVariable do + sequence(:key) { |n| "VARIABLE_#{n}" } + value 'VARIABLE_VALUE' + + pipeline_schedule factory: :ci_pipeline_schedule + end +end diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb index dfb973c37e5575..7ab6b3f0b754ec 100644 --- a/spec/features/projects/pipeline_schedules_spec.rb +++ b/spec/features/projects/pipeline_schedules_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -feature 'Pipeline Schedules', :feature do +feature 'Pipeline Schedules', :feature, js: true do include PipelineSchedulesHelper let!(:project) { create(:project) } @@ -11,27 +11,20 @@ before do project.add_master(user) - gitlab_sign_in(user) - visit_page end describe 'GET /projects/pipeline_schedules' do - let(:visit_page) { visit_pipelines_schedules } - - it 'avoids N + 1 queries' do - control_count = ActiveRecord::QueryRecorder.new { visit_pipelines_schedules }.count - - create_list(:ci_pipeline_schedule, 2, project: project) - - expect { visit_pipelines_schedules }.not_to exceed_query_limit(control_count) + before do + visit_pipelines_schedules end describe 'The view' do it 'displays the required information description' do page.within('.pipeline-schedule-table-row') do expect(page).to have_content('pipeline schedule') - expect(page).to have_content(pipeline_schedule.real_next_run.strftime('%b %d, %Y')) + expect(find(".next-run-cell time")['data-original-title']) + .to include(pipeline_schedule.real_next_run.strftime('%b %-d, %Y')) expect(page).to have_link('master') expect(page).to have_link("##{pipeline.id}") end @@ -62,7 +55,7 @@ it 'deletes the pipeline' do click_link 'Delete' - expect(page).not_to have_content('pipeline schedule') + expect(page).not_to have_css(".pipeline-schedule-table-row") end end @@ -78,8 +71,10 @@ end end - describe 'POST /projects/pipeline_schedules/new', js: true do - let(:visit_page) { visit_new_pipeline_schedule } + describe 'POST /projects/pipeline_schedules/new' do + before do + visit_new_pipeline_schedule + end it 'sets defaults for timezone and target branch' do expect(page).to have_button('master') @@ -100,8 +95,8 @@ end end - describe 'PATCH /projects/pipelines_schedules/:id/edit', js: true do - let(:visit_page) do + describe 'PATCH /projects/pipelines_schedules/:id/edit' do + before do edit_pipeline_schedule end @@ -134,6 +129,72 @@ end end + context 'when user creates a new pipeline schedule with variables' do + background do + visit_pipelines_schedules + click_link 'New schedule' + fill_in_schedule_form + all('[name="schedule[variables_attributes][][key]"]')[0].set('AAA') + all('[name="schedule[variables_attributes][][value]"]')[0].set('AAA123') + all('[name="schedule[variables_attributes][][key]"]')[1].set('BBB') + all('[name="schedule[variables_attributes][][value]"]')[1].set('BBB123') + save_pipeline_schedule + end + + scenario 'user sees the new variable in edit window' do + find(".content-list .pipeline-schedule-table-row:nth-child(1) .btn-group a[title='Edit']").click + page.within('.pipeline-variable-list') do + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-key-input").value).to eq('AAA') + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-value-input").value).to eq('AAA123') + expect(find(".pipeline-variable-row:nth-child(2) .pipeline-variable-key-input").value).to eq('BBB') + expect(find(".pipeline-variable-row:nth-child(2) .pipeline-variable-value-input").value).to eq('BBB123') + end + end + end + + context 'when user edits a variable of a pipeline schedule' do + background do + create(:ci_pipeline_schedule, project: project, owner: user).tap do |pipeline_schedule| + create(:ci_pipeline_schedule_variable, key: 'AAA', value: 'AAA123', pipeline_schedule: pipeline_schedule) + end + + visit_pipelines_schedules + find(".content-list .pipeline-schedule-table-row:nth-child(1) .btn-group a[title='Edit']").click + all('[name="schedule[variables_attributes][][key]"]')[0].set('foo') + all('[name="schedule[variables_attributes][][value]"]')[0].set('bar') + click_button 'Save pipeline schedule' + end + + scenario 'user sees the updated variable in edit window' do + find(".content-list .pipeline-schedule-table-row:nth-child(1) .btn-group a[title='Edit']").click + page.within('.pipeline-variable-list') do + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-key-input").value).to eq('foo') + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-value-input").value).to eq('bar') + end + end + end + + context 'when user removes a variable of a pipeline schedule' do + background do + create(:ci_pipeline_schedule, project: project, owner: user).tap do |pipeline_schedule| + create(:ci_pipeline_schedule_variable, key: 'AAA', value: 'AAA123', pipeline_schedule: pipeline_schedule) + end + + visit_pipelines_schedules + find(".content-list .pipeline-schedule-table-row:nth-child(1) .btn-group a[title='Edit']").click + find('.pipeline-variable-list .pipeline-variable-row-remove-button').click + click_button 'Save pipeline schedule' + end + + scenario 'user does not see the removed variable in edit window' do + find(".content-list .pipeline-schedule-table-row:nth-child(1) .btn-group a[title='Edit']").click + page.within('.pipeline-variable-list') do + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-key-input").value).to eq('') + expect(find(".pipeline-variable-row:nth-child(1) .pipeline-variable-value-input").value).to eq('') + end + end + end + def visit_new_pipeline_schedule visit new_namespace_project_pipeline_schedule_path(project.namespace, project, pipeline_schedule) end diff --git a/spec/javascripts/pipeline_schedules/setup_pipeline_variable_list_spec.js b/spec/javascripts/pipeline_schedules/setup_pipeline_variable_list_spec.js new file mode 100644 index 00000000000000..5b316b319a5615 --- /dev/null +++ b/spec/javascripts/pipeline_schedules/setup_pipeline_variable_list_spec.js @@ -0,0 +1,145 @@ +import { + setupPipelineVariableList, + insertRow, + removeRow, +} from '~/pipeline_schedules/setup_pipeline_variable_list'; + +describe('Pipeline Variable List', () => { + let $markup; + + describe('insertRow', () => { + it('should insert another row', () => { + $markup = $(`
+
  • + + +
  • +
    `); + + insertRow($markup.find('.js-row')); + + expect($markup.find('.js-row').length).toBe(2); + }); + + it('should clear `data-is-persisted` on cloned row', () => { + $markup = $(`
    +
  • +
    `); + + insertRow($markup.find('.js-row')); + + const $lastRow = $markup.find('.js-row').last(); + expect($lastRow.attr('data-is-persisted')).toBe(undefined); + }); + + it('should clear inputs on cloned row', () => { + $markup = $(`
    +
  • + + +
  • +
    `); + + insertRow($markup.find('.js-row')); + + const $lastRow = $markup.find('.js-row').last(); + expect($lastRow.find('input').val()).toBe(''); + expect($lastRow.find('textarea').val()).toBe(''); + }); + }); + + describe('removeRow', () => { + it('should remove dynamic row', () => { + $markup = $(`
    +
  • + + +
  • +
    `); + + removeRow($markup.find('.js-row')); + + expect($markup.find('.js-row').length).toBe(0); + }); + + it('should hide and mark to destroy with already persisted rows', () => { + $markup = $(`
    +
  • + +
  • +
    `); + + const $row = $markup.find('.js-row'); + removeRow($row); + + expect($row.find('.js-destroy-input').val()).toBe('1'); + expect($markup.find('.js-row').length).toBe(1); + }); + }); + + describe('setupPipelineVariableList', () => { + beforeEach(() => { + $markup = $(`
    +
  • + + + + +
  • +
    `); + + setupPipelineVariableList($markup); + }); + + it('should remove the row when clicking the remove button', () => { + $markup.find('.js-row-remove-button').trigger('click'); + + expect($markup.find('.js-row').length).toBe(0); + }); + + it('should add another row when editing the last rows key input', () => { + const $row = $markup.find('.js-row'); + $row.find('input.js-user-input') + .val('foo') + .trigger('input'); + + expect($markup.find('.js-row').length).toBe(2); + }); + + it('should add another row when editing the last rows value textarea', () => { + const $row = $markup.find('.js-row'); + $row.find('textarea.js-user-input') + .val('foo') + .trigger('input'); + + expect($markup.find('.js-row').length).toBe(2); + }); + + it('should remove empty row after blurring', () => { + const $row = $markup.find('.js-row'); + $row.find('input.js-user-input') + .val('foo') + .trigger('input'); + + expect($markup.find('.js-row').length).toBe(2); + + $row.find('input.js-user-input') + .val('') + .trigger('input') + .trigger('blur'); + + expect($markup.find('.js-row').length).toBe(1); + }); + + it('should clear out the `name` attribute on the inputs for the last empty row on form submission (avoid BE validation)', () => { + const $row = $markup.find('.js-row'); + expect($row.find('input').attr('name')).toBe('schedule[variables_attributes][][key]'); + expect($row.find('textarea').attr('name')).toBe('schedule[variables_attributes][][value]'); + + $markup.filter('form').submit(); + + expect($row.find('input').attr('name')).toBe(''); + expect($row.find('textarea').attr('name')).toBe(''); + }); + }); +}); diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index bc705b0c838891..fa7bc1987ca405 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -138,8 +138,11 @@ pipeline_schedules: - owner - pipelines - last_pipeline +- variables pipeline_schedule: - pipelines +pipeline_schedule_variables: +- pipeline_schedule deploy_keys: - user - deploy_keys_projects diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 22d2ed10ac6767..40abf485460629 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -1414,6 +1414,23 @@ def create_mr(build, pipeline, factory: :merge_request, created_at: Time.now) it { is_expected.to include(predefined_trigger_variable) } end + context 'when a job was triggered by a pipeline schedule' do + let(:pipeline_schedule) { create(:ci_pipeline_schedule, project: project) } + + let!(:pipeline_schedule_variable) do + create(:ci_pipeline_schedule_variable, + key: 'SCHEDULE_VARIABLE_KEY', + pipeline_schedule: pipeline_schedule) + end + + before do + pipeline_schedule.pipelines << pipeline + pipeline_schedule.reload + end + + it { is_expected.to include(pipeline_schedule_variable.to_runner_variable) } + end + context 'when yaml_variables are undefined' do before do build.yaml_variables = nil diff --git a/spec/models/ci/pipeline_schedule_spec.rb b/spec/models/ci/pipeline_schedule_spec.rb index 56817baf79d65d..4c3aa986bf91af 100644 --- a/spec/models/ci/pipeline_schedule_spec.rb +++ b/spec/models/ci/pipeline_schedule_spec.rb @@ -5,6 +5,7 @@ it { is_expected.to belong_to(:owner) } it { is_expected.to have_many(:pipelines) } + it { is_expected.to have_many(:variables) } it { is_expected.to respond_to(:ref) } it { is_expected.to respond_to(:cron) } @@ -117,4 +118,20 @@ end end end + + describe '#job_variables' do + let!(:pipeline_schedule) { create(:ci_pipeline_schedule) } + + let!(:pipeline_schedule_variables) do + create_list(:ci_pipeline_schedule_variable, 2, pipeline_schedule: pipeline_schedule) + end + + subject { pipeline_schedule.job_variables } + + before do + pipeline_schedule.reload + end + + it { is_expected.to eq(pipeline_schedule_variables.map(&:to_runner_variable)) } + end end diff --git a/spec/models/ci/pipeline_schedule_variable_spec.rb b/spec/models/ci/pipeline_schedule_variable_spec.rb new file mode 100644 index 00000000000000..9c0b0153e038dc --- /dev/null +++ b/spec/models/ci/pipeline_schedule_variable_spec.rb @@ -0,0 +1,8 @@ +require 'spec_helper' + +describe Ci::PipelineScheduleVariable, models: true do + subject { build(:ci_pipeline_schedule_variable) } + + it { is_expected.to include_module(HasVariable) } + it { is_expected.to validate_uniqueness_of(:key).scoped_to(:pipeline_schedule_id) } +end diff --git a/spec/support/matchers/access_matchers_for_controller.rb b/spec/support/matchers/access_matchers_for_controller.rb index fb43f51c70c48b..ff60bd0c0aeae0 100644 --- a/spec/support/matchers/access_matchers_for_controller.rb +++ b/spec/support/matchers/access_matchers_for_controller.rb @@ -50,9 +50,24 @@ def description_for(role, type, expected, result) "be #{type} for #{role}. Expected: #{expected.join(',')} Got: #{result}" end + def update_owner(objects, user) + return unless objects + + objects.each do |object| + if object.respond_to?(:owner) + object.update_attribute(:owner, user) + elsif object.respond_to?(:user) + object.update_attribute(:user, user) + else + raise ArgumentError, "cannot own this object #{object}" + end + end + end + matcher :be_allowed_for do |role| match do |action| - emulate_user(role, @membership) + user = emulate_user(role, @membership) + update_owner(@objects, user) action.call EXPECTED_STATUS_CODE_ALLOWED.include?(response.status) @@ -62,13 +77,18 @@ def description_for(role, type, expected, result) @membership = membership end + chain :own do |*objects| + @objects = objects + end + description { description_for(role, 'allowed', EXPECTED_STATUS_CODE_ALLOWED, response.status) } supports_block_expectations end matcher :be_denied_for do |role| match do |action| - emulate_user(role, @membership) + user = emulate_user(role, @membership) + update_owner(@objects, user) action.call EXPECTED_STATUS_CODE_DENIED.include?(response.status) @@ -78,6 +98,10 @@ def description_for(role, type, expected, result) @membership = membership end + chain :own do |*objects| + @objects = objects + end + description { description_for(role, 'denied', EXPECTED_STATUS_CODE_DENIED, response.status) } supports_block_expectations end -- GitLab