shipit-engine 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/shipit/stacks.js.coffee +15 -1
- data/app/assets/stylesheets/_base/_icons.scss +18 -0
- data/app/assets/stylesheets/_base/_status-items.scss +28 -0
- data/app/assets/stylesheets/_pages/_commits.scss +1 -5
- data/app/assets/stylesheets/_pages/_deploy.scss +60 -3
- data/app/controllers/concerns/shipit/authentication.rb +1 -1
- data/app/controllers/shipit/merge_status_controller.rb +2 -0
- data/app/controllers/shipit/release_statuses_controller.rb +36 -0
- data/app/jobs/shipit/append_delayed_release_status_job.rb +17 -0
- data/app/jobs/shipit/cache_deploy_spec_job.rb +2 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -1
- data/app/jobs/shipit/create_release_statuses_job.rb +11 -0
- data/app/jobs/shipit/deferred_touch_job.rb +2 -0
- data/app/jobs/shipit/deliver_hook_job.rb +1 -0
- data/app/jobs/shipit/merge_pull_requests_job.rb +2 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +2 -0
- data/app/jobs/shipit/perform_task_job.rb +2 -4
- data/app/jobs/shipit/refresh_pull_request_job.rb +2 -0
- data/app/models/shipit/anonymous_user.rb +1 -1
- data/app/models/shipit/commit.rb +36 -3
- data/app/models/shipit/deploy.rb +43 -0
- data/app/models/shipit/deploy_spec.rb +16 -2
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +5 -1
- data/app/models/shipit/deploy_spec/file_system.rb +4 -0
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -1
- data/app/models/shipit/ephemeral_commit_checks.rb +2 -4
- data/app/models/shipit/hook.rb +36 -3
- data/app/models/shipit/pull_request.rb +4 -2
- data/app/models/shipit/release_status.rb +41 -0
- data/app/models/shipit/rollback.rb +9 -0
- data/app/models/shipit/stack.rb +4 -9
- data/app/models/shipit/status/common.rb +4 -0
- data/app/models/shipit/status/group.rb +2 -1
- data/app/models/shipit/status/missing.rb +4 -0
- data/app/models/shipit/status/unknown.rb +15 -0
- data/app/models/shipit/task.rb +4 -0
- data/app/models/shipit/user.rb +16 -3
- data/app/serializers/shipit/stack_serializer.rb +1 -1
- data/app/views/shipit/deploys/_deploy.html.erb +18 -2
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20180802172632_allow_commit_without_author.rb +6 -0
- data/db/migrate/20180906083930_create_release_statuses.rb +21 -0
- data/lib/shipit.rb +5 -0
- data/lib/shipit/command.rb +14 -18
- data/lib/shipit/deploy_commands.rb +0 -4
- data/lib/shipit/engine.rb +1 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -1
- data/lib/shipit/flock.rb +43 -0
- data/lib/shipit/github_app.rb +5 -3
- data/lib/shipit/rollback_commands.rb +6 -0
- data/lib/shipit/task_commands.rb +1 -5
- data/lib/shipit/version.rb +1 -1
- data/test/controllers/release_statuses_controller_test.rb +23 -0
- data/test/dummy/db/schema.rb +18 -3
- data/test/dummy/db/seeds.rb +4 -0
- data/test/fixtures/shipit/commits.yml +13 -0
- data/test/fixtures/shipit/release_statuses.yml +16 -0
- data/test/fixtures/shipit/stacks.yml +4 -0
- data/test/jobs/append_delayed_release_status_job_test.rb +25 -0
- data/test/jobs/cache_deploy_spec_job_test.rb +1 -2
- data/test/jobs/emit_event_job_test.rb +1 -1
- data/test/jobs/github_sync_job_test.rb +1 -0
- data/test/models/commits_test.rb +54 -1
- data/test/models/deploy_spec_test.rb +83 -11
- data/test/models/deploys_test.rb +52 -0
- data/test/models/hook_test.rb +1 -28
- data/test/models/pull_request_test.rb +19 -0
- data/test/models/release_statuses_test.rb +28 -0
- data/test/models/rollbacks_test.rb +2 -0
- data/test/models/stacks_test.rb +1 -1
- data/test/test_helper.rb +5 -0
- data/test/unit/rollback_commands_test.rb +35 -0
- metadata +121 -104
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Shipit
|
4
|
+
class AppendDelayedReleaseStatusJobTest < ActiveSupport::TestCase
|
5
|
+
setup do
|
6
|
+
@job = AppendDelayedReleaseStatusJob.new
|
7
|
+
@deploy = shipit_deploys(:shipit_complete)
|
8
|
+
end
|
9
|
+
|
10
|
+
test "#perform bails out if another status was appended in the meantime" do
|
11
|
+
cursor = @deploy.last_release_status
|
12
|
+
@deploy.append_release_status(cursor.state, 'Something else happened')
|
13
|
+
assert_no_difference -> { ReleaseStatus.count } do
|
14
|
+
@job.perform(@deploy, cursor: cursor, status: 'success', description: 'Nothing happened')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "#perform appends the new status if no other status was appended in the meantime" do
|
19
|
+
cursor = @deploy.last_release_status
|
20
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
21
|
+
@job.perform(@deploy, cursor: cursor, status: 'success', description: 'Something happened')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
require 'tmpdir'
|
3
2
|
|
4
3
|
module Shipit
|
5
4
|
class CacheDeploySpecJobTest < ActiveSupport::TestCase
|
6
5
|
setup do
|
7
6
|
@stack = shipit_stacks(:shipit)
|
8
|
-
@last_commit =
|
7
|
+
@last_commit = @stack.commits.last
|
9
8
|
@job = CacheDeploySpecJob.new
|
10
9
|
end
|
11
10
|
|
@@ -8,7 +8,7 @@ module Shipit
|
|
8
8
|
end
|
9
9
|
|
10
10
|
test "#perform schedule deliveries" do
|
11
|
-
|
11
|
+
assert_enqueued_jobs(2, only: DeliverHookJob) do
|
12
12
|
@job.perform(event: :deploy, stack_id: @stack.id, payload: {foo: 42}.to_json)
|
13
13
|
end
|
14
14
|
end
|
data/test/models/commits_test.rb
CHANGED
@@ -10,6 +10,59 @@ module Shipit
|
|
10
10
|
@commit = shipit_commits(:first)
|
11
11
|
end
|
12
12
|
|
13
|
+
test '.create_from_github handle unknown users' do
|
14
|
+
assert_difference -> { Commit.count }, +1 do
|
15
|
+
@stack.commits.create_from_github!(
|
16
|
+
resource(
|
17
|
+
sha: '2adaad1ad30c235d3a6e7981dfc1742f7ecb1e85',
|
18
|
+
author: {},
|
19
|
+
committer: {},
|
20
|
+
commit: {
|
21
|
+
author: {
|
22
|
+
name: 'George Abitbol',
|
23
|
+
email: '',
|
24
|
+
date: Time.now,
|
25
|
+
},
|
26
|
+
committer: {
|
27
|
+
name: 'George Abitbol',
|
28
|
+
email: '',
|
29
|
+
date: Time.now,
|
30
|
+
},
|
31
|
+
message: "commit to trigger staging build",
|
32
|
+
},
|
33
|
+
),
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
test '.create_from_github handle PRs merged by another Shipit stacks' do
|
39
|
+
assert_difference -> { Commit.count }, +1 do
|
40
|
+
@stack.commits.create_from_github!(
|
41
|
+
resource(
|
42
|
+
sha: '2adaad1ad30c235d3a6e7981dfc1742f7ecb1e85',
|
43
|
+
author: {},
|
44
|
+
committer: {},
|
45
|
+
commit: {
|
46
|
+
author: {
|
47
|
+
name: 'Shipit',
|
48
|
+
email: '',
|
49
|
+
date: Time.now,
|
50
|
+
},
|
51
|
+
committer: {
|
52
|
+
name: 'Shipit',
|
53
|
+
email: '',
|
54
|
+
date: Time.now,
|
55
|
+
},
|
56
|
+
message: "commit to trigger staging build\n\nMerge-Requested-By: walrus\n",
|
57
|
+
},
|
58
|
+
),
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
commit = Commit.last
|
63
|
+
assert_equal shipit_users(:walrus), commit.author
|
64
|
+
end
|
65
|
+
|
13
66
|
test "#pull_request? detect pull request based on message format" do
|
14
67
|
assert @pr.pull_request?
|
15
68
|
refute @commit.pull_request?
|
@@ -181,7 +234,7 @@ module Shipit
|
|
181
234
|
message: "more fish!",
|
182
235
|
)
|
183
236
|
@stack.reload
|
184
|
-
assert_equal
|
237
|
+
assert_equal 3, @stack.undeployed_commits_count
|
185
238
|
end
|
186
239
|
|
187
240
|
test "fetch_stats! pulls additions and deletions from github" do
|
@@ -63,11 +63,11 @@ module Shipit
|
|
63
63
|
test '#bundle_install return a sane default bundle install command' do
|
64
64
|
@spec.stubs(:gemfile_lock_exists?).returns(true)
|
65
65
|
command = %(
|
66
|
-
bundle check --path=#{DeploySpec.bundle_path} ||
|
67
66
|
bundle install
|
68
67
|
--frozen
|
69
|
-
--
|
70
|
-
--
|
68
|
+
--jobs 4
|
69
|
+
--path #{DeploySpec.bundle_path}
|
70
|
+
--retry 2
|
71
71
|
--without=default:production:development:test:staging:benchmark:debug
|
72
72
|
).gsub(/\s+/, ' ').strip
|
73
73
|
assert_equal command, @spec.bundle_install.last
|
@@ -77,11 +77,11 @@ module Shipit
|
|
77
77
|
@spec.stubs(:gemfile_lock_exists?).returns(true)
|
78
78
|
@spec.stubs(:load_config).returns('dependencies' => {'bundler' => {'without' => %w(some custom groups)}})
|
79
79
|
command = %(
|
80
|
-
bundle check --path=#{DeploySpec.bundle_path} ||
|
81
80
|
bundle install
|
82
81
|
--frozen
|
83
|
-
--
|
84
|
-
--
|
82
|
+
--jobs 4
|
83
|
+
--path #{DeploySpec.bundle_path}
|
84
|
+
--retry 2
|
85
85
|
--without=some:custom:groups
|
86
86
|
).gsub(/\s+/, ' ').strip
|
87
87
|
assert_equal command, @spec.bundle_install.last
|
@@ -307,11 +307,24 @@ module Shipit
|
|
307
307
|
'require' => [],
|
308
308
|
'blocking' => [],
|
309
309
|
},
|
310
|
-
'machine' => {
|
310
|
+
'machine' => {
|
311
|
+
'environment' => {'BUNDLE_PATH' => @spec.bundle_path.to_s},
|
312
|
+
'directory' => nil,
|
313
|
+
'cleanup' => true,
|
314
|
+
},
|
311
315
|
'review' => {'checklist' => [], 'monitoring' => [], 'checks' => []},
|
316
|
+
'status' => {
|
317
|
+
'context' => nil,
|
318
|
+
'delay' => nil,
|
319
|
+
},
|
312
320
|
'dependencies' => {'override' => []},
|
313
321
|
'plugins' => {},
|
314
|
-
'deploy' => {
|
322
|
+
'deploy' => {
|
323
|
+
'override' => nil,
|
324
|
+
'variables' => [],
|
325
|
+
'max_commits' => 8,
|
326
|
+
'interval' => 0,
|
327
|
+
},
|
315
328
|
'rollback' => {'override' => nil},
|
316
329
|
'fetch' => nil,
|
317
330
|
'tasks' => {},
|
@@ -350,9 +363,59 @@ module Shipit
|
|
350
363
|
assert_equal ['foo'], definition.steps
|
351
364
|
end
|
352
365
|
|
353
|
-
test "#task_definitions
|
366
|
+
test "#task_definitions will always have definitions from shipit.yml take precedence over other modules" do
|
367
|
+
# Create a subclass of `FileSystem` which we can include another module in without
|
368
|
+
# affecting any other tests
|
369
|
+
DuplicateCustomizedDeploySpec = Class.new(Shipit::DeploySpec::FileSystem)
|
370
|
+
|
371
|
+
# Create the module we want to include in our new class
|
372
|
+
# For this test case, we want to have the module create a task with the same
|
373
|
+
# ID as defined from config
|
374
|
+
module TestTaskDiscovery
|
375
|
+
def discover_task_definitions
|
376
|
+
{
|
377
|
+
'config_task' => {'steps' => %w(bar)},
|
378
|
+
}.merge!(super)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
# Include the module in our new test class
|
383
|
+
DuplicateCustomizedDeploySpec.include TestTaskDiscovery
|
384
|
+
|
385
|
+
# Setup the spec as we would normally, but use the customized version
|
386
|
+
@spec = DuplicateCustomizedDeploySpec.new(@app_dir, 'env')
|
387
|
+
@spec.stubs(:load_config).returns(
|
388
|
+
'tasks' => {'config_task' => {'steps' => %w(foo)}},
|
389
|
+
)
|
390
|
+
tasks = @spec.task_definitions
|
391
|
+
|
392
|
+
# Assert we get only the task from the config, not from the module
|
393
|
+
assert_equal %w(config_task), tasks.map(&:id)
|
394
|
+
assert_equal ["foo"], tasks.first.steps
|
395
|
+
end
|
396
|
+
|
397
|
+
test "#task_definitions returns comands from the config and other modules" do
|
398
|
+
# Create a subclass of `FileSystem` which we can include another module in without
|
399
|
+
# affecting any other tests
|
400
|
+
CustomizedDeploySpec = Class.new(Shipit::DeploySpec::FileSystem)
|
401
|
+
|
402
|
+
# Create the module we want to include in our new class
|
403
|
+
# This module demonstrates how to have new tasks to be appended to the task list
|
404
|
+
module TestTaskDiscovery
|
405
|
+
def discover_task_definitions
|
406
|
+
{
|
407
|
+
'module_task' => {'steps' => %w(bar)},
|
408
|
+
}.merge(super)
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
# Include the module in our new test class
|
413
|
+
CustomizedDeploySpec.include TestTaskDiscovery
|
414
|
+
|
415
|
+
# Setup the spec as we would normally, but use the customized version
|
416
|
+
@spec = CustomizedDeploySpec.new(@app_dir, 'env')
|
354
417
|
@spec.stubs(:load_config).returns(
|
355
|
-
'tasks' => {'
|
418
|
+
'tasks' => {'config_task' => {'steps' => %w(foo)}},
|
356
419
|
'kubernetes' => {
|
357
420
|
'namespace' => 'foo',
|
358
421
|
'context' => 'bar',
|
@@ -360,7 +423,16 @@ module Shipit
|
|
360
423
|
},
|
361
424
|
)
|
362
425
|
tasks = @spec.task_definitions
|
363
|
-
|
426
|
+
|
427
|
+
# Assert we get tasks from all three sources: config, shipit-engine defined modules, and
|
428
|
+
# "third party" modules
|
429
|
+
assert_equal %w(config_task module_task restart), tasks.map(&:id).sort
|
430
|
+
|
431
|
+
module_task = tasks.find { |t| t.id == "config_task" }
|
432
|
+
assert_equal ["foo"], module_task.steps
|
433
|
+
|
434
|
+
config_task = tasks.find { |t| t.id == "module_task" }
|
435
|
+
assert_equal ["bar"], config_task.steps
|
364
436
|
|
365
437
|
restart_task = tasks.find { |t| t.id == "restart" }
|
366
438
|
assert_equal ["kubernetes-restart foo bar --max-watch-seconds 1200"], restart_task.steps
|
data/test/models/deploys_test.rb
CHANGED
@@ -466,6 +466,58 @@ module Shipit
|
|
466
466
|
assert_predicate @deploy, :alive?
|
467
467
|
end
|
468
468
|
|
469
|
+
test "triggering a deploy sets the release status as pending" do
|
470
|
+
@commit = shipit_commits(:fifth)
|
471
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
472
|
+
assert_equal 'unknown', @commit.last_release_status.state
|
473
|
+
@deploy = @stack.trigger_deploy(@commit, AnonymousUser.new)
|
474
|
+
assert_equal 'pending', @commit.last_release_status.state
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
test "failing a deploy sets the release status as error" do
|
479
|
+
@deploy = shipit_deploys(:shipit_running)
|
480
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
481
|
+
assert_not_equal 'error', @deploy.last_release_status.state
|
482
|
+
@deploy.report_failure!(StandardError.new)
|
483
|
+
assert_equal 'error', @deploy.last_release_status.state
|
484
|
+
end
|
485
|
+
end
|
486
|
+
|
487
|
+
test "succeeding a deploy sets the release status as success if the status delay is 0s" do
|
488
|
+
@deploy = shipit_deploys(:shipit_running)
|
489
|
+
@deploy.stack.expects(:release_status_delay).returns(Duration.parse(0))
|
490
|
+
|
491
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
492
|
+
assert_not_equal 'success', @deploy.last_release_status.state
|
493
|
+
@deploy.complete!
|
494
|
+
assert_equal 'success', @deploy.last_release_status.state
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
test "succeeding a deploy sets the release status as pending if the status delay is longer than 0s" do
|
499
|
+
@deploy = shipit_deploys(:shipit_running)
|
500
|
+
@deploy.stack.expects(:release_status_delay).returns(Duration.parse(1))
|
501
|
+
|
502
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
503
|
+
assert_not_equal 'success', @deploy.last_release_status.state
|
504
|
+
assert_enqueued_with(job: AppendDelayedReleaseStatusJob) do
|
505
|
+
@deploy.complete!
|
506
|
+
end
|
507
|
+
assert_equal 'pending', @deploy.last_release_status.state
|
508
|
+
end
|
509
|
+
end
|
510
|
+
|
511
|
+
test "triggering a rollback sets the release status as failure" do
|
512
|
+
@deploy = shipit_deploys(:shipit_complete)
|
513
|
+
|
514
|
+
assert_difference -> { ReleaseStatus.count }, +1 do
|
515
|
+
assert_not_equal 'failure', @deploy.last_release_status.state
|
516
|
+
@deploy.trigger_rollback
|
517
|
+
assert_equal 'failure', @deploy.reload.last_release_status.state
|
518
|
+
end
|
519
|
+
end
|
520
|
+
|
469
521
|
private
|
470
522
|
|
471
523
|
def expect_event(deploy)
|
data/test/models/hook_test.rb
CHANGED
@@ -29,23 +29,10 @@ module Shipit
|
|
29
29
|
assert_equal ["Events is not a strict subset of #{Hook::EVENTS.inspect}"], @hook.errors.full_messages
|
30
30
|
end
|
31
31
|
|
32
|
-
test ".emit enqueues an EmitEventJob with the proper payload" do
|
33
|
-
assert_enqueued_with(job: EmitEventJob) do
|
34
|
-
Hook.emit(:deploy, @stack, foo: 42)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
32
|
test ".deliver schedules a delivery for each matching hook" do
|
39
|
-
|
33
|
+
assert_enqueued_jobs(2, only: DeliverHookJob) do
|
40
34
|
Hook.deliver(:deploy, @stack, 'foo' => 42)
|
41
35
|
end
|
42
|
-
|
43
|
-
delivery = Delivery.last
|
44
|
-
|
45
|
-
assert_equal @hook.delivery_url, delivery.url
|
46
|
-
assert_equal 'application/x-www-form-urlencoded', delivery.content_type
|
47
|
-
assert_equal 'foo=42', delivery.payload
|
48
|
-
assert_equal 'scheduled', delivery.status
|
49
36
|
end
|
50
37
|
|
51
38
|
test ".scoped? returns true if the hook has a stack_id" do
|
@@ -55,19 +42,5 @@ module Shipit
|
|
55
42
|
@hook.stack_id = 42
|
56
43
|
assert @hook.scoped?
|
57
44
|
end
|
58
|
-
|
59
|
-
test "#purge_old_deliveries!" do
|
60
|
-
Hook.deliver(:deploy, @stack, 'foo' => 42)
|
61
|
-
@hook.deliveries.update_all(status: 'sent')
|
62
|
-
|
63
|
-
previous_ids = @hook.deliveries.sent.order(id: :desc).pluck(:id)
|
64
|
-
|
65
|
-
assert_difference -> { @hook.deliveries.sent.count }, -1 do
|
66
|
-
@hook.purge_old_deliveries!(keep: 1)
|
67
|
-
end
|
68
|
-
|
69
|
-
after_ids = @hook.deliveries.sent.order(id: :desc).pluck(:id)
|
70
|
-
assert_equal previous_ids[0..-2], after_ids
|
71
|
-
end
|
72
45
|
end
|
73
46
|
end
|
@@ -183,6 +183,25 @@ module Shipit
|
|
183
183
|
refute_predicate @pr, :rejected?
|
184
184
|
end
|
185
185
|
|
186
|
+
test "#reject_unless_mergeable! reject the PR if it has a missing CI status" do
|
187
|
+
@pr.head.statuses.where(context: 'ci/circle').delete_all
|
188
|
+
|
189
|
+
assert_predicate @pr, :all_status_checks_passed?
|
190
|
+
refute_predicate @pr, :any_status_checks_failed?
|
191
|
+
assert_equal false, @pr.reject_unless_mergeable!
|
192
|
+
refute_predicate @pr, :rejected?
|
193
|
+
end
|
194
|
+
|
195
|
+
test "#reject_unless_mergeable! reject the PR if it has a missing CI status (multi-status)" do
|
196
|
+
@pr.head.statuses.where(context: 'ci/circle').delete_all
|
197
|
+
@pr.head.statuses.create!(stack: @pr.stack, state: 'success', context: 'ci/travis')
|
198
|
+
|
199
|
+
assert_predicate @pr, :all_status_checks_passed?
|
200
|
+
refute_predicate @pr, :any_status_checks_failed?
|
201
|
+
assert_equal false, @pr.reject_unless_mergeable!
|
202
|
+
refute_predicate @pr, :rejected?
|
203
|
+
end
|
204
|
+
|
186
205
|
test "#reject_unless_mergeable! rejects the PR if it is stale" do
|
187
206
|
@pr.stubs(:stale?).returns(true)
|
188
207
|
assert_equal true, @pr.reject_unless_mergeable!
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Shipit
|
4
|
+
class ReleaseStatusesTest < ActiveSupport::TestCase
|
5
|
+
test "#create_status_on_github! calls GitHub API" do
|
6
|
+
Shipit.github.api.expects(:create_status).once.with(
|
7
|
+
'shopify/shipit-engine',
|
8
|
+
shipit_commits(:fourth).sha,
|
9
|
+
'pending',
|
10
|
+
context: 'shipit/production',
|
11
|
+
target_url: 'https://example.com/deploys/42',
|
12
|
+
description: 'Deploy started',
|
13
|
+
).returns(resource(id: 42))
|
14
|
+
|
15
|
+
@status = shipit_release_statuses(:to_be_created)
|
16
|
+
assert_nil @status.github_id
|
17
|
+
@status.create_status_on_github!
|
18
|
+
assert_equal 42, @status.github_id
|
19
|
+
end
|
20
|
+
|
21
|
+
test "#create_status_on_github! does nothing if the github_id is alreayd recorded" do
|
22
|
+
Shipit.github.api.expects(:create_status).never
|
23
|
+
|
24
|
+
@status = shipit_release_statuses(:created)
|
25
|
+
@status.create_status_on_github!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -36,6 +36,7 @@ module Shipit
|
|
36
36
|
|
37
37
|
expected = [
|
38
38
|
['Revert "Merge pull request #7 from shipit-engine/yoloshipit"', false],
|
39
|
+
["whoami", false],
|
39
40
|
['fix all the things', false],
|
40
41
|
]
|
41
42
|
assert_equal expected, @stack.undeployed_commits.map { |c| [c.title, c.locked?] }
|
@@ -46,6 +47,7 @@ module Shipit
|
|
46
47
|
|
47
48
|
expected = [
|
48
49
|
['Revert "Merge pull request #7 from shipit-engine/yoloshipit"', false],
|
50
|
+
["whoami", true],
|
49
51
|
['fix all the things', true],
|
50
52
|
['yoloshipit!', true],
|
51
53
|
]
|
data/test/models/stacks_test.rb
CHANGED
@@ -354,7 +354,7 @@ module Shipit
|
|
354
354
|
|
355
355
|
test "the git cache lock prevent concurrent access to the git cache" do
|
356
356
|
@stack.acquire_git_cache_lock do
|
357
|
-
assert_raises
|
357
|
+
assert_raises Flock::TimeoutError do
|
358
358
|
@stack.acquire_git_cache_lock(timeout: 0.1) {}
|
359
359
|
end
|
360
360
|
end
|