diff --git a/app/controllers/deploys_controller.rb b/app/controllers/deploys_controller.rb index daf37d9670..311557fcdc 100644 --- a/app/controllers/deploys_controller.rb +++ b/app/controllers/deploys_controller.rb @@ -47,8 +47,10 @@ def index end def new + defaults = {reference: @stage.default_reference} deploy_params = params.except(:project_id, :stage_id).permit(:reference).merge(stage: @stage) - @deploy = current_project.deploys.build(deploy_params) + + @deploy = current_project.deploys.build(defaults.merge(deploy_params)) end def create diff --git a/app/controllers/stages_controller.rb b/app/controllers/stages_controller.rb index aca86248b9..f8a1f1d260 100644 --- a/app/controllers/stages_controller.rb +++ b/app/controllers/stages_controller.rb @@ -121,22 +121,23 @@ def find_stage def stage_permitted_params [ - :name, + :builds_in_environment, + :cancel_queued_deploys, :confirm, - :permalink, :dashboard, - :production, - :notify_email_address, + :default_reference, :deploy_on_release, :email_committers_on_automated_deploy_failure, - :static_emails_on_automated_deploy_failure, - :no_code_deployed, :is_template, - :run_in_parallel, - :cancel_queued_deploys, - :periodical_deploy, + :name, + :no_code_deployed, :no_reference_selection, - :builds_in_environment, + :notify_email_address, + :periodical_deploy, + :permalink, + :production, + :run_in_parallel, + :static_emails_on_automated_deploy_failure, { deploy_group_ids: [], command_ids: [] diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 25aadbae87..6dfdfc3659 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -35,8 +35,10 @@ def deploy_link(project, stage) elsif Lock.locked_for?(stage, current_user) content_tag :a, "Locked", class: "btn btn-primary disabled", disabled: true elsif stage.direct? - path = project_stage_deploys_path(project, stage, deploy: {reference: "master", stage_id: stage.id}) - link_to "Deploy!", path, role: "button", class: "btn btn-warning", data: {method: :post} + path = project_stage_deploys_path( + project, stage, deploy: {reference: stage.default_reference.presence || "master", stage_id: stage.id} + ) + link_to "Deploy", path, role: "button", class: "btn btn-warning", data: {method: :post} else path = new_project_stage_deploy_path(project, stage) link_to "Deploy", path, role: "button", class: "btn btn-primary" diff --git a/app/views/deploys/new.html.erb b/app/views/deploys/new.html.erb index 9f5763d317..223d5eb87c 100644 --- a/app/views/deploys/new.html.erb +++ b/app/views/deploys/new.html.erb @@ -18,7 +18,7 @@
;
".html_safe
%>
+ <%= form.input :default_reference, help: "Default reference to deploy e.g. 'master'" %>
<% if DeployGroup.enabled? %>
<%= render 'deploy_groups/deploy_group_select', form: form %>
@@ -18,7 +19,8 @@
<%
confirm_label = "Confirm before deployment"
no_code_label = "Does not deploy code"
- no_ref_label = "When selected with '#{no_code_label}' and disabled '#{confirm_label}' the stage can be directly executed."
+ no_ref_label = "Deploys with either the 'Default Reference' value or 'master'." \
+ " When selected with '#{no_code_label}' and '#{confirm_label}' is disabled the stage can be directly executed."
%>
<% help = "Bypass " + [("buddy check" if BuddyCheck.enabled?), "release tracking"].compact.to_sentence %>
diff --git a/db/migrate/20180921170100_add_default_reference_to_stages.rb b/db/migrate/20180921170100_add_default_reference_to_stages.rb
new file mode 100644
index 0000000000..fbbde9ad5c
--- /dev/null
+++ b/db/migrate/20180921170100_add_default_reference_to_stages.rb
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+class AddDefaultReferenceToStages < ActiveRecord::Migration[5.2]
+ def change
+ add_column :stages, :default_reference, :string
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 2f7370c770..cab6a59a17 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2018_09_20_200759) do
+ActiveRecord::Schema.define(version: 2018_09_21_170100) do
create_table "audits" do |t|
t.integer "auditable_id", null: false
@@ -530,6 +530,7 @@
t.string "notify_email_address"
t.float "average_deploy_time"
t.string "prerequisite_stage_ids"
+ t.string "default_reference"
t.index ["project_id", "permalink"], name: "index_stages_on_project_id_and_permalink", unique: true, length: { permalink: 191 }
t.index ["template_stage_id"], name: "index_stages_on_template_stage_id"
end
diff --git a/test/controllers/deploys_controller_test.rb b/test/controllers/deploys_controller_test.rb
index d2eef2a0c6..7d32e21627 100644
--- a/test/controllers/deploys_controller_test.rb
+++ b/test/controllers/deploys_controller_test.rb
@@ -368,6 +368,20 @@ def changeset(overrides = {})
deploy.stage.must_equal stage
deploy.reference.must_equal "abcd"
end
+
+ describe "with default reference" do
+ before { stage.update_column(:default_reference, 'pandas4lyfe') }
+
+ it "sets default reference" do
+ get :new, params: {project_id: project.to_param, stage_id: stage.to_param}
+ assigns(:deploy).reference.must_equal 'pandas4lyfe'
+ end
+
+ it "sets passed in reference over default reference" do
+ get :new, params: {project_id: project.to_param, stage_id: stage.to_param, reference: "abcd"}
+ assigns(:deploy).reference.must_equal "abcd"
+ end
+ end
end
describe "#create" do
diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb
index 2ec1b39229..328eb53193 100644
--- a/test/helpers/application_helper_test.rb
+++ b/test/helpers/application_helper_test.rb
@@ -112,10 +112,21 @@
assert_includes link, %(href="/projects/#{project.to_param}/deploys/#{deploy.id}")
end
- it "shows direct link when stage is direct" do
- stage.stubs(direct?: true)
- link.must_include ">Deploy!<"
- link.must_include "btn-warning"
+ describe "direct stage" do
+ before { stage.stubs(direct?: true) }
+
+ it "shows direct link when stage is direct" do
+ link.must_include ">Deploy<"
+ link.must_include "master"
+ link.must_include "btn-warning"
+ end
+
+ it "shows direct link with default ref if set" do
+ stage.update_column(:default_reference, 'foobar')
+ link.must_include ">Deploy<"
+ link.must_include "foobar"
+ link.must_include "btn-warning"
+ end
end
describe "when stage can run in parallel" do