shipit-engine 0.36.0 → 0.36.1
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 +4 -4
- data/README.md +13 -0
- data/app/controllers/shipit/api/stacks_controller.rb +1 -1
- data/app/controllers/shipit/rollbacks_controller.rb +5 -1
- data/app/models/shipit/api_client.rb +1 -1
- data/app/models/shipit/delivery.rb +1 -1
- data/app/models/shipit/deploy.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +32 -4
- data/app/models/shipit/pull_request.rb +1 -1
- data/app/models/shipit/stack.rb +10 -10
- data/app/models/shipit/task.rb +28 -1
- data/lib/shipit/engine.rb +12 -10
- data/lib/shipit/version.rb +1 -1
- data/lib/shipit.rb +50 -1
- data/lib/snippets/fetch-gem-version +1 -1
- data/test/controllers/api/stacks_controller_test.rb +1 -1
- data/test/fixtures/shipit/tasks.yml +12 -0
- data/test/models/deploy_spec_test.rb +0 -23
- data/test/models/deploys_test.rb +26 -0
- data/test/models/shipit/deploy_spec/file_system_test.rb +81 -0
- data/test/models/tasks_test.rb +12 -0
- metadata +172 -156
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17cf66ed4359907e35e37a0ac00bcb05884c24148386bf8712d8b73c3cc33708
|
4
|
+
data.tar.gz: b21d35454c554c7faccad5236333cefc3270434617e4bd192372c0a8baa66ac1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f8e6ba6aaaa5eaa4630cfb52a1445e416e4cb6566550c4a5e2ec447065b2d342c52a728b370552a8b7a2a7df8061c30b0d4987d637729d533fd1bfd907a074a
|
7
|
+
data.tar.gz: 94abc1c12513349c85d4d54c4668865f21a42bf055d630fca667fd636dd7119b42f31c11f5c2182f2412ed76601adecce38b096a1add9e978dd83279b600d7fb
|
data/README.md
CHANGED
@@ -134,6 +134,19 @@ Lastly, if you override the `app_name` configuration in your Shipit deployment,
|
|
134
134
|
|
135
135
|
* * *
|
136
136
|
|
137
|
+
<h3 id="respecting-bare-files">Respecting bare <code>shipit.yml</code> files</h3>
|
138
|
+
|
139
|
+
Shipit will, by default, respect the "bare" <code>shipit.yml</code> file as a fallback option if no more specifically-named file exists (such as <code>shipit.staging.yml</code>).
|
140
|
+
|
141
|
+
You can configure this behavior via the attribute <code>Shipit.respect_bare_shipit_file</code>.
|
142
|
+
|
143
|
+
- The value <code>false</code> will disable this behavior and instead cause Shipit to emit an error upon deploy if Shipit cannot find a more specifically-named file.
|
144
|
+
- Setting this attribute to any other value (**including <code>nil</code>**), or not setting this attribute, will cause Shipit to use the default behavior of respecting bare <code>shipit.yml</code> files.
|
145
|
+
|
146
|
+
You can determine if Shipit is configured to respect bare files using <code>Shipit.respect_bare_shipit_file?</code>.
|
147
|
+
|
148
|
+
* * *
|
149
|
+
|
137
150
|
<h3 id="installing-dependencies">Installing dependencies</h3>
|
138
151
|
|
139
152
|
The **<code>dependencies</code>** step allows you to install all the packages your deploy script needs.
|
@@ -5,7 +5,11 @@ module Shipit
|
|
5
5
|
before_action :load_deploy
|
6
6
|
|
7
7
|
def create
|
8
|
-
@rollback = @deploy.trigger_rollback(
|
8
|
+
@rollback = @deploy.trigger_rollback(
|
9
|
+
current_user,
|
10
|
+
env: rollback_params[:env]&.to_unsafe_hash,
|
11
|
+
force: params[:force].present?,
|
12
|
+
)
|
9
13
|
redirect_to(stack_deploy_path(@stack, @rollback))
|
10
14
|
rescue Task::ConcurrentTaskRunning
|
11
15
|
redirect_to(rollback_stack_deploy_path(@stack, @deploy))
|
@@ -9,7 +9,7 @@ module Shipit
|
|
9
9
|
validates :url, presence: true, url: { no_local: true, allow_blank: true }
|
10
10
|
validates :content_type, presence: true
|
11
11
|
|
12
|
-
serialize :response_headers,
|
12
|
+
serialize :response_headers, SafeJSON
|
13
13
|
|
14
14
|
after_commit :purge_old_deliveries, on: :create
|
15
15
|
|
data/app/models/shipit/deploy.rb
CHANGED
@@ -128,6 +128,7 @@ module Shipit
|
|
128
128
|
lock_reason = "A rollback for #{until_commit.sha} has been triggered. " \
|
129
129
|
"Please make sure the reason for the rollback has been addressed before deploying again."
|
130
130
|
stack.update!(lock_reason: lock_reason, lock_author_id: user_id)
|
131
|
+
stack.emit_lock_hooks
|
131
132
|
rollback
|
132
133
|
end
|
133
134
|
|
@@ -91,10 +91,30 @@ module Shipit
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def load_config
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
94
|
+
return if config_file_path.nil?
|
95
|
+
|
96
|
+
if !Shipit.respect_bare_shipit_file? && config_file_path.to_s.end_with?(*bare_shipit_filenames)
|
97
|
+
return { 'deploy' => { 'pre' => [shipit_not_obeying_bare_file_echo_command, 'exit 1'] } }
|
98
|
+
end
|
99
|
+
|
100
|
+
read_config(config_file_path)
|
101
|
+
end
|
102
|
+
|
103
|
+
def shipit_file_names_in_priority_order
|
104
|
+
["#{app_name}.#{@env}.yml", "#{app_name}.yml", "shipit.#{@env}.yml", "shipit.yml"].uniq
|
105
|
+
end
|
106
|
+
|
107
|
+
def bare_shipit_filenames
|
108
|
+
["#{app_name}.yml", "shipit.yml"].uniq
|
109
|
+
end
|
110
|
+
|
111
|
+
def config_file_path
|
112
|
+
shipit_file_names_in_priority_order.each do |filename|
|
113
|
+
path = file(filename, root: true)
|
114
|
+
return path if path.exist?
|
115
|
+
end
|
116
|
+
|
117
|
+
nil
|
98
118
|
end
|
99
119
|
|
100
120
|
def app_name
|
@@ -104,6 +124,14 @@ module Shipit
|
|
104
124
|
def read_config(path)
|
105
125
|
SafeYAML.load(path.read) if path.exist?
|
106
126
|
end
|
127
|
+
|
128
|
+
def shipit_not_obeying_bare_file_echo_command
|
129
|
+
<<~EOM
|
130
|
+
echo \"\e[1;31mShipit is configured to ignore the bare '#{app_name}.yml' file.
|
131
|
+
Please rename this file to more specifically include the environment name.
|
132
|
+
Deployments will fail until a valid '#{app_name}.#{@env}.yml' file is found.\e[0m\"
|
133
|
+
EOM
|
134
|
+
end
|
107
135
|
end
|
108
136
|
end
|
109
137
|
end
|
@@ -11,7 +11,7 @@ module Shipit
|
|
11
11
|
has_many :pull_request_assignments
|
12
12
|
has_many :assignees, class_name: :User, through: :pull_request_assignments, source: :user
|
13
13
|
|
14
|
-
serialize :labels, Array
|
14
|
+
serialize :labels, Shipit.serialized_column(:labels, type: Array)
|
15
15
|
|
16
16
|
after_create_commit :emit_create_hooks
|
17
17
|
after_update_commit :emit_update_hooks
|
data/app/models/shipit/stack.rb
CHANGED
@@ -608,6 +608,16 @@ module Shipit
|
|
608
608
|
Shipit.deployment_checks.call(self)
|
609
609
|
end
|
610
610
|
|
611
|
+
def emit_lock_hooks
|
612
|
+
return unless previous_changes.include?('lock_reason')
|
613
|
+
|
614
|
+
lock_details = if previous_changes['lock_reason'].last.blank?
|
615
|
+
{ from: previous_changes['locked_since'].first, until: Time.zone.now }
|
616
|
+
end
|
617
|
+
|
618
|
+
Hook.emit(:lock, self, locked: locked?, lock_details: lock_details, stack: self)
|
619
|
+
end
|
620
|
+
|
611
621
|
private
|
612
622
|
|
613
623
|
def clear_cache
|
@@ -641,16 +651,6 @@ module Shipit
|
|
641
651
|
end
|
642
652
|
end
|
643
653
|
|
644
|
-
def emit_lock_hooks
|
645
|
-
return unless previous_changes.include?('lock_reason')
|
646
|
-
|
647
|
-
lock_details = if previous_changes['lock_reason'].last.blank?
|
648
|
-
{ from: previous_changes['locked_since'].first, until: Time.zone.now }
|
649
|
-
end
|
650
|
-
|
651
|
-
Hook.emit(:lock, self, locked: locked?, lock_details: lock_details, stack: self)
|
652
|
-
end
|
653
|
-
|
654
654
|
def emit_added_hooks
|
655
655
|
Hook.emit(:stack, self, action: :added, stack: self)
|
656
656
|
end
|
data/app/models/shipit/task.rb
CHANGED
@@ -27,8 +27,35 @@ module Shipit
|
|
27
27
|
|
28
28
|
deferred_touch stack: :updated_at
|
29
29
|
|
30
|
+
module EnvHash
|
31
|
+
class << self
|
32
|
+
def dump(hash)
|
33
|
+
raise TypeError, "Task#env should be a Hash[String => String]" unless hash.is_a?(Hash)
|
34
|
+
hash = hash.to_h.stringify_keys
|
35
|
+
hash.transform_values! do |value|
|
36
|
+
case value
|
37
|
+
when String, Symbol, Numeric
|
38
|
+
value.to_s
|
39
|
+
else
|
40
|
+
raise TypeError, "Task#env should be a Hash[String => String]" unless hash.is_a?(Hash)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
hash unless hash.empty?
|
45
|
+
end
|
46
|
+
|
47
|
+
def load(hash)
|
48
|
+
hash&.to_h || {} # cast back to a real hash
|
49
|
+
end
|
50
|
+
|
51
|
+
def new
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
30
57
|
serialize :definition, TaskDefinition
|
31
|
-
serialize :env,
|
58
|
+
serialize :env, Shipit.serialized_column(:env, coder: EnvHash)
|
32
59
|
|
33
60
|
scope :success, -> { where(status: 'success') }
|
34
61
|
scope :completed, -> { where(status: COMPLETED_STATUSES) }
|
data/lib/shipit/engine.rb
CHANGED
@@ -5,7 +5,18 @@ module Shipit
|
|
5
5
|
|
6
6
|
paths['app/models'] << 'app/serializers' << 'app/serializers/concerns'
|
7
7
|
|
8
|
-
initializer 'shipit.
|
8
|
+
initializer 'shipit.encryption_config', before: 'active_record_encryption.configuration' do |app|
|
9
|
+
if app.credentials.active_record_encryption.blank? && Shipit.user_access_tokens_key.present?
|
10
|
+
# For ease of upgrade, we derive an Active Record encryption config automatically.
|
11
|
+
# But if AR Encryption is already configured, we just use that
|
12
|
+
app.credentials[:active_record_encryption] = {
|
13
|
+
primary_key: Shipit.user_access_tokens_key,
|
14
|
+
key_derivation_salt: Digest::SHA256.digest("salt:".b + Shipit.user_access_tokens_key),
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
initializer 'shipit.config' do |app|
|
9
20
|
Rails.application.routes.default_url_options[:host] = Shipit.host
|
10
21
|
Shipit::Engine.routes.default_url_options[:host] = Shipit.host
|
11
22
|
Pubsubstub.redis_url = Shipit.redis_url.to_s
|
@@ -42,15 +53,6 @@ module Shipit
|
|
42
53
|
if Shipit.enable_samesite_middleware?
|
43
54
|
app.config.middleware.insert_after(::Rack::Runtime, Shipit::SameSiteCookieMiddleware)
|
44
55
|
end
|
45
|
-
|
46
|
-
if app.credentials.active_record_encryption.blank? && Shipit.user_access_tokens_key.present?
|
47
|
-
# For ease of upgrade, we derive an Active Record encryption config automatically.
|
48
|
-
# But if AR Encryption is already configured, we just use that
|
49
|
-
app.credentials[:active_record_encryption] = {
|
50
|
-
primary_key: Shipit.user_access_tokens_key,
|
51
|
-
key_derivation_salt: Digest::SHA256.digest("salt:".b + Shipit.user_access_tokens_key),
|
52
|
-
}
|
53
|
-
end
|
54
56
|
end
|
55
57
|
|
56
58
|
config.after_initialize do
|
data/lib/shipit/version.rb
CHANGED
data/lib/shipit.rb
CHANGED
@@ -5,6 +5,7 @@ require 'state_machines-activerecord'
|
|
5
5
|
require 'validate_url'
|
6
6
|
require 'responders'
|
7
7
|
require 'explicit-parameters'
|
8
|
+
require 'paquito'
|
8
9
|
|
9
10
|
require 'sass-rails'
|
10
11
|
require 'coffee-rails'
|
@@ -63,7 +64,8 @@ module Shipit
|
|
63
64
|
|
64
65
|
delegate :table_name_prefix, to: :secrets
|
65
66
|
|
66
|
-
attr_accessor :disable_api_authentication, :timeout_exit_codes, :deployment_checks
|
67
|
+
attr_accessor :disable_api_authentication, :timeout_exit_codes, :deployment_checks, :respect_bare_shipit_file,
|
68
|
+
:database_serializer
|
67
69
|
attr_writer(
|
68
70
|
:internal_hook_receivers,
|
69
71
|
:preferred_org_emails,
|
@@ -76,6 +78,9 @@ module Shipit
|
|
76
78
|
end
|
77
79
|
|
78
80
|
self.timeout_exit_codes = [].freeze
|
81
|
+
self.respect_bare_shipit_file = true
|
82
|
+
|
83
|
+
alias_method :respect_bare_shipit_file?, :respect_bare_shipit_file
|
79
84
|
|
80
85
|
def authentication_disabled?
|
81
86
|
ENV['SHIPIT_DISABLE_AUTH'].present?
|
@@ -103,6 +108,50 @@ module Shipit
|
|
103
108
|
)
|
104
109
|
end
|
105
110
|
|
111
|
+
module SafeJSON
|
112
|
+
class << self
|
113
|
+
def load(serial)
|
114
|
+
return nil if serial.nil?
|
115
|
+
# JSON.load is unsafe, we should use parse instead
|
116
|
+
JSON.parse(serial)
|
117
|
+
end
|
118
|
+
|
119
|
+
def dump(object)
|
120
|
+
JSON.dump(object)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
module TransitionalSerializer
|
126
|
+
SafeYAML = Paquito::SafeYAML.new(deprecated_classes: ["ActiveSupport::HashWithIndifferentAccess"])
|
127
|
+
|
128
|
+
class << self
|
129
|
+
def load(serial)
|
130
|
+
return if serial.nil?
|
131
|
+
|
132
|
+
JSON.parse(serial)
|
133
|
+
rescue JSON::ParserError
|
134
|
+
SafeYAML.load(serial)
|
135
|
+
end
|
136
|
+
|
137
|
+
def dump(object)
|
138
|
+
return if object.nil?
|
139
|
+
JSON.dump(object)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
self.database_serializer = TransitionalSerializer
|
145
|
+
|
146
|
+
def serialized_column(attribute_name, type: nil, coder: nil)
|
147
|
+
column = Paquito::SerializedColumn.new(database_serializer, type, attribute_name: attribute_name)
|
148
|
+
if coder
|
149
|
+
Paquito.chain(coder, column)
|
150
|
+
else
|
151
|
+
column
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
106
155
|
def github(organization: github_default_organization)
|
107
156
|
# Backward compatibility
|
108
157
|
# nil signifies the single github app config schema is being used
|
@@ -10,7 +10,7 @@ github_repository = ARGV[1]
|
|
10
10
|
def get_json(url)
|
11
11
|
uri = URI.parse(url)
|
12
12
|
response = Net::HTTP.get_response(uri)
|
13
|
-
versions = JSON.
|
13
|
+
versions = JSON.parse(response.body)
|
14
14
|
end
|
15
15
|
|
16
16
|
versions = get_json("https://rubygems.org/api/v1/versions/#{gem_name}.json")
|
@@ -209,7 +209,7 @@ module Shipit
|
|
209
209
|
end
|
210
210
|
|
211
211
|
test "#refresh queues a GithubSyncJob" do
|
212
|
-
assert_enqueued_with(job: GithubSyncJob, args: [
|
212
|
+
assert_enqueued_with(job: GithubSyncJob, args: [stack_id: @stack.id]) do
|
213
213
|
post :refresh, params: { id: @stack.to_param }
|
214
214
|
end
|
215
215
|
assert_response :accepted
|
@@ -344,3 +344,15 @@ shipit_nocommit_task:
|
|
344
344
|
status: pending
|
345
345
|
created_at: <%= (60 - 2).minutes.ago.to_formatted_s(:db) %>
|
346
346
|
started_at: <%= (60 - 2).minutes.ago.to_formatted_s(:db) %>
|
347
|
+
|
348
|
+
shipit_legacy_yaml_task:
|
349
|
+
id: 502
|
350
|
+
user: walrus
|
351
|
+
type: Shipit::Task
|
352
|
+
stack: shipit_task_no_commits
|
353
|
+
status: pending
|
354
|
+
created_at: <%= (60 - 1).minutes.ago.to_formatted_s(:db) %>
|
355
|
+
started_at: <%= (60 - 1).minutes.ago.to_formatted_s(:db) %>
|
356
|
+
env: |
|
357
|
+
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
358
|
+
POD_ID: '12'
|
@@ -286,29 +286,6 @@ module Shipit
|
|
286
286
|
assert_equal({ 'GLOBAL' => '1' }, @spec.machine_env)
|
287
287
|
end
|
288
288
|
|
289
|
-
test '#load_config can grab the env-specific shipit.yml file' do
|
290
|
-
config = {}
|
291
|
-
config.expects(:exist?).returns(true)
|
292
|
-
config.expects(:read).returns({ 'dependencies' => { 'override' => %w(foo bar baz) } }.to_yaml)
|
293
|
-
spec = DeploySpec::FileSystem.new('.', 'staging')
|
294
|
-
spec.expects(:file).with('shipit.staging.yml', root: true).returns(config)
|
295
|
-
assert_equal %w(foo bar baz), spec.dependencies_steps
|
296
|
-
end
|
297
|
-
|
298
|
-
test '#load_config grabs the global shipit.yml file if there is no env-specific file' do
|
299
|
-
not_config = {}
|
300
|
-
not_config.expects(:exist?).returns(false)
|
301
|
-
|
302
|
-
config = {}
|
303
|
-
config.expects(:exist?).returns(true)
|
304
|
-
config.expects(:read).returns({ 'dependencies' => { 'override' => %w(foo bar baz) } }.to_yaml)
|
305
|
-
|
306
|
-
spec = DeploySpec::FileSystem.new('.', 'staging')
|
307
|
-
spec.expects(:file).with('shipit.staging.yml', root: true).returns(not_config)
|
308
|
-
spec.expects(:file).with('shipit.yml', root: true).returns(config)
|
309
|
-
assert_equal %w(foo bar baz), spec.dependencies_steps
|
310
|
-
end
|
311
|
-
|
312
289
|
test '#gemspec gives the path of the repo gemspec if present' do
|
313
290
|
spec = DeploySpec::FileSystem.new('foobar/', 'production')
|
314
291
|
Dir.expects(:[]).with('foobar/*.gemspec').returns(['foobar/foobar.gemspec'])
|
data/test/models/deploys_test.rb
CHANGED
@@ -459,6 +459,32 @@ module Shipit
|
|
459
459
|
end
|
460
460
|
end
|
461
461
|
|
462
|
+
test "transitioning to aborted locks the stack if a rollback is scheduled" do
|
463
|
+
refute @stack.locked?
|
464
|
+
|
465
|
+
@deploy = shipit_deploys(:shipit_running)
|
466
|
+
@deploy.ping
|
467
|
+
@deploy.pid = 42
|
468
|
+
@deploy.abort!(rollback_once_aborted: true, aborted_by: @user)
|
469
|
+
@deploy.aborted!
|
470
|
+
|
471
|
+
assert_predicate @stack.reload, :locked?
|
472
|
+
assert_equal @user, @stack.lock_author
|
473
|
+
end
|
474
|
+
|
475
|
+
test "transitioning to aborted emits a lock hook if a rollback is scheduled" do
|
476
|
+
refute_predicate @stack, :locked?
|
477
|
+
|
478
|
+
@deploy = shipit_deploys(:shipit_running)
|
479
|
+
@deploy.ping
|
480
|
+
@deploy.pid = 42
|
481
|
+
@deploy.abort!(rollback_once_aborted: true, aborted_by: @user)
|
482
|
+
|
483
|
+
expect_hook(:lock, @stack, locked: true, lock_details: nil, stack: @stack) do
|
484
|
+
@deploy.aborted!
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
462
488
|
test "#build_rollback returns an unsaved record" do
|
463
489
|
assert @deploy.build_rollback.new_record?
|
464
490
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'test_helper'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
module Shipit
|
6
|
+
class DeploySpec
|
7
|
+
class FileSystemTest < ActiveSupport::TestCase
|
8
|
+
test 'deploy.pre calls "exit 1" if there is a bare shipit file and Shipit is configured to ignore' do
|
9
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(false).at_least_once
|
10
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, 'env')
|
11
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new(Dir.tmpdir) + '/shipit.yml').at_least_once
|
12
|
+
deploy_spec.expects(:read_config).never
|
13
|
+
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
14
|
+
assert pre_commands.include?('exit 1')
|
15
|
+
assert pre_commands.first.include?('configured to ignore')
|
16
|
+
refute pre_commands.include?('test 2')
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'deploy.pre does not call "exit 1" if Shipit is not configured to do so' do
|
20
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
21
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, 'env')
|
22
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new(Dir.tmpdir) + '/shipit.yml').at_least_once
|
23
|
+
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_yaml))
|
24
|
+
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
25
|
+
refute pre_commands.include?('exit 1')
|
26
|
+
assert pre_commands.include?('test 2')
|
27
|
+
end
|
28
|
+
|
29
|
+
test 'Shipit.respect_bare_shipit_file? has no effect if the file is not a bare file' do
|
30
|
+
[true, false].each do |obey_val|
|
31
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(obey_val).at_least_once
|
32
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, 'env')
|
33
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new(Dir.tmpdir) + '/shipit.env.yml').at_least_once
|
34
|
+
deploy_spec.expects(:read_config).returns(SafeYAML.load(deploy_spec_yaml))
|
35
|
+
pre_commands = deploy_spec.send(:config, 'deploy', 'pre')
|
36
|
+
refute pre_commands.include?('exit 1')
|
37
|
+
assert pre_commands.include?('test 2')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
test '#load_config does not error if the file is empty' do
|
42
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(true).at_least_once
|
43
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, 'env')
|
44
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new(Dir.tmpdir) + '/shipit.env.yml').at_least_once
|
45
|
+
deploy_spec.expects(:read_config).at_least_once.returns(false)
|
46
|
+
loaded_config = deploy_spec.send(:cacheable_config)
|
47
|
+
refute loaded_config == false
|
48
|
+
end
|
49
|
+
|
50
|
+
test '#load_config does not error if there is no "deploy" key' do
|
51
|
+
Shipit.expects(:respect_bare_shipit_file?).returns(false).at_least_once
|
52
|
+
deploy_spec = Shipit::DeploySpec::FileSystem.new(Dir.tmpdir, 'env')
|
53
|
+
deploy_spec.expects(:config_file_path).returns(Pathname.new(Dir.tmpdir) + '/shipit.yml').at_least_once
|
54
|
+
deploy_spec.expects(:read_config).never
|
55
|
+
loaded_config = deploy_spec.send(:load_config)
|
56
|
+
assert loaded_config.key?("deploy")
|
57
|
+
assert loaded_config["deploy"].key?("pre")
|
58
|
+
assert loaded_config["deploy"]["pre"].include?('exit 1')
|
59
|
+
end
|
60
|
+
|
61
|
+
def deploy_spec_yaml
|
62
|
+
<<~EOYAML
|
63
|
+
deploy:
|
64
|
+
pre:
|
65
|
+
- test 2
|
66
|
+
override:
|
67
|
+
- test 1
|
68
|
+
EOYAML
|
69
|
+
end
|
70
|
+
|
71
|
+
def deploy_spec_missing_deploy_yaml
|
72
|
+
<<~EOYAML
|
73
|
+
production_platform:
|
74
|
+
application: test-application
|
75
|
+
runtime_ids:
|
76
|
+
- production-unrestricted-1234
|
77
|
+
EOYAML
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/test/models/tasks_test.rb
CHANGED
@@ -110,5 +110,17 @@ module Shipit
|
|
110
110
|
|
111
111
|
assert_includes Shipit::Task.due_for_rollup, task
|
112
112
|
end
|
113
|
+
|
114
|
+
test "load legacy YAML records" do
|
115
|
+
task = Shipit::Task.find(shipit_tasks(:shipit_legacy_yaml_task).id)
|
116
|
+
assert_equal({ "POD_ID" => "12" }, task.env)
|
117
|
+
assert_equal Hash, task.env.class
|
118
|
+
|
119
|
+
task.save
|
120
|
+
task.reload
|
121
|
+
|
122
|
+
assert_equal({ "POD_ID" => "12" }, task.env)
|
123
|
+
assert_equal Hash, task.env.class
|
124
|
+
end
|
113
125
|
end
|
114
126
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shipit-engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.36.
|
4
|
+
version: 0.36.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_model_serializers
|
@@ -388,6 +388,20 @@ dependencies:
|
|
388
388
|
- - "~>"
|
389
389
|
- !ruby/object:Gem::Version
|
390
390
|
version: 1.0.0
|
391
|
+
- !ruby/object:Gem::Dependency
|
392
|
+
name: paquito
|
393
|
+
requirement: !ruby/object:Gem::Requirement
|
394
|
+
requirements:
|
395
|
+
- - ">="
|
396
|
+
- !ruby/object:Gem::Version
|
397
|
+
version: '0'
|
398
|
+
type: :runtime
|
399
|
+
prerelease: false
|
400
|
+
version_requirements: !ruby/object:Gem::Requirement
|
401
|
+
requirements:
|
402
|
+
- - ">="
|
403
|
+
- !ruby/object:Gem::Version
|
404
|
+
version: '0'
|
391
405
|
description:
|
392
406
|
email:
|
393
407
|
- jean.boussier@shopify.com
|
@@ -963,6 +977,7 @@ files:
|
|
963
977
|
- test/models/release_statuses_test.rb
|
964
978
|
- test/models/rollbacks_test.rb
|
965
979
|
- test/models/shipit/check_run_test.rb
|
980
|
+
- test/models/shipit/deploy_spec/file_system_test.rb
|
966
981
|
- test/models/shipit/provisioning_handler/base_test.rb
|
967
982
|
- test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb
|
968
983
|
- test/models/shipit/provisioning_handler_test.rb
|
@@ -1038,203 +1053,204 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1038
1053
|
- !ruby/object:Gem::Version
|
1039
1054
|
version: '0'
|
1040
1055
|
requirements: []
|
1041
|
-
rubygems_version: 3.
|
1056
|
+
rubygems_version: 3.3.3
|
1042
1057
|
signing_key:
|
1043
1058
|
specification_version: 4
|
1044
1059
|
summary: Application deployment software
|
1045
1060
|
test_files:
|
1046
|
-
- test/
|
1047
|
-
- test/
|
1048
|
-
- test/
|
1049
|
-
- test/
|
1050
|
-
- test/
|
1051
|
-
- test/
|
1052
|
-
- test/
|
1053
|
-
- test/
|
1054
|
-
- test/
|
1055
|
-
- test/
|
1056
|
-
- test/
|
1057
|
-
- test/
|
1058
|
-
- test/
|
1059
|
-
- test/
|
1060
|
-
- test/
|
1061
|
-
- test/
|
1062
|
-
- test/
|
1063
|
-
- test/
|
1064
|
-
- test/
|
1065
|
-
- test/
|
1066
|
-
- test/
|
1067
|
-
- test/
|
1068
|
-
- test/
|
1069
|
-
- test/
|
1070
|
-
- test/
|
1071
|
-
- test/
|
1072
|
-
- test/
|
1073
|
-
- test/
|
1074
|
-
- test/helpers/fixture_aliases_helper.rb
|
1075
|
-
- test/helpers/payloads_helper.rb
|
1076
|
-
- test/helpers/queries_helper.rb
|
1077
|
-
- test/dummy/db/schema.rb
|
1078
|
-
- test/dummy/db/seeds.rb
|
1079
|
-
- test/dummy/app/assets/javascripts/application.js
|
1061
|
+
- test/controllers/api/base_controller_test.rb
|
1062
|
+
- test/controllers/api/ccmenu_controller_test.rb
|
1063
|
+
- test/controllers/api/commits_controller_test.rb
|
1064
|
+
- test/controllers/api/deploys_controller_test.rb
|
1065
|
+
- test/controllers/api/hooks_controller_test.rb
|
1066
|
+
- test/controllers/api/locks_controller_test.rb
|
1067
|
+
- test/controllers/api/merge_requests_controller_test.rb
|
1068
|
+
- test/controllers/api/outputs_controller_test.rb
|
1069
|
+
- test/controllers/api/release_statuses_controller_test.rb
|
1070
|
+
- test/controllers/api/rollback_controller_test.rb
|
1071
|
+
- test/controllers/api/stacks_controller_test.rb
|
1072
|
+
- test/controllers/api/tasks_controller_test.rb
|
1073
|
+
- test/controllers/api_clients_controller_test.rb
|
1074
|
+
- test/controllers/ccmenu_controller_test.rb
|
1075
|
+
- test/controllers/commit_checks_controller_test.rb
|
1076
|
+
- test/controllers/commits_controller_test.rb
|
1077
|
+
- test/controllers/deploys_controller_test.rb
|
1078
|
+
- test/controllers/github_authentication_controller_test.rb
|
1079
|
+
- test/controllers/merge_requests_controller_test.rb
|
1080
|
+
- test/controllers/merge_status_controller_test.rb
|
1081
|
+
- test/controllers/release_statuses_controller_test.rb
|
1082
|
+
- test/controllers/repositories_controller_test.rb
|
1083
|
+
- test/controllers/rollbacks_controller_test.rb
|
1084
|
+
- test/controllers/stacks_controller_test.rb
|
1085
|
+
- test/controllers/status_controller_test.rb
|
1086
|
+
- test/controllers/tasks_controller_test.rb
|
1087
|
+
- test/controllers/webhooks_controller_test.rb
|
1088
|
+
- test/dummy/Rakefile
|
1080
1089
|
- test/dummy/app/assets/config/manifest.js
|
1090
|
+
- test/dummy/app/assets/javascripts/application.js
|
1081
1091
|
- test/dummy/app/assets/stylesheets/application.css
|
1082
|
-
- test/dummy/app/helpers/application_helper.rb
|
1083
1092
|
- test/dummy/app/controllers/application_controller.rb
|
1093
|
+
- test/dummy/app/helpers/application_helper.rb
|
1084
1094
|
- test/dummy/app/views/layouts/application.html.erb
|
1085
|
-
- test/dummy/config.ru
|
1086
|
-
- test/dummy/public/favicon.ico
|
1087
|
-
- test/dummy/public/422.html
|
1088
|
-
- test/dummy/public/404.html
|
1089
|
-
- test/dummy/public/500.html
|
1090
|
-
- test/dummy/bin/rake
|
1091
|
-
- test/dummy/bin/setup
|
1092
1095
|
- test/dummy/bin/bundle
|
1093
1096
|
- test/dummy/bin/rails
|
1097
|
+
- test/dummy/bin/rake
|
1098
|
+
- test/dummy/bin/setup
|
1099
|
+
- test/dummy/config/application.rb
|
1094
1100
|
- test/dummy/config/boot.rb
|
1095
|
-
- test/dummy/config/database.postgresql.yml
|
1096
1101
|
- test/dummy/config/database.mysql.yml
|
1097
|
-
- test/dummy/config/
|
1098
|
-
- test/dummy/config/routes.rb
|
1102
|
+
- test/dummy/config/database.postgresql.yml
|
1099
1103
|
- test/dummy/config/database.yml
|
1100
|
-
- test/dummy/config/
|
1101
|
-
- test/dummy/config/environments/test.rb
|
1102
|
-
- test/dummy/config/environments/production.rb
|
1104
|
+
- test/dummy/config/environment.rb
|
1103
1105
|
- test/dummy/config/environments/development.rb
|
1104
|
-
- test/dummy/config/
|
1106
|
+
- test/dummy/config/environments/production.rb
|
1107
|
+
- test/dummy/config/environments/test.rb
|
1108
|
+
- test/dummy/config/initializers/0_load_development_secrets.rb
|
1109
|
+
- test/dummy/config/initializers/assets.rb
|
1110
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
1105
1111
|
- test/dummy/config/initializers/cookies_serializer.rb
|
1112
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
1113
|
+
- test/dummy/config/initializers/inflections.rb
|
1106
1114
|
- test/dummy/config/initializers/mime_types.rb
|
1107
|
-
- test/dummy/config/initializers/0_load_development_secrets.rb
|
1108
1115
|
- test/dummy/config/initializers/session_store.rb
|
1109
1116
|
- test/dummy/config/initializers/wrap_parameters.rb
|
1110
|
-
- test/dummy/config/
|
1111
|
-
- test/dummy/config/
|
1112
|
-
- test/dummy/config/initializers/inflections.rb
|
1113
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
1117
|
+
- test/dummy/config/locales/en.yml
|
1118
|
+
- test/dummy/config/routes.rb
|
1114
1119
|
- test/dummy/config/secrets.yml
|
1115
|
-
- test/dummy/config/
|
1116
|
-
- test/dummy/
|
1117
|
-
- test/
|
1118
|
-
- test/
|
1119
|
-
- test/
|
1120
|
-
- test/
|
1121
|
-
- test/
|
1122
|
-
- test/
|
1123
|
-
- test/controllers/api/rollback_controller_test.rb
|
1124
|
-
- test/controllers/api/ccmenu_controller_test.rb
|
1125
|
-
- test/controllers/api/base_controller_test.rb
|
1126
|
-
- test/controllers/api/outputs_controller_test.rb
|
1127
|
-
- test/controllers/api/hooks_controller_test.rb
|
1128
|
-
- test/controllers/api/commits_controller_test.rb
|
1129
|
-
- test/controllers/api/release_statuses_controller_test.rb
|
1130
|
-
- test/controllers/api/merge_requests_controller_test.rb
|
1131
|
-
- test/controllers/api/stacks_controller_test.rb
|
1132
|
-
- test/controllers/status_controller_test.rb
|
1133
|
-
- test/controllers/webhooks_controller_test.rb
|
1134
|
-
- test/controllers/commits_controller_test.rb
|
1135
|
-
- test/controllers/api_clients_controller_test.rb
|
1136
|
-
- test/controllers/release_statuses_controller_test.rb
|
1137
|
-
- test/controllers/commit_checks_controller_test.rb
|
1138
|
-
- test/controllers/merge_requests_controller_test.rb
|
1139
|
-
- test/controllers/repositories_controller_test.rb
|
1140
|
-
- test/controllers/merge_status_controller_test.rb
|
1141
|
-
- test/controllers/stacks_controller_test.rb
|
1142
|
-
- test/controllers/rollbacks_controller_test.rb
|
1143
|
-
- test/controllers/github_authentication_controller_test.rb
|
1144
|
-
- test/fixtures/timeout
|
1120
|
+
- test/dummy/config/secrets_double_github_app.yml
|
1121
|
+
- test/dummy/config.ru
|
1122
|
+
- test/dummy/db/schema.rb
|
1123
|
+
- test/dummy/db/seeds.rb
|
1124
|
+
- test/dummy/public/404.html
|
1125
|
+
- test/dummy/public/422.html
|
1126
|
+
- test/dummy/public/500.html
|
1127
|
+
- test/dummy/public/favicon.ico
|
1145
1128
|
- test/fixtures/payloads/check_suite_master.json
|
1146
|
-
- test/fixtures/payloads/
|
1147
|
-
- test/fixtures/payloads/
|
1148
|
-
- test/fixtures/payloads/
|
1149
|
-
- test/fixtures/payloads/status_master.json
|
1129
|
+
- test/fixtures/payloads/invalid_pull_request.json
|
1130
|
+
- test/fixtures/payloads/provision_disabled_pull_request.json
|
1131
|
+
- test/fixtures/payloads/pull_request_assigned.json
|
1150
1132
|
- test/fixtures/payloads/pull_request_closed.json
|
1133
|
+
- test/fixtures/payloads/pull_request_labeled.json
|
1134
|
+
- test/fixtures/payloads/pull_request_opened.json
|
1135
|
+
- test/fixtures/payloads/pull_request_reopened.json
|
1151
1136
|
- test/fixtures/payloads/pull_request_unlabeled.json
|
1152
|
-
- test/fixtures/payloads/
|
1137
|
+
- test/fixtures/payloads/pull_request_with_no_repo.json
|
1153
1138
|
- test/fixtures/payloads/push_master.json
|
1154
|
-
- test/fixtures/payloads/
|
1155
|
-
- test/fixtures/payloads/
|
1156
|
-
- test/fixtures/
|
1157
|
-
- test/fixtures/payloads/invalid_pull_request.json
|
1158
|
-
- test/fixtures/shipit/pull_request_assignments.yml
|
1159
|
-
- test/fixtures/shipit/commit_deployments.yml
|
1139
|
+
- test/fixtures/payloads/push_not_master.json
|
1140
|
+
- test/fixtures/payloads/status_master.json
|
1141
|
+
- test/fixtures/shipit/api_clients.yml
|
1160
1142
|
- test/fixtures/shipit/check_runs.yml
|
1161
|
-
- test/fixtures/shipit/hooks.yml
|
1162
|
-
- test/fixtures/shipit/release_statuses.yml
|
1163
|
-
- test/fixtures/shipit/teams.yml
|
1164
|
-
- test/fixtures/shipit/users.yml
|
1165
|
-
- test/fixtures/shipit/repositories.yml
|
1166
1143
|
- test/fixtures/shipit/commit_deployment_statuses.yml
|
1167
|
-
- test/fixtures/shipit/
|
1144
|
+
- test/fixtures/shipit/commit_deployments.yml
|
1168
1145
|
- test/fixtures/shipit/commits.yml
|
1169
|
-
- test/fixtures/shipit/
|
1170
|
-
- test/fixtures/shipit/tasks.yml
|
1146
|
+
- test/fixtures/shipit/deliveries.yml
|
1171
1147
|
- test/fixtures/shipit/github_hooks.yml
|
1148
|
+
- test/fixtures/shipit/hooks.yml
|
1172
1149
|
- test/fixtures/shipit/memberships.yml
|
1173
1150
|
- test/fixtures/shipit/merge_requests.yml
|
1151
|
+
- test/fixtures/shipit/pull_request_assignments.yml
|
1152
|
+
- test/fixtures/shipit/pull_requests.yml
|
1153
|
+
- test/fixtures/shipit/release_statuses.yml
|
1154
|
+
- test/fixtures/shipit/repositories.yml
|
1155
|
+
- test/fixtures/shipit/stacks.yml
|
1174
1156
|
- test/fixtures/shipit/statuses.yml
|
1175
|
-
- test/fixtures/shipit/
|
1176
|
-
- test/fixtures/shipit/
|
1177
|
-
- test/
|
1178
|
-
- test/
|
1179
|
-
- test/
|
1157
|
+
- test/fixtures/shipit/tasks.yml
|
1158
|
+
- test/fixtures/shipit/teams.yml
|
1159
|
+
- test/fixtures/shipit/users.yml
|
1160
|
+
- test/fixtures/timeout
|
1161
|
+
- test/helpers/api_helper.rb
|
1162
|
+
- test/helpers/fixture_aliases_helper.rb
|
1163
|
+
- test/helpers/hooks_helper.rb
|
1164
|
+
- test/helpers/json_helper.rb
|
1165
|
+
- test/helpers/links_helper.rb
|
1166
|
+
- test/helpers/payloads_helper.rb
|
1167
|
+
- test/helpers/queries_helper.rb
|
1168
|
+
- test/jobs/cache_deploy_spec_job_test.rb
|
1169
|
+
- test/jobs/chunk_rollup_job_test.rb
|
1170
|
+
- test/jobs/deliver_hook_job_test.rb
|
1171
|
+
- test/jobs/destroy_repository_job_test.rb
|
1172
|
+
- test/jobs/destroy_stack_job_test.rb
|
1173
|
+
- test/jobs/emit_event_job_test.rb
|
1174
|
+
- test/jobs/fetch_commit_stats_job_test.rb
|
1175
|
+
- test/jobs/fetch_deployed_revision_job_test.rb
|
1176
|
+
- test/jobs/github_sync_job_test.rb
|
1177
|
+
- test/jobs/mark_deploy_healthy_job_test.rb
|
1178
|
+
- test/jobs/perform_task_job_test.rb
|
1179
|
+
- test/jobs/process_merge_requests_job_test.rb
|
1180
|
+
- test/jobs/purge_old_deliveries_job_test.rb
|
1181
|
+
- test/jobs/reap_dead_tasks_job_test.rb
|
1182
|
+
- test/jobs/refresh_github_user_job_test.rb
|
1183
|
+
- test/jobs/refresh_status_job_test.rb
|
1184
|
+
- test/jobs/unique_job_test.rb
|
1185
|
+
- test/jobs/update_github_last_deployed_ref_job_test.rb
|
1186
|
+
- test/lib/shipit/deploy_commands_test.rb
|
1187
|
+
- test/lib/shipit/task_commands_test.rb
|
1188
|
+
- test/middleware/same_site_cookie_middleware_test.rb
|
1189
|
+
- test/models/api_client_test.rb
|
1190
|
+
- test/models/commit_checks_test.rb
|
1191
|
+
- test/models/commit_deployment_status_test.rb
|
1180
1192
|
- test/models/commit_deployment_test.rb
|
1181
|
-
- test/models/delivery_test.rb
|
1182
|
-
- test/models/hook_test.rb
|
1183
|
-
- test/models/task_definitions_test.rb
|
1184
1193
|
- test/models/commits_test.rb
|
1185
|
-
- test/models/
|
1186
|
-
- test/models/
|
1187
|
-
- test/models/commit_deployment_status_test.rb
|
1194
|
+
- test/models/delivery_test.rb
|
1195
|
+
- test/models/deploy_spec_test.rb
|
1188
1196
|
- test/models/deploy_stats_test.rb
|
1189
1197
|
- test/models/deploys_test.rb
|
1190
|
-
- test/models/
|
1191
|
-
- test/models/
|
1198
|
+
- test/models/duration_test.rb
|
1199
|
+
- test/models/github_hook_test.rb
|
1200
|
+
- test/models/hook_test.rb
|
1192
1201
|
- test/models/membership_test.rb
|
1193
|
-
- test/models/
|
1194
|
-
- test/models/
|
1202
|
+
- test/models/merge_request_test.rb
|
1203
|
+
- test/models/pull_request_assignment_test.rb
|
1195
1204
|
- test/models/release_statuses_test.rb
|
1196
|
-
- test/models/
|
1197
|
-
- test/models/
|
1198
|
-
- test/models/
|
1205
|
+
- test/models/rollbacks_test.rb
|
1206
|
+
- test/models/shipit/check_run_test.rb
|
1207
|
+
- test/models/shipit/deploy_spec/file_system_test.rb
|
1208
|
+
- test/models/shipit/provisioning_handler/base_test.rb
|
1209
|
+
- test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb
|
1210
|
+
- test/models/shipit/provisioning_handler_test.rb
|
1211
|
+
- test/models/shipit/pull_request_test.rb
|
1199
1212
|
- test/models/shipit/repository_test.rb
|
1213
|
+
- test/models/shipit/review_stack_provision_status_test.rb
|
1214
|
+
- test/models/shipit/review_stack_provisioning_queue_test.rb
|
1215
|
+
- test/models/shipit/review_stack_test.rb
|
1200
1216
|
- test/models/shipit/stacks_test.rb
|
1217
|
+
- test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb
|
1218
|
+
- test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb
|
1219
|
+
- test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb
|
1201
1220
|
- test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb
|
1202
1221
|
- test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb
|
1203
1222
|
- test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb
|
1204
|
-
- test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb
|
1205
|
-
- test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb
|
1206
1223
|
- test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb
|
1207
|
-
- test/models/shipit/webhooks/handlers/pull_request/
|
1208
|
-
- test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb
|
1224
|
+
- test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb
|
1209
1225
|
- test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb
|
1210
1226
|
- test/models/shipit/webhooks/handlers_test.rb
|
1211
|
-
- test/models/
|
1212
|
-
- test/models/
|
1213
|
-
- test/models/
|
1214
|
-
- test/models/
|
1215
|
-
- test/models/
|
1216
|
-
- test/models/
|
1217
|
-
- test/models/shipit/pull_request_test.rb
|
1218
|
-
- test/models/shipit/review_stack_provision_status_test.rb
|
1219
|
-
- test/models/api_client_test.rb
|
1227
|
+
- test/models/status/group_test.rb
|
1228
|
+
- test/models/status/missing_test.rb
|
1229
|
+
- test/models/status_test.rb
|
1230
|
+
- test/models/task_definitions_test.rb
|
1231
|
+
- test/models/tasks_test.rb
|
1232
|
+
- test/models/team_test.rb
|
1220
1233
|
- test/models/undeployed_commits_test.rb
|
1221
|
-
- test/models/
|
1222
|
-
- test/
|
1223
|
-
- test/jobs/unique_job_test.rb
|
1224
|
-
- test/jobs/reap_dead_tasks_job_test.rb
|
1225
|
-
- test/jobs/github_sync_job_test.rb
|
1226
|
-
- test/jobs/refresh_github_user_job_test.rb
|
1227
|
-
- test/jobs/chunk_rollup_job_test.rb
|
1228
|
-
- test/jobs/fetch_commit_stats_job_test.rb
|
1229
|
-
- test/jobs/fetch_deployed_revision_job_test.rb
|
1230
|
-
- test/jobs/destroy_repository_job_test.rb
|
1231
|
-
- test/jobs/update_github_last_deployed_ref_job_test.rb
|
1232
|
-
- test/jobs/deliver_hook_job_test.rb
|
1233
|
-
- test/jobs/refresh_status_job_test.rb
|
1234
|
-
- test/jobs/perform_task_job_test.rb
|
1235
|
-
- test/jobs/emit_event_job_test.rb
|
1236
|
-
- test/jobs/mark_deploy_healthy_job_test.rb
|
1237
|
-
- test/jobs/purge_old_deliveries_job_test.rb
|
1238
|
-
- test/jobs/cache_deploy_spec_job_test.rb
|
1239
|
-
- test/jobs/destroy_stack_job_test.rb
|
1234
|
+
- test/models/users_test.rb
|
1235
|
+
- test/serializers/shipit/pull_request_serializer_test.rb
|
1240
1236
|
- test/test_command_integration.rb
|
1237
|
+
- test/test_helper.rb
|
1238
|
+
- test/unit/anonymous_user_serializer_test.rb
|
1239
|
+
- test/unit/command_test.rb
|
1240
|
+
- test/unit/commands_test.rb
|
1241
|
+
- test/unit/commit_serializer_test.rb
|
1242
|
+
- test/unit/csv_serializer_test.rb
|
1243
|
+
- test/unit/deploy_commands_test.rb
|
1244
|
+
- test/unit/deploy_serializer_test.rb
|
1245
|
+
- test/unit/environment_variables_test.rb
|
1246
|
+
- test/unit/github_app_test.rb
|
1247
|
+
- test/unit/github_apps_test.rb
|
1248
|
+
- test/unit/github_url_helper_test.rb
|
1249
|
+
- test/unit/line_buffer_test.rb
|
1250
|
+
- test/unit/rollback_commands_test.rb
|
1251
|
+
- test/unit/shipit_deployment_checks_test.rb
|
1252
|
+
- test/unit/shipit_helper_test.rb
|
1253
|
+
- test/unit/shipit_task_execution_strategy_test.rb
|
1254
|
+
- test/unit/shipit_test.rb
|
1255
|
+
- test/unit/user_serializer_test.rb
|
1256
|
+
- test/unit/variable_definition_test.rb
|