Skip to content

Commit

Permalink
Allow Stages to have a default reference
Browse files Browse the repository at this point in the history
  • Loading branch information
ragurney committed Sep 21, 2018
1 parent b850b8e commit cf0851b
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 20 deletions.
4 changes: 3 additions & 1 deletion app/controllers/deploys_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 11 additions & 10 deletions app/controllers/stages_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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: []
Expand Down
6 changes: 4 additions & 2 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion app/views/deploys/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<div class="form-group">
<%= form.label :reference, "Reference", class: "col-lg-2 control-label" %>
<% if @stage.no_reference_selection %>
<%= form.object.reference = 'master' %>
<%= form.object.reference = @stage.default_reference.presence || 'master' %>
<%= form.hidden_field :reference, id: 'disable_js_hooks' %>
<%= additional_info "Reference selection is disabled for this stage." %>
<% else %>
Expand Down
4 changes: 3 additions & 1 deletion app/views/stages/_fields.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
label: "Notify after deploy",
help: "Email addresses to notify of finished deploys, separated by <code>;</code>".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 %>
Expand All @@ -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 %>
Expand Down
7 changes: 7 additions & 0 deletions db/migrate/20180921170100_add_default_reference_to_stages.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

class AddDefaultReferenceToStages < ActiveRecord::Migration[5.2]
def change
add_column :stages, :default_reference, :string
end
end
3 changes: 2 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
14 changes: 14 additions & 0 deletions test/controllers/deploys_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 15 additions & 4 deletions test/helpers/application_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit cf0851b

Please sign in to comment.