shipit-engine 0.10.0 → 0.11.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 +4 -4
- data/README.md +33 -11
- data/app/assets/javascripts/shipit.js.coffee +7 -1
- data/app/assets/stylesheets/_base/_buttons.scss +3 -0
- data/app/assets/stylesheets/_base/_colors.scss +1 -1
- data/app/assets/stylesheets/_base/_status-items.scss +1 -1
- data/app/assets/stylesheets/_pages/_deploy.scss +1 -1
- data/app/assets/stylesheets/_structure/_main.scss +1 -1
- data/app/controllers/shipit/stacks_controller.rb +1 -5
- data/app/helpers/shipit/shipit_helper.rb +7 -9
- data/app/helpers/shipit/stacks_helper.rb +14 -28
- data/app/jobs/shipit/continuous_delivery_job.rb +1 -1
- data/app/jobs/shipit/update_estimated_deploy_duration.rb +9 -0
- data/app/models/shipit/commit_checks.rb +1 -1
- data/app/models/shipit/deploy.rb +1 -1
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -1
- data/app/models/shipit/deploy_spec/file_system.rb +6 -1
- data/app/models/shipit/deploy_spec.rb +12 -0
- data/app/models/shipit/duration.rb +29 -9
- data/app/models/shipit/github_hook.rb +0 -2
- data/app/models/shipit/stack.rb +48 -11
- data/app/models/shipit/task.rb +13 -2
- data/app/models/shipit/team.rb +1 -1
- data/app/models/shipit/undeployed_commit.rb +36 -0
- data/app/views/layouts/shipit.html.erb +6 -4
- data/app/views/shipit/deploys/show.html.erb +1 -1
- data/app/views/shipit/stacks/_header.html.erb +7 -0
- data/app/views/shipit/stacks/show.html.erb +1 -1
- data/config/locales/en.yml +9 -3
- data/config/secrets.development.example.yml +19 -0
- data/config/secrets.development.shopify.yml +19 -0
- data/config/secrets.development.yml +16 -0
- data/db/migrate/20160502150713_add_estimated_deploy_duration_to_stacks.rb +5 -0
- data/db/migrate/20160526192650_reorder_active_tasks_index.rb +7 -0
- data/lib/shipit/command.rb +15 -2
- data/lib/shipit/engine.rb +2 -1
- data/lib/shipit/stat.rb +13 -0
- data/lib/shipit/version.rb +1 -1
- data/lib/shipit.rb +13 -0
- data/lib/tasks/cron.rake +1 -0
- data/test/controllers/github_authentication_controller_test.rb +5 -5
- data/test/dummy/config/initializers/0_load_development_secrets.rb +9 -0
- data/test/dummy/config/secrets.yml +5 -16
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +14 -14
- data/test/dummy/db/seeds.rb +1 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/fixtures/shipit/stacks.yml +2 -2
- data/test/fixtures/shipit/tasks.yml +3 -1
- data/test/fixtures/shipit/users.yml +5 -0
- data/test/helpers/queries_helper.rb +1 -1
- data/test/models/deploys_test.rb +7 -0
- data/test/models/duration_test.rb +23 -0
- data/test/models/stacks_test.rb +93 -4
- data/test/models/undeployed_commits_test.rb +100 -0
- data/test/test_helper.rb +1 -0
- data/test/unit/deploy_spec_test.rb +1 -1
- data/test/unit/shipit_test.rb +2 -1
- metadata +19 -10
- data/db/schema.rb +0 -188
- data/test/dummy/config/secrets.example.yml +0 -35
data/test/models/stacks_test.rb
CHANGED
@@ -403,20 +403,44 @@ module Shipit
|
|
403
403
|
assert_equal 'success', @stack.merge_status
|
404
404
|
end
|
405
405
|
|
406
|
-
test "#merge_status returns pending if all undeployed commits are in pending or unknown state" do
|
406
|
+
test "#merge_status returns pending if all undeployed commits and last deployed commit are in pending or unknown state" do
|
407
407
|
shipit_commits(:fifth).statuses.destroy_all
|
408
408
|
shipit_commits(:fourth).statuses.update_all(state: 'pending')
|
409
|
-
|
409
|
+
shipit_commits(:third).statuses.update_all(state: 'pending')
|
410
|
+
@stack.deploys_and_rollbacks.last.update!(status: 'success', until_commit: shipit_commits(:third))
|
410
411
|
|
411
412
|
assert_equal 'pending', @stack.merge_status
|
412
413
|
end
|
413
414
|
|
414
|
-
test "#merge_status returns pending if there are no undeployed commits" do
|
415
|
-
@stack.
|
415
|
+
test "#merge_status returns pending if there are no undeployed commits and no deployed commits" do
|
416
|
+
@stack.deploys_and_rollbacks.last.update(status: 'success', until_commit: shipit_commits(:fifth))
|
416
417
|
|
417
418
|
assert_equal 'pending', @stack.merge_status
|
418
419
|
end
|
419
420
|
|
421
|
+
test "#merge_status returns state of last deployed commit if there are no undeployed commits waiting" do
|
422
|
+
shipit_commits(:fifth).statuses.destroy_all
|
423
|
+
@stack.deploys_and_rollbacks.last.update!(status: 'success', until_commit: shipit_commits(:fourth))
|
424
|
+
|
425
|
+
shipit_commits(:fourth).statuses.update_all(state: 'success')
|
426
|
+
assert_equal 'success', @stack.merge_status
|
427
|
+
|
428
|
+
shipit_commits(:fourth).statuses.last.update(state: 'failure')
|
429
|
+
assert_equal 'failure', @stack.merge_status
|
430
|
+
end
|
431
|
+
|
432
|
+
test "#merge_status returns state of last deployed commit if all undeployed commits are in pending or unknown state" do
|
433
|
+
shipit_commits(:fifth).statuses.destroy_all
|
434
|
+
shipit_commits(:fourth).statuses.update_all(state: 'pending')
|
435
|
+
@stack.deploys_and_rollbacks.last.update!(status: 'success', until_commit: shipit_commits(:third))
|
436
|
+
|
437
|
+
shipit_commits(:third).statuses.update_all(state: 'success')
|
438
|
+
assert_equal 'success', @stack.merge_status
|
439
|
+
|
440
|
+
shipit_commits(:third).statuses.last.update(state: 'failure')
|
441
|
+
assert_equal 'failure', @stack.merge_status
|
442
|
+
end
|
443
|
+
|
420
444
|
test "#handle_github_redirections update the stack if the repository was renamed" do
|
421
445
|
repo_permalink = 'https://api.github.com/repositories/42'
|
422
446
|
|
@@ -437,5 +461,70 @@ module Shipit
|
|
437
461
|
@stack.reload
|
438
462
|
assert_equal 'george/shipster', @stack.github_repo_name
|
439
463
|
end
|
464
|
+
|
465
|
+
test "#update_estimated_deploy_duration! records the 90th percentile duration among the last 100 deploys" do
|
466
|
+
assert_equal 1, @stack.estimated_deploy_duration
|
467
|
+
@stack.update_estimated_deploy_duration!
|
468
|
+
assert_equal 120, @stack.estimated_deploy_duration
|
469
|
+
end
|
470
|
+
|
471
|
+
test "#trigger_continuous_delivery bails out if the stack isn't deployable" do
|
472
|
+
refute_predicate @stack, :deployable?
|
473
|
+
refute_predicate @stack, :deployed_too_recently?
|
474
|
+
assert_no_enqueued_jobs do
|
475
|
+
assert_no_difference -> { Deploy.count } do
|
476
|
+
@stack.trigger_continuous_delivery
|
477
|
+
end
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
test "#trigger_continuous_delivery bails out if the stack is deployable but was deployed too recently" do
|
482
|
+
@stack.tasks.active.each(&:error!)
|
483
|
+
assert_predicate @stack, :deployable?
|
484
|
+
@stack.last_active_task.update(ended_at: 20.seconds.ago)
|
485
|
+
assert_predicate @stack, :deployed_too_recently?
|
486
|
+
|
487
|
+
assert_no_enqueued_jobs do
|
488
|
+
assert_no_difference -> { Deploy.count } do
|
489
|
+
@stack.trigger_continuous_delivery
|
490
|
+
end
|
491
|
+
end
|
492
|
+
end
|
493
|
+
|
494
|
+
test "#trigger_continuous_delivery trigger a deploy if all conditions are met" do
|
495
|
+
@stack.tasks.active.each(&:error!)
|
496
|
+
assert_predicate @stack, :deployable?
|
497
|
+
refute_predicate @stack, :deployed_too_recently?
|
498
|
+
|
499
|
+
assert_no_difference -> { Deploy.count } do
|
500
|
+
@stack.trigger_continuous_delivery
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
test "#next_commit_to_deploy returns the last deployable commit" do
|
505
|
+
@stack.tasks.where.not(until_commit_id: shipit_commits(:second).id).destroy_all
|
506
|
+
assert_equal shipit_commits(:second), @stack.last_deployed_commit
|
507
|
+
|
508
|
+
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
509
|
+
|
510
|
+
fifth_commit = shipit_commits(:fifth)
|
511
|
+
fifth_commit.statuses.create!(state: 'success', context: 'ci/travis')
|
512
|
+
assert_predicate fifth_commit, :deployable?
|
513
|
+
|
514
|
+
assert_equal shipit_commits(:fifth), @stack.next_commit_to_deploy
|
515
|
+
end
|
516
|
+
|
517
|
+
test "#next_commit_to_deploy respects the deploy.max_commits directive" do
|
518
|
+
@stack.tasks.destroy_all
|
519
|
+
|
520
|
+
fifth_commit = shipit_commits(:fifth)
|
521
|
+
fifth_commit.statuses.create!(state: 'success', context: 'ci/travis')
|
522
|
+
assert_predicate fifth_commit, :deployable?
|
523
|
+
|
524
|
+
assert_equal shipit_commits(:fifth), @stack.next_commit_to_deploy
|
525
|
+
|
526
|
+
@stack.expects(:maximum_commits_per_deploy).returns(3).at_least_once
|
527
|
+
assert_equal shipit_commits(:third), @stack.next_commit_to_deploy
|
528
|
+
end
|
440
529
|
end
|
441
530
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Shipit
|
4
|
+
class UndeployedCommitsTest < ActiveSupport::TestCase
|
5
|
+
setup do
|
6
|
+
@real_commit = shipit_commits(:cyclimse_first)
|
7
|
+
@commit = UndeployedCommit.new(@real_commit, 0)
|
8
|
+
@stack = @commit.stack
|
9
|
+
end
|
10
|
+
|
11
|
+
test "#deploy_disallowed? returns false if the commit and the stack are deployable" do
|
12
|
+
assert_predicate @commit, :deployable?
|
13
|
+
assert_predicate @stack, :deployable?
|
14
|
+
refute_predicate @commit, :deploy_disallowed?
|
15
|
+
end
|
16
|
+
|
17
|
+
test "#deploy_disallowed? returns false if the commit isn't deployable" do
|
18
|
+
@commit.statuses.update_all(state: 'failure')
|
19
|
+
refute_predicate @commit, :deployable?
|
20
|
+
assert_predicate @stack, :deployable?
|
21
|
+
assert_predicate @commit, :deploy_disallowed?
|
22
|
+
end
|
23
|
+
|
24
|
+
test "#deploy_disallowed? returns false if the stack isn't deployable" do
|
25
|
+
@stack.update!(lock_reason: "Let's eat some chips!")
|
26
|
+
assert_predicate @commit, :deployable?
|
27
|
+
refute_predicate @stack, :deployable?
|
28
|
+
assert_predicate @commit, :deploy_disallowed?
|
29
|
+
end
|
30
|
+
|
31
|
+
test "#deploy_discouraged? returns false if the commit index is lower than the maximum commits per deploy" do
|
32
|
+
assert_equal 2, @stack.maximum_commits_per_deploy
|
33
|
+
refute_predicate @commit, :deploy_discouraged?
|
34
|
+
end
|
35
|
+
|
36
|
+
test "#deploy_discouraged? returns true if the commit index is equal or bigger then the maximum commits per deploy" do
|
37
|
+
@commit = UndeployedCommit.new(@real_commit, 2)
|
38
|
+
assert_equal 2, @stack.maximum_commits_per_deploy
|
39
|
+
assert_predicate @commit, :deploy_discouraged?
|
40
|
+
end
|
41
|
+
|
42
|
+
test "#deploy_state returns `allowed` by default" do
|
43
|
+
assert_equal 'allowed', @commit.deploy_state
|
44
|
+
end
|
45
|
+
|
46
|
+
test "#deploy_state returns `locked` if the stack is locked" do
|
47
|
+
@stack.update!(lock_reason: "Let's eat some chips!")
|
48
|
+
assert_equal 'locked', @commit.deploy_state
|
49
|
+
end
|
50
|
+
|
51
|
+
test "#deploy_state returns `allowed` if the stack is locked but the safeties are ignored" do
|
52
|
+
@stack.update!(lock_reason: "Let's eat some chips!")
|
53
|
+
assert_equal 'allowed', @commit.deploy_state(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
test "#deploy_state returns `deploying` if the stack is already being deployed" do
|
57
|
+
@stack.trigger_deploy(@real_commit, AnonymousUser.new)
|
58
|
+
assert_equal 'deploying', @commit.deploy_state
|
59
|
+
end
|
60
|
+
|
61
|
+
test "#deploy_state returns `allowed` if the stack is already being deployed but the safeties are ignored" do
|
62
|
+
@stack.trigger_deploy(@real_commit, AnonymousUser.new)
|
63
|
+
assert_equal 'allowed', @commit.deploy_state(true)
|
64
|
+
end
|
65
|
+
|
66
|
+
test "#deploy_state returns the commit state if it isn't deployable" do
|
67
|
+
@commit.statuses.update_all(state: 'failure')
|
68
|
+
assert_equal 'failure', @commit.deploy_state(true)
|
69
|
+
end
|
70
|
+
|
71
|
+
test "#redeploy_state returns `allowed` by default" do
|
72
|
+
assert_equal 'allowed', @commit.redeploy_state
|
73
|
+
end
|
74
|
+
|
75
|
+
test "#redeploy_state returns `locked` if the stack is locked" do
|
76
|
+
@stack.update!(lock_reason: "Let's eat some chips!")
|
77
|
+
assert_equal 'locked', @commit.redeploy_state
|
78
|
+
end
|
79
|
+
|
80
|
+
test "#redeploy_state returns `allowed` if the stack is locked but the safeties are ignored" do
|
81
|
+
@stack.update!(lock_reason: "Let's eat some chips!")
|
82
|
+
assert_equal 'allowed', @commit.redeploy_state(true)
|
83
|
+
end
|
84
|
+
|
85
|
+
test "#redeploy_state returns `deploying` if the stack is already being deployed" do
|
86
|
+
@stack.trigger_deploy(@real_commit, AnonymousUser.new)
|
87
|
+
assert_equal 'deploying', @commit.redeploy_state
|
88
|
+
end
|
89
|
+
|
90
|
+
test "#redeploy_state returns `allowed` if the stack is already being deployed but the safeties are ignored" do
|
91
|
+
@stack.trigger_deploy(@real_commit, AnonymousUser.new)
|
92
|
+
assert_equal 'allowed', @commit.redeploy_state(true)
|
93
|
+
end
|
94
|
+
|
95
|
+
test "#redeploy_state returns `allowed` even if it isn't deployable" do
|
96
|
+
@commit.statuses.update_all(state: 'failure')
|
97
|
+
assert_equal 'allowed', @commit.redeploy_state(true)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -230,7 +230,7 @@ module Shipit
|
|
230
230
|
'review' => {'checklist' => [], 'monitoring' => [], 'checks' => []},
|
231
231
|
'dependencies' => {'override' => []},
|
232
232
|
'plugins' => {},
|
233
|
-
'deploy' => {'override' => nil, 'variables' => []},
|
233
|
+
'deploy' => {'override' => nil, 'variables' => [], 'max_commits' => nil, 'interval' => 0},
|
234
234
|
'rollback' => {'override' => nil},
|
235
235
|
'fetch' => nil,
|
236
236
|
'tasks' => {},
|
data/test/unit/shipit_test.rb
CHANGED
@@ -57,7 +57,8 @@ module Shipit
|
|
57
57
|
test ".github_teams merges the teams and team keys in a single array" do
|
58
58
|
Rails.application.secrets.stubs(:github_oauth).returns(
|
59
59
|
'team' => 'shopify/developers',
|
60
|
-
'teams' => ['shopify/developers', 'cyclimse/cooks']
|
60
|
+
'teams' => ['shopify/developers', 'cyclimse/cooks'],
|
61
|
+
)
|
61
62
|
assert_equal(['cyclimse/cooks', 'shopify/developers'], Shipit.github_teams.map(&:handle))
|
62
63
|
end
|
63
64
|
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.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -112,16 +112,16 @@ dependencies:
|
|
112
112
|
name: pubsubstub
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.0
|
117
|
+
version: 0.1.0
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.0
|
124
|
+
version: 0.1.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: safe_yaml
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -537,6 +537,7 @@ files:
|
|
537
537
|
- app/jobs/shipit/refresh_github_user_job.rb
|
538
538
|
- app/jobs/shipit/refresh_statuses_job.rb
|
539
539
|
- app/jobs/shipit/setup_github_hook_job.rb
|
540
|
+
- app/jobs/shipit/update_estimated_deploy_duration.rb
|
540
541
|
- app/models/shipit/anonymous_user.rb
|
541
542
|
- app/models/shipit/api_client.rb
|
542
543
|
- app/models/shipit/commit.rb
|
@@ -564,6 +565,7 @@ files:
|
|
564
565
|
- app/models/shipit/task.rb
|
565
566
|
- app/models/shipit/task_definition.rb
|
566
567
|
- app/models/shipit/team.rb
|
568
|
+
- app/models/shipit/undeployed_commit.rb
|
567
569
|
- app/models/shipit/unknown_status.rb
|
568
570
|
- app/models/shipit/user.rb
|
569
571
|
- app/models/shipit/variable_definition.rb
|
@@ -612,6 +614,9 @@ files:
|
|
612
614
|
- app/views/shipit/tasks/show.html.erb
|
613
615
|
- config/locales/en.yml
|
614
616
|
- config/routes.rb
|
617
|
+
- config/secrets.development.example.yml
|
618
|
+
- config/secrets.development.shopify.yml
|
619
|
+
- config/secrets.development.yml
|
615
620
|
- db/migrate/20140226233935_create_baseline.rb
|
616
621
|
- db/migrate/20150515190352_add_output_column_to_tasks.rb
|
617
622
|
- db/migrate/20150518214944_add_ignore_ci_to_stack.rb
|
@@ -633,7 +638,8 @@ files:
|
|
633
638
|
- db/migrate/20160303203940_add_encrypted_token_to_users.rb
|
634
639
|
- db/migrate/20160324155046_add_started_at_and_ended_at_on_tasks.rb
|
635
640
|
- db/migrate/20160426155146_add_index_for_stack_active_task.rb
|
636
|
-
- db/
|
641
|
+
- db/migrate/20160502150713_add_estimated_deploy_duration_to_stacks.rb
|
642
|
+
- db/migrate/20160526192650_reorder_active_tasks_index.rb
|
637
643
|
- lib/shipit-engine.rb
|
638
644
|
- lib/shipit.rb
|
639
645
|
- lib/shipit/command.rb
|
@@ -649,6 +655,7 @@ files:
|
|
649
655
|
- lib/shipit/rollback_commands.rb
|
650
656
|
- lib/shipit/simple_message_verifier.rb
|
651
657
|
- lib/shipit/stack_commands.rb
|
658
|
+
- lib/shipit/stat.rb
|
652
659
|
- lib/shipit/task_commands.rb
|
653
660
|
- lib/shipit/template_renderer_extension.rb
|
654
661
|
- lib/shipit/version.rb
|
@@ -698,6 +705,7 @@ files:
|
|
698
705
|
- test/dummy/config/environments/development.rb
|
699
706
|
- test/dummy/config/environments/production.rb
|
700
707
|
- test/dummy/config/environments/test.rb
|
708
|
+
- test/dummy/config/initializers/0_load_development_secrets.rb
|
701
709
|
- test/dummy/config/initializers/assets.rb
|
702
710
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
703
711
|
- test/dummy/config/initializers/cookies_serializer.rb
|
@@ -708,7 +716,6 @@ files:
|
|
708
716
|
- test/dummy/config/initializers/wrap_parameters.rb
|
709
717
|
- test/dummy/config/locales/en.yml
|
710
718
|
- test/dummy/config/routes.rb
|
711
|
-
- test/dummy/config/secrets.example.yml
|
712
719
|
- test/dummy/config/secrets.yml
|
713
720
|
- test/dummy/db/development.sqlite3
|
714
721
|
- test/dummy/db/schema.rb
|
@@ -774,6 +781,7 @@ files:
|
|
774
781
|
- test/models/status_test.rb
|
775
782
|
- test/models/task_definitions_test.rb
|
776
783
|
- test/models/team_test.rb
|
784
|
+
- test/models/undeployed_commits_test.rb
|
777
785
|
- test/models/users_test.rb
|
778
786
|
- test/test_command_integration.rb
|
779
787
|
- test/test_helper.rb
|
@@ -811,7 +819,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
811
819
|
version: '0'
|
812
820
|
requirements: []
|
813
821
|
rubyforge_project:
|
814
|
-
rubygems_version: 2.
|
822
|
+
rubygems_version: 2.2.5
|
815
823
|
signing_key:
|
816
824
|
specification_version: 4
|
817
825
|
summary: Application deployment software
|
@@ -849,6 +857,7 @@ test_files:
|
|
849
857
|
- test/dummy/config/environments/development.rb
|
850
858
|
- test/dummy/config/environments/production.rb
|
851
859
|
- test/dummy/config/environments/test.rb
|
860
|
+
- test/dummy/config/initializers/0_load_development_secrets.rb
|
852
861
|
- test/dummy/config/initializers/assets.rb
|
853
862
|
- test/dummy/config/initializers/backtrace_silencers.rb
|
854
863
|
- test/dummy/config/initializers/cookies_serializer.rb
|
@@ -859,7 +868,6 @@ test_files:
|
|
859
868
|
- test/dummy/config/initializers/wrap_parameters.rb
|
860
869
|
- test/dummy/config/locales/en.yml
|
861
870
|
- test/dummy/config/routes.rb
|
862
|
-
- test/dummy/config/secrets.example.yml
|
863
871
|
- test/dummy/config/secrets.yml
|
864
872
|
- test/dummy/config.ru
|
865
873
|
- test/dummy/db/development.sqlite3
|
@@ -927,6 +935,7 @@ test_files:
|
|
927
935
|
- test/models/status_test.rb
|
928
936
|
- test/models/task_definitions_test.rb
|
929
937
|
- test/models/team_test.rb
|
938
|
+
- test/models/undeployed_commits_test.rb
|
930
939
|
- test/models/users_test.rb
|
931
940
|
- test/test_command_integration.rb
|
932
941
|
- test/test_helper.rb
|
data/db/schema.rb
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
# This file is auto-generated from the current state of the database. Instead
|
3
|
-
# of editing this file, please use the migrations feature of Active Record to
|
4
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
-
#
|
6
|
-
# Note that this schema.rb definition is the authoritative source for your
|
7
|
-
# database schema. If you need to create the application database on another
|
8
|
-
# system, you should be using db:schema:load, not running all the migrations
|
9
|
-
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
-
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
-
#
|
12
|
-
# It's strongly recommended that you check this file into your version control system.
|
13
|
-
|
14
|
-
ActiveRecord::Schema.define(version: 20150424175630) do
|
15
|
-
|
16
|
-
create_table "api_clients", force: :cascade do |t|
|
17
|
-
t.text "permissions", limit: 65535
|
18
|
-
t.integer "creator_id", limit: 4
|
19
|
-
t.datetime "created_at", null: false
|
20
|
-
t.datetime "updated_at", null: false
|
21
|
-
t.string "name", limit: 255, default: ""
|
22
|
-
t.integer "stack_id", limit: 4
|
23
|
-
end
|
24
|
-
|
25
|
-
add_index "api_clients", ["creator_id"], name: "index_api_clients_on_creator_id", using: :btree
|
26
|
-
|
27
|
-
create_table "commits", force: :cascade do |t|
|
28
|
-
t.integer "stack_id", limit: 4, null: false
|
29
|
-
t.integer "author_id", limit: 4, null: false
|
30
|
-
t.integer "committer_id", limit: 4, null: false
|
31
|
-
t.string "sha", limit: 40, null: false
|
32
|
-
t.text "message", limit: 65535, null: false
|
33
|
-
t.datetime "created_at"
|
34
|
-
t.datetime "updated_at"
|
35
|
-
t.boolean "detached", default: false, null: false
|
36
|
-
t.datetime "authored_at", null: false
|
37
|
-
t.datetime "committed_at", null: false
|
38
|
-
t.integer "additions", limit: 4, default: 0
|
39
|
-
t.integer "deletions", limit: 4, default: 0
|
40
|
-
end
|
41
|
-
|
42
|
-
add_index "commits", ["author_id"], name: "index_commits_on_author_id", using: :btree
|
43
|
-
add_index "commits", ["committer_id"], name: "index_commits_on_committer_id", using: :btree
|
44
|
-
add_index "commits", ["created_at"], name: "index_commits_on_created_at", using: :btree
|
45
|
-
add_index "commits", ["stack_id"], name: "index_commits_on_stack_id", using: :btree
|
46
|
-
|
47
|
-
create_table "deliveries", force: :cascade do |t|
|
48
|
-
t.integer "hook_id", limit: 4, null: false
|
49
|
-
t.string "status", limit: 255, default: "pending", null: false
|
50
|
-
t.string "url", limit: 4096, null: false
|
51
|
-
t.string "content_type", limit: 255, null: false
|
52
|
-
t.string "event", limit: 255, null: false
|
53
|
-
t.text "payload", limit: 16777215, null: false
|
54
|
-
t.integer "response_code", limit: 4
|
55
|
-
t.text "response_headers", limit: 65535
|
56
|
-
t.text "response_body", limit: 65535
|
57
|
-
t.datetime "delivered_at"
|
58
|
-
t.datetime "created_at", null: false
|
59
|
-
t.datetime "updated_at", null: false
|
60
|
-
end
|
61
|
-
|
62
|
-
create_table "github_hooks", force: :cascade do |t|
|
63
|
-
t.integer "stack_id", limit: 4
|
64
|
-
t.integer "github_id", limit: 4
|
65
|
-
t.string "event", limit: 255
|
66
|
-
t.datetime "created_at"
|
67
|
-
t.datetime "updated_at"
|
68
|
-
t.string "secret", limit: 255
|
69
|
-
t.string "api_url", limit: 255
|
70
|
-
t.string "type", limit: 255
|
71
|
-
t.string "organization", limit: 255
|
72
|
-
end
|
73
|
-
|
74
|
-
add_index "github_hooks", ["organization", "event"], name: "index_github_hooks_on_organization_and_event", unique: true, using: :btree
|
75
|
-
add_index "github_hooks", ["stack_id", "event"], name: "index_github_hooks_on_stack_id_and_event", unique: true, using: :btree
|
76
|
-
|
77
|
-
create_table "hooks", force: :cascade do |t|
|
78
|
-
t.integer "stack_id", limit: 4
|
79
|
-
t.string "url", limit: 4096, null: false
|
80
|
-
t.string "content_type", limit: 4, default: "json", null: false
|
81
|
-
t.string "secret", limit: 255
|
82
|
-
t.string "events", limit: 255, default: "", null: false
|
83
|
-
t.boolean "insecure_ssl", default: false, null: false
|
84
|
-
t.datetime "created_at", null: false
|
85
|
-
t.datetime "updated_at", null: false
|
86
|
-
end
|
87
|
-
|
88
|
-
add_index "hooks", ["stack_id"], name: "index_hooks_on_stack_id", using: :btree
|
89
|
-
|
90
|
-
create_table "memberships", force: :cascade do |t|
|
91
|
-
t.integer "team_id", limit: 4
|
92
|
-
t.integer "user_id", limit: 4
|
93
|
-
t.datetime "created_at", null: false
|
94
|
-
t.datetime "updated_at", null: false
|
95
|
-
end
|
96
|
-
|
97
|
-
add_index "memberships", ["team_id", "user_id"], name: "index_memberships_on_team_id_and_user_id", unique: true, using: :btree
|
98
|
-
add_index "memberships", ["user_id"], name: "index_memberships_on_user_id", using: :btree
|
99
|
-
|
100
|
-
create_table "output_chunks", force: :cascade do |t|
|
101
|
-
t.integer "task_id", limit: 4
|
102
|
-
t.text "text", limit: 16777215
|
103
|
-
t.datetime "created_at"
|
104
|
-
t.datetime "updated_at"
|
105
|
-
end
|
106
|
-
|
107
|
-
add_index "output_chunks", ["task_id"], name: "index_output_chunks_on_task_id", using: :btree
|
108
|
-
|
109
|
-
create_table "stacks", force: :cascade do |t|
|
110
|
-
t.string "repo_name", limit: 255, null: false
|
111
|
-
t.string "repo_owner", limit: 255, null: false
|
112
|
-
t.string "environment", limit: 255, default: "production", null: false
|
113
|
-
t.datetime "created_at"
|
114
|
-
t.datetime "updated_at"
|
115
|
-
t.string "branch", limit: 255, default: "master", null: false
|
116
|
-
t.string "deploy_url", limit: 255
|
117
|
-
t.string "lock_reason", limit: 255
|
118
|
-
t.integer "tasks_count", limit: 4, default: 0, null: false
|
119
|
-
t.boolean "continuous_deployment", default: false, null: false
|
120
|
-
t.integer "undeployed_commits_count", limit: 4, default: 0, null: false
|
121
|
-
t.text "cached_deploy_spec", limit: 65535
|
122
|
-
t.integer "lock_author_id", limit: 4
|
123
|
-
end
|
124
|
-
|
125
|
-
add_index "stacks", ["repo_owner", "repo_name", "environment"], name: "stack_unicity", unique: true, using: :btree
|
126
|
-
|
127
|
-
create_table "statuses", force: :cascade do |t|
|
128
|
-
t.string "state", limit: 255
|
129
|
-
t.string "target_url", limit: 255
|
130
|
-
t.text "description", limit: 65535
|
131
|
-
t.string "context", limit: 255, default: "default", null: false
|
132
|
-
t.integer "commit_id", limit: 4
|
133
|
-
t.datetime "created_at"
|
134
|
-
t.datetime "updated_at"
|
135
|
-
end
|
136
|
-
|
137
|
-
add_index "statuses", ["commit_id"], name: "index_statuses_on_commit_id", using: :btree
|
138
|
-
|
139
|
-
create_table "tasks", force: :cascade do |t|
|
140
|
-
t.integer "stack_id", limit: 4, null: false
|
141
|
-
t.integer "since_commit_id", limit: 4, null: false
|
142
|
-
t.integer "until_commit_id", limit: 4, null: false
|
143
|
-
t.string "status", limit: 255, default: "pending", null: false
|
144
|
-
t.datetime "created_at"
|
145
|
-
t.datetime "updated_at"
|
146
|
-
t.integer "user_id", limit: 4
|
147
|
-
t.boolean "rolled_up", default: false, null: false
|
148
|
-
t.string "type", limit: 255
|
149
|
-
t.integer "parent_id", limit: 4
|
150
|
-
t.integer "additions", limit: 4, default: 0
|
151
|
-
t.integer "deletions", limit: 4, default: 0
|
152
|
-
t.text "definition", limit: 65535
|
153
|
-
end
|
154
|
-
|
155
|
-
add_index "tasks", ["rolled_up", "created_at", "status"], name: "index_tasks_on_rolled_up_and_created_at_and_status", using: :btree
|
156
|
-
add_index "tasks", ["since_commit_id"], name: "index_tasks_on_since_commit_id", using: :btree
|
157
|
-
add_index "tasks", ["stack_id"], name: "index_tasks_on_stack_id", using: :btree
|
158
|
-
add_index "tasks", ["until_commit_id"], name: "index_tasks_on_until_commit_id", using: :btree
|
159
|
-
add_index "tasks", ["user_id"], name: "index_tasks_on_user_id", using: :btree
|
160
|
-
|
161
|
-
create_table "teams", force: :cascade do |t|
|
162
|
-
t.integer "github_id", limit: 4
|
163
|
-
t.string "api_url", limit: 255
|
164
|
-
t.string "slug", limit: 255
|
165
|
-
t.string "name", limit: 255
|
166
|
-
t.string "organization", limit: 255
|
167
|
-
t.datetime "created_at", null: false
|
168
|
-
t.datetime "updated_at", null: false
|
169
|
-
end
|
170
|
-
|
171
|
-
add_index "teams", ["organization", "slug"], name: "index_teams_on_organization_and_slug", unique: true, using: :btree
|
172
|
-
|
173
|
-
create_table "users", force: :cascade do |t|
|
174
|
-
t.integer "github_id", limit: 4
|
175
|
-
t.string "name", limit: 255, null: false
|
176
|
-
t.string "email", limit: 255
|
177
|
-
t.string "login", limit: 255
|
178
|
-
t.string "api_url", limit: 255
|
179
|
-
t.datetime "created_at"
|
180
|
-
t.datetime "updated_at"
|
181
|
-
t.string "avatar_url", limit: 255
|
182
|
-
end
|
183
|
-
|
184
|
-
add_index "users", ["login"], name: "index_users_on_login", using: :btree
|
185
|
-
|
186
|
-
add_foreign_key "memberships", "teams"
|
187
|
-
add_foreign_key "memberships", "users"
|
188
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
development:
|
2
|
-
secret_key_base: s3cr3ts3cr3ts3cr3ts3cr3ts3cr3ts3cr3t
|
3
|
-
github_oauth:
|
4
|
-
# id:
|
5
|
-
# secret:
|
6
|
-
# teams:
|
7
|
-
# -
|
8
|
-
# -
|
9
|
-
github_api:
|
10
|
-
# access_token:
|
11
|
-
# login:
|
12
|
-
# password:
|
13
|
-
# api_endpoint:
|
14
|
-
host: 'http://localhost:3000'
|
15
|
-
redis_url: "redis://127.0.0.1:6379/7"
|
16
|
-
# features:
|
17
|
-
# - bootstrap
|
18
|
-
|
19
|
-
test:
|
20
|
-
secret_key_base: s3cr3ts3cr3ts3cr3ts3cr3ts3cr3ts3cr3t
|
21
|
-
host: shipit.com
|
22
|
-
github_api:
|
23
|
-
access_token: t0kEn
|
24
|
-
# login:
|
25
|
-
# password:
|
26
|
-
# api_endpoint:
|
27
|
-
github_oauth:
|
28
|
-
id: 1d
|
29
|
-
secret: s3cr37
|
30
|
-
# teams:
|
31
|
-
# -
|
32
|
-
# -
|
33
|
-
redis_url: "redis://127.0.0.1:6379/7"
|
34
|
-
# features:
|
35
|
-
# - bootstrap
|