shipit-engine 0.20.1 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +43 -6
- data/app/assets/stylesheets/_base/_base.scss +4 -0
- data/app/assets/stylesheets/_pages/_commits.scss +3 -1
- data/app/assets/stylesheets/_pages/_deploy.scss +4 -2
- data/app/controllers/concerns/shipit/authentication.rb +1 -1
- data/app/controllers/shipit/api/base_controller.rb +6 -1
- data/app/controllers/shipit/api/pull_requests_controller.rb +1 -1
- data/app/controllers/shipit/commit_checks_controller.rb +1 -1
- data/app/controllers/shipit/shipit_controller.rb +1 -5
- data/app/controllers/shipit/stacks_controller.rb +2 -0
- data/app/controllers/shipit/tasks_controller.rb +1 -1
- data/app/controllers/shipit/webhooks_controller.rb +2 -2
- data/app/helpers/shipit/deploys_helper.rb +9 -0
- data/app/helpers/shipit/shipit_helper.rb +17 -15
- data/app/helpers/shipit/stacks_helper.rb +6 -1
- data/app/jobs/shipit/destroy_stack_job.rb +4 -2
- data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -1
- data/app/jobs/shipit/github_sync_job.rb +1 -1
- data/app/jobs/shipit/merge_pull_requests_job.rb +3 -3
- data/app/jobs/shipit/perform_task_job.rb +3 -0
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/models/shipit/api_client.rb +1 -1
- data/app/models/shipit/commit.rb +29 -6
- data/app/models/shipit/commit_deployment.rb +1 -1
- data/app/models/shipit/commit_deployment_status.rb +1 -1
- data/app/models/shipit/deploy_spec.rb +19 -2
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -10
- data/app/models/shipit/deploy_spec/file_system.rb +6 -0
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -1
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +85 -0
- data/app/models/shipit/deploy_spec/npm_discovery.rb +103 -5
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +4 -2
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +4 -2
- data/app/models/shipit/duration.rb +1 -1
- data/app/models/shipit/github_status.rb +1 -1
- data/app/models/shipit/hook.rb +4 -5
- data/app/models/shipit/output_chunk.rb +1 -1
- data/app/models/shipit/pull_request.rb +36 -15
- data/app/models/shipit/stack.rb +15 -9
- data/app/models/shipit/status/common.rb +4 -0
- data/app/models/shipit/status/group.rb +4 -0
- data/app/models/shipit/task.rb +20 -8
- data/app/models/shipit/task_definition.rb +2 -2
- data/app/models/shipit/undeployed_commit.rb +13 -2
- data/app/models/shipit/user.rb +1 -1
- data/app/serializers/shipit/pull_request_serializer.rb +1 -1
- data/app/serializers/shipit/tail_task_serializer.rb +1 -1
- data/app/views/shipit/ccmenu/project.xml.builder +9 -8
- data/app/views/shipit/deploys/_deploy.html.erb +3 -2
- data/app/views/shipit/stacks/_banners.html.erb +4 -1
- data/app/views/shipit/stacks/settings.html.erb +4 -0
- data/app/views/shipit/statuses/_group.html.erb +1 -1
- data/app/views/shipit/statuses/_status.html.erb +1 -1
- data/app/views/shipit/tasks/_task.html.erb +1 -2
- data/config/locales/en.yml +2 -0
- data/config/secrets.development.example.yml +0 -4
- data/config/secrets.development.shopify.yml +1 -5
- data/db/migrate/20170904103242_reindex_deliveries.rb +7 -0
- data/db/migrate/20171120161420_add_base_info_to_pull_request.rb +7 -0
- data/db/migrate/20180202220850_add_aborted_by_to_tasks.rb +5 -0
- data/lib/shipit.rb +15 -23
- data/lib/shipit/command.rb +11 -3
- data/lib/shipit/engine.rb +0 -4
- data/lib/shipit/stack_commands.rb +3 -1
- data/lib/shipit/version.rb +1 -1
- data/lib/snippets/assert-lerna-fixed-version-tag +21 -0
- data/lib/snippets/assert-lerna-independent-version-tags +28 -0
- data/lib/snippets/generate-local-npmrc +19 -0
- data/lib/snippets/misconfigured-npm-publish-config +8 -0
- data/lib/snippets/publish-lerna-independent-packages +39 -0
- data/lib/snippets/push-to-heroku +5 -5
- data/lib/tasks/cron.rake +1 -1
- data/lib/tasks/dev.rake +1 -1
- data/test/controllers/api/deploys_controller_test.rb +19 -0
- data/test/controllers/api/stacks_controller_test.rb +1 -1
- data/test/controllers/github_authentication_controller_test.rb +1 -1
- data/test/controllers/stacks_controller_test.rb +10 -0
- data/test/controllers/tasks_controller_test.rb +2 -0
- data/test/controllers/webhooks_controller_test.rb +0 -7
- data/test/dummy/config/secrets.yml +0 -2
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +5 -3
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/fixtures/shipit/commits.yml +53 -0
- data/test/fixtures/shipit/pull_requests.yml +52 -0
- data/test/fixtures/shipit/stacks.yml +35 -0
- data/test/fixtures/shipit/statuses.yml +27 -0
- data/test/fixtures/shipit/tasks.yml +14 -0
- data/test/helpers/queries_helper.rb +1 -1
- data/test/jobs/merge_pull_requests_job_test.rb +19 -2
- data/test/jobs/perform_task_job_test.rb +26 -2
- data/test/models/commits_test.rb +55 -6
- data/test/models/deploy_spec_test.rb +288 -52
- data/test/models/deploys_test.rb +7 -7
- data/test/models/hook_test.rb +4 -3
- data/test/models/pull_request_test.rb +78 -24
- data/test/models/stacks_test.rb +21 -17
- data/test/models/status/group_test.rb +6 -0
- data/test/models/undeployed_commits_test.rb +9 -0
- data/test/models/users_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- metadata +211 -222
- data/app/assets/javascripts/shipit_bs.js.coffee +0 -2
- data/app/assets/stylesheets/shipit_bs.scss +0 -22
- data/app/views/bootstrap/shipit/missing_settings.html.erb +0 -97
- data/app/views/bootstrap/shipit/stacks/new.html.erb +0 -44
- data/app/views/layouts/shipit_bootstrap.html.erb +0 -44
- data/lib/shipit/template_renderer_extension.rb +0 -16
data/app/models/shipit/stack.rb
CHANGED
|
@@ -44,6 +44,7 @@ module Shipit
|
|
|
44
44
|
|
|
45
45
|
before_validation :update_defaults
|
|
46
46
|
before_destroy :clear_local_files
|
|
47
|
+
before_save :set_locked_since
|
|
47
48
|
after_commit :emit_lock_hooks
|
|
48
49
|
after_commit :emit_added_hooks, on: :create
|
|
49
50
|
after_commit :emit_updated_hooks, on: :update
|
|
@@ -255,11 +256,7 @@ module Shipit
|
|
|
255
256
|
end
|
|
256
257
|
|
|
257
258
|
def last_deployed_commit
|
|
258
|
-
|
|
259
|
-
deploy.until_commit
|
|
260
|
-
else
|
|
261
|
-
NoDeployedCommit
|
|
262
|
-
end
|
|
259
|
+
last_successful_deploy.try!(:until_commit) || NoDeployedCommit
|
|
263
260
|
end
|
|
264
261
|
|
|
265
262
|
def deployable?
|
|
@@ -287,7 +284,7 @@ module Shipit
|
|
|
287
284
|
end
|
|
288
285
|
|
|
289
286
|
def base_path
|
|
290
|
-
Rails.root.join('data
|
|
287
|
+
Rails.root.join('data', 'stacks', repo_owner, repo_name, environment)
|
|
291
288
|
end
|
|
292
289
|
|
|
293
290
|
def deploys_path
|
|
@@ -362,7 +359,6 @@ module Shipit
|
|
|
362
359
|
|
|
363
360
|
def lock(reason, user)
|
|
364
361
|
params = {lock_reason: reason, lock_author: user}
|
|
365
|
-
params[:locked_since] = Time.current if locked_since.nil?
|
|
366
362
|
update!(params)
|
|
367
363
|
end
|
|
368
364
|
|
|
@@ -384,8 +380,8 @@ module Shipit
|
|
|
384
380
|
end
|
|
385
381
|
|
|
386
382
|
delegate :plugins, :task_definitions, :hidden_statuses, :required_statuses, :soft_failing_statuses,
|
|
387
|
-
:deploy_variables, :filter_task_envs, :filter_deploy_envs,
|
|
388
|
-
:pause_between_deploys, to: :cached_deploy_spec
|
|
383
|
+
:blocking_statuses, :deploy_variables, :filter_task_envs, :filter_deploy_envs,
|
|
384
|
+
:maximum_commits_per_deploy, :pause_between_deploys, to: :cached_deploy_spec
|
|
389
385
|
|
|
390
386
|
def monitoring?
|
|
391
387
|
monitoring.present?
|
|
@@ -486,6 +482,16 @@ module Shipit
|
|
|
486
482
|
self.branch = 'master' if branch.blank?
|
|
487
483
|
end
|
|
488
484
|
|
|
485
|
+
def set_locked_since
|
|
486
|
+
return unless lock_reason_changed?
|
|
487
|
+
|
|
488
|
+
if lock_reason.blank?
|
|
489
|
+
self.locked_since = nil
|
|
490
|
+
else
|
|
491
|
+
self.locked_since ||= Time.now
|
|
492
|
+
end
|
|
493
|
+
end
|
|
494
|
+
|
|
489
495
|
def schedule_merges_if_necessary
|
|
490
496
|
if previous_changes.include?('lock_reason') && previous_changes['lock_reason'].last.blank?
|
|
491
497
|
schedule_merges
|
data/app/models/shipit/task.rb
CHANGED
|
@@ -7,13 +7,14 @@ module Shipit
|
|
|
7
7
|
PRESENCE_CHECK_TIMEOUT = 15
|
|
8
8
|
ACTIVE_STATUSES = %w(pending running aborting).freeze
|
|
9
9
|
COMPLETED_STATUSES = %w(success error failed flapping aborted).freeze
|
|
10
|
-
UNSUCCESSFUL_STATUSES = %w(error failed aborted flapping).freeze
|
|
10
|
+
UNSUCCESSFUL_STATUSES = %w(error failed aborted flapping timedout).freeze
|
|
11
11
|
|
|
12
12
|
attr_accessor :pid
|
|
13
13
|
|
|
14
14
|
belongs_to :deploy, foreign_key: :parent_id, required: false # required for fixtures
|
|
15
15
|
|
|
16
16
|
belongs_to :user, optional: true
|
|
17
|
+
belongs_to :aborted_by, class_name: 'User', optional: true
|
|
17
18
|
belongs_to :stack, counter_cache: true
|
|
18
19
|
belongs_to :until_commit, class_name: 'Commit'
|
|
19
20
|
belongs_to :since_commit, class_name: 'Commit'
|
|
@@ -56,11 +57,11 @@ module Shipit
|
|
|
56
57
|
task.started_at ||= Time.now.utc
|
|
57
58
|
end
|
|
58
59
|
|
|
59
|
-
before_transition any => %i(success failed error) do |task|
|
|
60
|
+
before_transition any => %i(success failed error timedout) do |task|
|
|
60
61
|
task.ended_at ||= Time.now.utc
|
|
61
62
|
end
|
|
62
63
|
|
|
63
|
-
after_transition any => %i(success failed error) do |task|
|
|
64
|
+
after_transition any => %i(success failed error timedout) do |task|
|
|
64
65
|
task.async_refresh_deployed_revision
|
|
65
66
|
end
|
|
66
67
|
|
|
@@ -88,6 +89,10 @@ module Shipit
|
|
|
88
89
|
transition all => :error
|
|
89
90
|
end
|
|
90
91
|
|
|
92
|
+
event :giveup do # :timeout would cause a name clash
|
|
93
|
+
transition all => :timedout
|
|
94
|
+
end
|
|
95
|
+
|
|
91
96
|
event :aborting do
|
|
92
97
|
transition all - %i(aborted) => :aborting
|
|
93
98
|
end
|
|
@@ -97,7 +102,7 @@ module Shipit
|
|
|
97
102
|
end
|
|
98
103
|
|
|
99
104
|
event :flap do
|
|
100
|
-
transition %i(failed error success) => :flapping
|
|
105
|
+
transition %i(failed error timedout success) => :flapping
|
|
101
106
|
end
|
|
102
107
|
|
|
103
108
|
state :pending
|
|
@@ -105,6 +110,7 @@ module Shipit
|
|
|
105
110
|
state :failed
|
|
106
111
|
state :success
|
|
107
112
|
state :error
|
|
113
|
+
state :timedout
|
|
108
114
|
state :aborting
|
|
109
115
|
state :aborted
|
|
110
116
|
state :flapping
|
|
@@ -114,15 +120,21 @@ module Shipit
|
|
|
114
120
|
status.in?(ACTIVE_STATUSES)
|
|
115
121
|
end
|
|
116
122
|
|
|
117
|
-
def report_failure!(
|
|
123
|
+
def report_failure!(error)
|
|
118
124
|
reload
|
|
119
125
|
if aborting?
|
|
120
126
|
aborted!
|
|
127
|
+
elsif error.respond_to?(:exit_code) && Shipit.timeout_exit_codes.include?(error.exit_code)
|
|
128
|
+
giveup!
|
|
121
129
|
else
|
|
122
130
|
failure!
|
|
123
131
|
end
|
|
124
132
|
end
|
|
125
133
|
|
|
134
|
+
def report_timeout!(_error)
|
|
135
|
+
giveup!
|
|
136
|
+
end
|
|
137
|
+
|
|
126
138
|
def report_error!(error)
|
|
127
139
|
write("#{error.class}: #{error.message}\n\t#{error.backtrace.join("\n\t")}\n")
|
|
128
140
|
error!
|
|
@@ -177,7 +189,7 @@ module Shipit
|
|
|
177
189
|
def output
|
|
178
190
|
gzip = self[:gzip_output]
|
|
179
191
|
|
|
180
|
-
if gzip.
|
|
192
|
+
if gzip.blank?
|
|
181
193
|
''
|
|
182
194
|
else
|
|
183
195
|
ActiveSupport::Gzip.decompress(gzip)
|
|
@@ -236,8 +248,8 @@ module Shipit
|
|
|
236
248
|
end
|
|
237
249
|
end
|
|
238
250
|
|
|
239
|
-
def abort!(rollback_once_aborted: false)
|
|
240
|
-
update!(rollback_once_aborted: rollback_once_aborted)
|
|
251
|
+
def abort!(rollback_once_aborted: false, aborted_by:)
|
|
252
|
+
update!(rollback_once_aborted: rollback_once_aborted, aborted_by_id: aborted_by.id)
|
|
241
253
|
|
|
242
254
|
if alive?
|
|
243
255
|
aborting
|
|
@@ -4,13 +4,13 @@ module Shipit
|
|
|
4
4
|
|
|
5
5
|
class << self
|
|
6
6
|
def load(payload)
|
|
7
|
-
return
|
|
7
|
+
return if payload.blank?
|
|
8
8
|
json = JSON.parse(payload)
|
|
9
9
|
new(json.delete('id'), json)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def dump(definition)
|
|
13
|
-
return
|
|
13
|
+
return if definition.blank?
|
|
14
14
|
JSON.dump(definition.as_json)
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -9,9 +9,15 @@ module Shipit
|
|
|
9
9
|
|
|
10
10
|
def deploy_state(bypass_safeties = false)
|
|
11
11
|
state = deployable? ? 'allowed' : status.state
|
|
12
|
+
|
|
12
13
|
unless bypass_safeties
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
if blocked?
|
|
15
|
+
state = 'blocked'
|
|
16
|
+
elsif locked?
|
|
17
|
+
state = 'locked'
|
|
18
|
+
elsif stack.active_task?
|
|
19
|
+
state = 'deploying'
|
|
20
|
+
end
|
|
15
21
|
end
|
|
16
22
|
state
|
|
17
23
|
end
|
|
@@ -31,5 +37,10 @@ module Shipit
|
|
|
31
37
|
def deploy_discouraged?
|
|
32
38
|
stack.maximum_commits_per_deploy && index >= stack.maximum_commits_per_deploy
|
|
33
39
|
end
|
|
40
|
+
|
|
41
|
+
def blocked?
|
|
42
|
+
return @blocked if defined?(@blocked)
|
|
43
|
+
@blocked = super
|
|
44
|
+
end
|
|
34
45
|
end
|
|
35
46
|
end
|
data/app/models/shipit/user.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Shipit
|
|
|
7
7
|
has_one :head, serializer: ShortCommitSerializer
|
|
8
8
|
|
|
9
9
|
attributes :id, :number, :title, :github_id, :additions, :deletions, :state, :merge_status, :mergeable,
|
|
10
|
-
:merge_requested_at, :rejection_reason, :html_url
|
|
10
|
+
:merge_requested_at, :rejection_reason, :html_url, :branch, :base_ref
|
|
11
11
|
|
|
12
12
|
def html_url
|
|
13
13
|
github_pull_request_url(object)
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
status_map = {'backlogged' => 'failure', 'locked' => 'failure'}
|
|
3
3
|
xml.instruct!
|
|
4
4
|
xml.Projects do
|
|
5
|
-
xml.Project
|
|
6
|
-
|
|
7
|
-
:
|
|
8
|
-
:
|
|
9
|
-
:
|
|
10
|
-
:
|
|
11
|
-
:
|
|
12
|
-
|
|
5
|
+
xml.Project(
|
|
6
|
+
'',
|
|
7
|
+
name: stack.to_param,
|
|
8
|
+
lastBuildStatus: status_map.fetch(stack.merge_status, stack.merge_status).capitalize,
|
|
9
|
+
activity: deploy.running? ? 'Building' : 'Sleeping',
|
|
10
|
+
lastBuildTime: deploy.ended_at || deploy.started_at || deploy.created_at,
|
|
11
|
+
lastBuildLabel: deploy.id,
|
|
12
|
+
webUrl: stack_url(stack),
|
|
13
|
+
)
|
|
13
14
|
end
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<% cache deploy.author do %>
|
|
6
6
|
<%= render 'shipit/shared/author', author: deploy.author %>
|
|
7
7
|
<% end %>
|
|
8
|
-
<a href="<%= stack_deploy_path(@stack, deploy) %>" class="status status--<%= deploy.status %>" data-tooltip="<%= deploy.status
|
|
8
|
+
<a href="<%= stack_deploy_path(@stack, deploy) %>" class="status status--<%= deploy.status %>" data-tooltip="<%= deploy_status_in_words(deploy.status) %>">
|
|
9
9
|
<i class="status__icon"></i>
|
|
10
|
-
<span class="visually-hidden"><%= deploy.status %></span>
|
|
10
|
+
<span class="visually-hidden"><%= deploy_status_in_words(deploy.status) %></span>
|
|
11
11
|
</a>
|
|
12
12
|
<div class="commit-details">
|
|
13
13
|
<span class="commit-title">
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
<span class="code-additions">+<%= deploy.additions %></span>
|
|
22
22
|
<span class="code-deletions">-<%= deploy.deletions %></span>
|
|
23
23
|
<% if deploy.ignored_safeties? %><span class="ignored-safeties">ignoring safeties</span><% end %>
|
|
24
|
+
<% if deploy.aborted_by %><span class="aborted-by">aborted by <%= deploy.aborted_by.login %></span><% end %>
|
|
24
25
|
</p>
|
|
25
26
|
<p class="commit-meta">
|
|
26
27
|
<% if read_only %>
|
|
@@ -36,7 +36,10 @@
|
|
|
36
36
|
<div class="banner__content">
|
|
37
37
|
<h2 class="banner__title">
|
|
38
38
|
<i class="icon icon--lock"></i>
|
|
39
|
-
Deploys
|
|
39
|
+
Deploys were locked by <%= stack.lock_author.name %>
|
|
40
|
+
<% unless stack.locked_since.nil? %>
|
|
41
|
+
<%= timeago_tag(stack.locked_since, force: true) %>
|
|
42
|
+
<% end %>
|
|
40
43
|
</h2>
|
|
41
44
|
<p class="banner__text">
|
|
42
45
|
<%= auto_link emojify(stack.lock_reason) %>
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
<%= f.text_field :environment, placeholder: 'production' %>
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
|
+
<div class="field-wrapper">
|
|
17
|
+
<span>Branch: <%= @stack.branch %></span>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
16
20
|
<div class="field-wrapper">
|
|
17
21
|
<%= f.label :deploy_url, 'Deploy URL (Where is this stack deployed to?)' %>
|
|
18
22
|
<%= f.text_field :deploy_url, placeholder: 'https://' %>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<% group.statuses.each do |status| %>
|
|
10
10
|
<div class="status-item status-item--<%= status.state %> <%= :ignored if status.allowed_to_fail? %>">
|
|
11
11
|
<i class="status-item__icon"></i>
|
|
12
|
-
<a href="<%= status.target_url %>" target="_blank">
|
|
12
|
+
<a href="<%= status.target_url %>" <% unless status.target_url.present? %> disabled class="disabled" <% end %> target="_blank">
|
|
13
13
|
<strong class="status-item__service"><%= status.context %></strong>
|
|
14
14
|
</a>
|
|
15
15
|
<span class="status-item__description">— <%= status.description %></span>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<a class="status status--<%= status.state %> <%=
|
|
1
|
+
<a class="status status--<%= status.state %> <%= 'disabled' unless status.target_url.present? %>" <%= 'disabled' unless status.target_url.present? %> <% unless status.group? %>data-tooltip="<%= status.description.presence || status.state.capitalize %>"<% end %> href="<%= status.target_url%>" target="_blank">
|
|
2
2
|
<i class="status__icon"></i>
|
|
3
3
|
<span class="visually-hidden"><%= status.state %></span>
|
|
4
4
|
</a>
|
data/config/locales/en.yml
CHANGED
|
@@ -27,6 +27,7 @@ en:
|
|
|
27
27
|
deploy_button:
|
|
28
28
|
hint:
|
|
29
29
|
max_commits: It is recommended not to deploy more than %{maximum} commits at once.
|
|
30
|
+
blocked: This commit range includes a commit that can't be deployed.
|
|
30
31
|
caption:
|
|
31
32
|
pending: Pending CI
|
|
32
33
|
failure: Failing CI
|
|
@@ -36,6 +37,7 @@ en:
|
|
|
36
37
|
deploying: A Deploy is in Progress
|
|
37
38
|
allowed: Deploy
|
|
38
39
|
missing: Missing CI
|
|
40
|
+
blocked: Blocked
|
|
39
41
|
redeploy_button:
|
|
40
42
|
caption:
|
|
41
43
|
deploying: A Deploy is in Progress
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
host: '
|
|
1
|
+
host: 'https://shipit-engine.myshopify.io'
|
|
2
2
|
redis_url: 'redis://shipit-engine.railgun:6379'
|
|
3
3
|
|
|
4
4
|
github_api:
|
|
@@ -13,10 +13,6 @@ github_oauth:
|
|
|
13
13
|
secret:
|
|
14
14
|
# teams: # Optional
|
|
15
15
|
|
|
16
|
-
# To work on the beta bootstrap re-write
|
|
17
|
-
# features:
|
|
18
|
-
# - bootstrap
|
|
19
|
-
|
|
20
16
|
# To work on the kubernetes deploy script
|
|
21
17
|
# env:
|
|
22
18
|
# KUBECONFIG: # Path of the kubeconfig you want to use.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
class AddBaseInfoToPullRequest < ActiveRecord::Migration[5.1]
|
|
2
|
+
def change
|
|
3
|
+
add_column :pull_requests, :base_ref, :string, limit: 1024
|
|
4
|
+
add_column :pull_requests, :base_commit_id, :integer
|
|
5
|
+
add_foreign_key :pull_requests, :commits, column: :base_commit_id
|
|
6
|
+
end
|
|
7
|
+
end
|
data/lib/shipit.rb
CHANGED
|
@@ -30,8 +30,6 @@ require 'faraday-http-cache'
|
|
|
30
30
|
|
|
31
31
|
require 'shipit/version'
|
|
32
32
|
|
|
33
|
-
require 'shipit/template_renderer_extension'
|
|
34
|
-
|
|
35
33
|
require 'shipit/paginator'
|
|
36
34
|
require 'shipit/null_serializer'
|
|
37
35
|
require 'shipit/csv_serializer'
|
|
@@ -56,8 +54,9 @@ module Shipit
|
|
|
56
54
|
|
|
57
55
|
delegate :table_name_prefix, to: :secrets
|
|
58
56
|
|
|
59
|
-
attr_accessor :disable_api_authentication
|
|
60
|
-
|
|
57
|
+
attr_accessor :disable_api_authentication, :timeout_exit_codes
|
|
58
|
+
|
|
59
|
+
self.timeout_exit_codes = [].freeze
|
|
61
60
|
|
|
62
61
|
def app_name
|
|
63
62
|
@app_name ||= secrets.app_name || Rails.application.class.name.split(':').first || 'Shipit'
|
|
@@ -138,6 +137,18 @@ module Shipit
|
|
|
138
137
|
secrets.host.presence
|
|
139
138
|
end
|
|
140
139
|
|
|
140
|
+
def enforce_publish_config
|
|
141
|
+
secrets.enforce_publish_config.presence
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def npm_org_scope
|
|
145
|
+
secrets.npm_org_scope.presence
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def private_npm_registry
|
|
149
|
+
secrets.private_npm_registry.presence
|
|
150
|
+
end
|
|
151
|
+
|
|
141
152
|
def github_teams
|
|
142
153
|
@github_teams ||= github_teams_handles.map { |t| Team.find_or_create_by_handle(t) }
|
|
143
154
|
end
|
|
@@ -195,29 +206,10 @@ module Shipit
|
|
|
195
206
|
end
|
|
196
207
|
end
|
|
197
208
|
|
|
198
|
-
def feature_bootstrap?
|
|
199
|
-
secrets.features.try!(:include?, 'bootstrap')
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
def bootstrap_view_path
|
|
203
|
-
@bootstrap_view_path ||= Engine.root.join('app/views/bootstrap')
|
|
204
|
-
end
|
|
205
|
-
|
|
206
209
|
def default_inactivity_timeout
|
|
207
210
|
secrets.commands_inactivity_timeout || 5.minutes.to_i
|
|
208
211
|
end
|
|
209
212
|
|
|
210
|
-
def automatically_prepend_bundle_exec
|
|
211
|
-
unless defined?(@automatically_prepend_bundle_exec)
|
|
212
|
-
ActiveSupport::Deprecation.warn(
|
|
213
|
-
'Automatically prepending `bundle exec` will be removed in a future version of Shipit, '\
|
|
214
|
-
'set `Shipit.automatically_prepend_bundle_exec = false` to test the new behaviour.',
|
|
215
|
-
)
|
|
216
|
-
@automatically_prepend_bundle_exec = true
|
|
217
|
-
end
|
|
218
|
-
@automatically_prepend_bundle_exec
|
|
219
|
-
end
|
|
220
|
-
|
|
221
213
|
protected
|
|
222
214
|
|
|
223
215
|
def revision_file
|