shipit-engine 0.21.0 → 0.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -106
- data/app/assets/images/timedout.svg +14 -0
- data/app/assets/stylesheets/_pages/_commits.scss +11 -2
- data/app/controllers/shipit/stacks_controller.rb +1 -7
- data/app/controllers/shipit/webhooks_controller.rb +102 -66
- data/app/helpers/shipit/github_url_helper.rb +2 -2
- data/app/helpers/shipit/shipit_helper.rb +3 -31
- data/app/jobs/shipit/destroy_job.rb +9 -0
- data/app/jobs/shipit/github_sync_job.rb +1 -1
- data/app/jobs/shipit/setup_github_hook_job.rb +1 -3
- data/app/models/shipit/anonymous_user.rb +4 -1
- data/app/models/shipit/commit.rb +8 -8
- data/app/models/shipit/commit_deployment.rb +3 -3
- data/app/models/shipit/commit_deployment_status.rb +2 -2
- data/app/models/shipit/deploy.rb +3 -3
- data/app/models/shipit/deploy_spec/file_system.rb +3 -3
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +10 -2
- data/app/models/shipit/github_hook.rb +2 -99
- data/app/models/shipit/github_status.rb +1 -1
- data/app/models/shipit/hook.rb +1 -1
- data/app/models/shipit/pull_request.rb +10 -10
- data/app/models/shipit/rollback.rb +1 -1
- data/app/models/shipit/stack.rb +27 -26
- data/app/models/shipit/task.rb +2 -2
- data/app/models/shipit/team.rb +4 -17
- data/app/models/shipit/user.rb +3 -3
- data/app/serializers/shipit/task_serializer.rb +2 -2
- data/app/serializers/shipit/user_serializer.rb +1 -1
- data/app/views/shipit/missing_settings.html.erb +5 -36
- data/app/views/shipit/stacks/new.html.erb +1 -1
- data/app/views/shipit/stacks/settings.html.erb +0 -4
- data/config/routes.rb +3 -13
- data/config/secrets.development.shopify.yml +10 -15
- data/config/secrets.development.yml +1 -1
- data/db/migrate/20180417130436_remove_all_github_hooks.rb +11 -0
- data/lib/shipit.rb +13 -56
- data/lib/shipit/command.rb +1 -1
- data/lib/shipit/engine.rb +2 -8
- data/lib/shipit/github_app.rb +122 -0
- data/lib/shipit/octokit_bot_users_patch.rb +25 -0
- data/lib/shipit/octokit_iterator.rb +2 -2
- data/lib/shipit/version.rb +1 -1
- data/lib/tasks/teams.rake +8 -24
- data/test/controllers/stacks_controller_test.rb +3 -29
- data/test/controllers/webhooks_controller_test.rb +29 -46
- data/test/dummy/config/secrets.yml +40 -10
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +1 -1
- data/test/dummy/db/seeds.rb +0 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/fixtures/payloads/push_master.json +7 -6
- data/test/fixtures/payloads/push_not_master.json +7 -6
- data/test/fixtures/shipit/users.yml +2 -2
- data/test/helpers/hooks_helper.rb +1 -1
- data/test/helpers/payloads_helper.rb +1 -2
- data/test/jobs/destroy_stack_job_test.rb +1 -1
- data/test/models/commits_test.rb +5 -5
- data/test/models/deploy_spec_test.rb +17 -5
- data/test/models/github_hook_test.rb +1 -40
- data/test/models/pull_request_test.rb +11 -11
- data/test/models/stacks_test.rb +4 -10
- data/test/models/team_test.rb +3 -3
- data/test/models/users_test.rb +7 -7
- data/test/test_helper.rb +1 -1
- data/test/unit/github_app_test.rb +44 -0
- data/test/unit/shipit_test.rb +2 -49
- metadata +9 -3
- data/lib/tasks/webhook.rake +0 -6
@@ -4,14 +4,44 @@ test:
|
|
4
4
|
secret_key_base: s3cr3ts3cr3ts3cr3ts3cr3ts3cr3ts3cr3t
|
5
5
|
host: shipit.com
|
6
6
|
github_api:
|
7
|
-
|
8
|
-
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
|
7
|
+
token: t0k3n
|
8
|
+
github:
|
9
|
+
domain: # defaults to github.com
|
10
|
+
app_id: 42
|
11
|
+
installation_id: 43
|
12
|
+
bot_login: "shipit[bot]"
|
13
|
+
webhook_secret: # nil
|
14
|
+
# Randomly generated
|
15
|
+
private_key: |
|
16
|
+
-----BEGIN RSA PRIVATE KEY-----
|
17
|
+
MIIEpAIBAAKCAQEA7iUQC2uUq/gtQg0gxtyaccuicYgmq1LUr1mOWbmwM1Cv63+S
|
18
|
+
73qo8h87FX+YyclY5fZF6SMXIys02JOkImGgbnvEOLcHnImCYrWs03msOzEIO/pG
|
19
|
+
M0YedAPtQ2MEiLIu4y8htosVxeqfEOPiq9kQgFxNKyETzjdIA9q1md8sofuJUmPv
|
20
|
+
ibacW1PecuAMnn+P8qf0XIDp7uh6noB751KvhCaCNTAPtVE9NZ18OmNG9GOyX/pu
|
21
|
+
pQHIrPgTpTG6KlAe3r6LWvemzwsMtuRGU+K+KhK9dFIlSE+v9rA32KScO8efOh6s
|
22
|
+
Gu3rWorV4iDu14U62rzEfdzzc63YL94sUbZxbwIDAQABAoIBADLJ8r8MxZtbhYN1
|
23
|
+
u0zOFZ45WL6v09dsBfITvnlCUeLPzYUDIzoxxcBFittN6C744x3ARS6wjimw+EdM
|
24
|
+
TZALlCSb/sA9wMDQzt7wchhz9Zh2H5RzDu+2f54sjDh38KqancdT8PO2fAFGxX/b
|
25
|
+
qicOVyeZB9gv6MJtJc20olBbuXAeBNfcDABF9oxF+0i+Ssg7B4VXiqgcjtGbr/Og
|
26
|
+
qRll7AqyTArVx2xEcVfZxeZ4zGnigzcJq4te7yYpxzwk+RxblkPh54Yt4WxZ+8DI
|
27
|
+
Rsn3r6ajlpwzpwvsJFU2Txq7xBTzGQMFmy/Pnjk83kP2cogxB2+tRyjITGqTwD8b
|
28
|
+
gg9PFCkCgYEA+7u8A0l0Cz6p0SI6c7ftVePVRiIhpawWN7og/wEmI6zUjm/3rA+R
|
29
|
+
hrhaVKuOD8QF/HdDsqTck5gjGAjTmJz6r33/cl1Tz+pr62znsrB4r0yMKvQbKN81
|
30
|
+
WGaWOsi2+ZXqLNv5h5wpUF0MTKlXHeKnwP5kuEvGwVn6WURFCh6PhLMCgYEA8i5e
|
31
|
+
JjulJVGyd5HuoY3xyO7E6DjidsqRnVRq+hYpORjnHvTmSwe4+tH4ha2p9Kv2Y6k3
|
32
|
+
C1NYY/fSMQoYCCRaYyJleI+la/9tsZqAmtms4ZB8KhFmPHf9fW75i6G0xKWyZ8K+
|
33
|
+
E2Ft/UaEiM282593cguV6+Kt5uExnyPxLLK4FlUCgYEAwRJ/JGI8/7bjFkTTYheq
|
34
|
+
j5q75BufhOrU6471acAe2XPgXxLfefdC3Xodxh0CS3NESBvNL4Ikr4sbN37lk4Kq
|
35
|
+
/th7iOKtuqUIeru/hZy2I3VpeDRbdGCmEJQ2GwYA2LKztg5Nd0Y9paaIHXAwIfrK
|
36
|
+
QUqcQ4HTAk8ZpUeoUBeaaeMCgYANLmbjb9WiPVsYVPIHCwHA7PX8qbPxwT7BsGmO
|
37
|
+
KQyfVfKmZa/vH4F67Vi4deZNMdrcO8aKMEQcVM2065a5QrlEsgeR00eupB1lUEJ1
|
38
|
+
qylUsZeAdqf43JMIc7TTW77KATa/nQLZbTEeWus1wvTngztuEqFbUGAks9cOkVc8
|
39
|
+
FpIcbQKBgQDVIL8gPLmn0f+4oLF8MBC+oxtKpz14X5iJ1saGFkzW5I+nIEskpS0S
|
40
|
+
qtirnTCnJFGdCrFwctnxiuiCmyGwpBYdjIfHyvYAHnqAtMnESzCUyeSFZiquVW5W
|
41
|
+
MvbMmDPoV27XOHU9kIq6NXtfrkpufiyo6/VEYWozXalxKLNuqLYfPQ==
|
42
|
+
-----END RSA PRIVATE KEY-----
|
43
|
+
oauth:
|
44
|
+
id: Iv1.bf2c2c45b449bfd9
|
45
|
+
secret: ef694cd6e45223075d78d138ef014049052665f1
|
46
|
+
teams:
|
17
47
|
redis_url: "redis://127.0.0.1:6379/7"
|
Binary file
|
data/test/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20180417130436) do
|
14
14
|
|
15
15
|
create_table "api_clients", force: :cascade do |t|
|
16
16
|
t.text "permissions", limit: 65535
|
data/test/dummy/db/seeds.rb
CHANGED
@@ -6,7 +6,6 @@ FakeWeb.register_uri(:post, %r{https://example\.com/}, status: %w(200 OK))
|
|
6
6
|
|
7
7
|
# Cheap hack to allow rake db:seed to work
|
8
8
|
module Shipit
|
9
|
-
Stack.send(:define_method, :setup_hooks) {}
|
10
9
|
Stack.send(:define_method, :sync_github) {}
|
11
10
|
Commit.send(:define_method, :fetch_stats!) {}
|
12
11
|
Commit.send(:define_method, :refresh_statuses!) {}
|
data/test/dummy/db/test.sqlite3
CHANGED
Binary file
|
@@ -5,14 +5,14 @@
|
|
5
5
|
"created": false,
|
6
6
|
"deleted": false,
|
7
7
|
"forced": false,
|
8
|
-
"compare": "https://github.com/
|
8
|
+
"compare": "https://github.com/Shopify/shipit-engine/compare/16c259864de2...79d29e99cb83",
|
9
9
|
"commits": [
|
10
10
|
{
|
11
11
|
"id": "79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
12
12
|
"distinct": true,
|
13
13
|
"message": "modif",
|
14
14
|
"timestamp": "2014-02-28T10:27:42-08:00",
|
15
|
-
"url": "https://github.com/
|
15
|
+
"url": "https://github.com/Shopify/shipit-engine/commit/79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
16
16
|
"author": {
|
17
17
|
"name": "Guillaume Malette",
|
18
18
|
"email": "gmalette@gmail.com",
|
@@ -35,7 +35,7 @@
|
|
35
35
|
"distinct": true,
|
36
36
|
"message": "modif",
|
37
37
|
"timestamp": "2014-02-28T10:27:42-08:00",
|
38
|
-
"url": "https://github.com/
|
38
|
+
"url": "https://github.com/Shopify/shipit-engine/commit/79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
39
39
|
"author": {
|
40
40
|
"name": "Guillaume Malette",
|
41
41
|
"email": "gmalette@gmail.com",
|
@@ -54,8 +54,9 @@
|
|
54
54
|
},
|
55
55
|
"repository": {
|
56
56
|
"id": 17266426,
|
57
|
-
"name": "
|
58
|
-
"
|
57
|
+
"name": "shipit-engine",
|
58
|
+
"full_name": "Shopify/shipit-engine",
|
59
|
+
"url": "https://github.com/Shopify/shipit-engine",
|
59
60
|
"description": "Pure test repo, look elsewhere please.",
|
60
61
|
"watchers": 0,
|
61
62
|
"stargazers": 0,
|
@@ -63,7 +64,7 @@
|
|
63
64
|
"fork": false,
|
64
65
|
"size": 0,
|
65
66
|
"owner": {
|
66
|
-
"name": "
|
67
|
+
"name": "Shopify",
|
67
68
|
"email": "jean.boussier@gmail.com"
|
68
69
|
},
|
69
70
|
"private": false,
|
@@ -5,14 +5,14 @@
|
|
5
5
|
"created": false,
|
6
6
|
"deleted": false,
|
7
7
|
"forced": false,
|
8
|
-
"compare": "https://github.com/
|
8
|
+
"compare": "https://github.com/Shopify/shipit-engine/compare/16c259864de2...79d29e99cb83",
|
9
9
|
"commits": [
|
10
10
|
{
|
11
11
|
"id": "79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
12
12
|
"distinct": true,
|
13
13
|
"message": "modif",
|
14
14
|
"timestamp": "2014-02-28T10:27:42-08:00",
|
15
|
-
"url": "https://github.com/
|
15
|
+
"url": "https://github.com/Shopify/shipit-engine/commit/79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
16
16
|
"author": {
|
17
17
|
"name": "Guillaume Malette",
|
18
18
|
"email": "gmalette@gmail.com",
|
@@ -35,7 +35,7 @@
|
|
35
35
|
"distinct": true,
|
36
36
|
"message": "modif",
|
37
37
|
"timestamp": "2014-02-28T10:27:42-08:00",
|
38
|
-
"url": "https://github.com/
|
38
|
+
"url": "https://github.com/Shopify/shipit-engine/commit/79d29e99cb83e0ba16c9e30c502a60995e711e5f",
|
39
39
|
"author": {
|
40
40
|
"name": "Guillaume Malette",
|
41
41
|
"email": "gmalette@gmail.com",
|
@@ -54,8 +54,9 @@
|
|
54
54
|
},
|
55
55
|
"repository": {
|
56
56
|
"id": 17266426,
|
57
|
-
"name": "
|
58
|
-
"
|
57
|
+
"name": "shipit-engine",
|
58
|
+
"full_name": "Shopify/shipit-engine",
|
59
|
+
"url": "https://github.com/Shopify/shipit-engine",
|
59
60
|
"description": "Pure test repo, look elsewhere please.",
|
60
61
|
"watchers": 0,
|
61
62
|
"stargazers": 0,
|
@@ -63,7 +64,7 @@
|
|
63
64
|
"fork": false,
|
64
65
|
"size": 0,
|
65
66
|
"owner": {
|
66
|
-
"name": "
|
67
|
+
"name": "Shopify",
|
67
68
|
"email": "jean.boussier@gmail.com"
|
68
69
|
},
|
69
70
|
"private": false,
|
@@ -23,7 +23,7 @@ module HooksHelper
|
|
23
23
|
args.map.with_index.all? { |value, index| value == call.args[index] }
|
24
24
|
end
|
25
25
|
matcher = args.map(&:inspect).join(', ')
|
26
|
-
got = called
|
26
|
+
got = called&.args&.map(&:inspect)&.join(', ')
|
27
27
|
refute called, "Expected no hook matching: (#{matcher})\n got: (#{got})"
|
28
28
|
end
|
29
29
|
|
@@ -8,7 +8,7 @@ module Shipit
|
|
8
8
|
end
|
9
9
|
|
10
10
|
test "perform destroys the received stack" do
|
11
|
-
Shipit.
|
11
|
+
Shipit.github.api.expects(:remove_hook).times(@stack.github_hooks.count)
|
12
12
|
|
13
13
|
assert_difference -> { Stack.count }, -1 do
|
14
14
|
@job.perform(@stack)
|
data/test/models/commits_test.rb
CHANGED
@@ -16,9 +16,9 @@ module Shipit
|
|
16
16
|
end
|
17
17
|
|
18
18
|
test "#pull_request? detects pull requests with unusual branch names" do
|
19
|
-
@pr.message = "Merge pull request #7 from Shopify/bump
|
19
|
+
@pr.message = "Merge pull request #7 from Shopify/bump--v1.0.1\n\nBump v1.0.1"
|
20
20
|
assert @pr.pull_request?
|
21
|
-
assert_equal "Bump
|
21
|
+
assert_equal "Bump v1.0.1", @pr.pull_request_title
|
22
22
|
end
|
23
23
|
|
24
24
|
test "#pull_request_number extract the pull request id from the message" do
|
@@ -162,7 +162,7 @@ module Shipit
|
|
162
162
|
target_url: 'http://example.com',
|
163
163
|
created_at: 1.day.ago,
|
164
164
|
)
|
165
|
-
Shipit.
|
165
|
+
Shipit.github.api.expects(:statuses).with(@stack.github_repo_name, @commit.sha).returns([status])
|
166
166
|
assert_difference '@commit.statuses.count', 1 do
|
167
167
|
@commit.refresh_statuses!
|
168
168
|
end
|
@@ -186,7 +186,7 @@ module Shipit
|
|
186
186
|
|
187
187
|
test "fetch_stats! pulls additions and deletions from github" do
|
188
188
|
commit = stub(stats: stub(additions: 4242, deletions: 2424))
|
189
|
-
Shipit.
|
189
|
+
Shipit.github.api.expects(:commit).with(@stack.github_repo_name, @commit.sha).returns(commit)
|
190
190
|
@commit.fetch_stats!
|
191
191
|
assert_equal 4242, @commit.additions
|
192
192
|
assert_equal 2424, @commit.deletions
|
@@ -194,7 +194,7 @@ module Shipit
|
|
194
194
|
|
195
195
|
test "fetch_stats! doesn't fail if the commits have no stats" do
|
196
196
|
commit = stub(stats: nil)
|
197
|
-
Shipit.
|
197
|
+
Shipit.github.api.expects(:commit).with(@stack.github_repo_name, @commit.sha).returns(commit)
|
198
198
|
assert_nothing_raised do
|
199
199
|
@commit.fetch_stats!
|
200
200
|
end
|
@@ -123,6 +123,17 @@ module Shipit
|
|
123
123
|
'context' => 'bar',
|
124
124
|
},
|
125
125
|
)
|
126
|
+
assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.deploy_steps
|
127
|
+
end
|
128
|
+
|
129
|
+
test "#deploy_steps `kubernetes` respects timeout false" do
|
130
|
+
@spec.stubs(:load_config).returns(
|
131
|
+
'kubernetes' => {
|
132
|
+
'namespace' => 'foo',
|
133
|
+
'context' => 'bar',
|
134
|
+
'timeout' => false,
|
135
|
+
},
|
136
|
+
)
|
126
137
|
assert_equal ["kubernetes-deploy foo bar"], @spec.deploy_steps
|
127
138
|
end
|
128
139
|
|
@@ -135,7 +146,7 @@ module Shipit
|
|
135
146
|
'context' => 'bar',
|
136
147
|
},
|
137
148
|
)
|
138
|
-
assert_equal ["kubernetes-deploy foo bar"], @spec.deploy_steps
|
149
|
+
assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.deploy_steps
|
139
150
|
end
|
140
151
|
|
141
152
|
test "#deploy_steps returns kubernetes command if `kubernetes` is present and template_dir is set" do
|
@@ -146,7 +157,7 @@ module Shipit
|
|
146
157
|
'template_dir' => 'k8s_templates/',
|
147
158
|
},
|
148
159
|
)
|
149
|
-
assert_equal ["kubernetes-deploy --template-dir k8s_templates/ foo bar"], @spec.deploy_steps
|
160
|
+
assert_equal ["kubernetes-deploy --max-watch-seconds 900 --template-dir k8s_templates/ foo bar"], @spec.deploy_steps
|
150
161
|
end
|
151
162
|
|
152
163
|
test "#deploy_steps prepend and append pre and post steps" do
|
@@ -188,7 +199,7 @@ module Shipit
|
|
188
199
|
'context' => 'bar',
|
189
200
|
},
|
190
201
|
)
|
191
|
-
assert_equal ["kubernetes-deploy foo bar"], @spec.rollback_steps
|
202
|
+
assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.rollback_steps
|
192
203
|
end
|
193
204
|
|
194
205
|
test "#rollback_steps returns kubernetes-deploy command when both capfile and `kubernetes` are present" do
|
@@ -200,7 +211,7 @@ module Shipit
|
|
200
211
|
'context' => 'bar',
|
201
212
|
},
|
202
213
|
)
|
203
|
-
assert_equal ["kubernetes-deploy foo bar"], @spec.rollback_steps
|
214
|
+
assert_equal ["kubernetes-deploy --max-watch-seconds 900 foo bar"], @spec.rollback_steps
|
204
215
|
end
|
205
216
|
|
206
217
|
test '#machine_env returns an environment hash' do
|
@@ -344,13 +355,14 @@ module Shipit
|
|
344
355
|
'kubernetes' => {
|
345
356
|
'namespace' => 'foo',
|
346
357
|
'context' => 'bar',
|
358
|
+
'timeout' => '20m',
|
347
359
|
},
|
348
360
|
)
|
349
361
|
tasks = @spec.task_definitions
|
350
362
|
assert_equal 2, tasks.size
|
351
363
|
|
352
364
|
restart_task = tasks.find { |t| t.id == "restart" }
|
353
|
-
assert_equal ["kubernetes-restart foo bar"], restart_task.steps
|
365
|
+
assert_equal ["kubernetes-restart foo bar --max-watch-seconds 1200"], restart_task.steps
|
354
366
|
end
|
355
367
|
|
356
368
|
test "task definitions returns an array of VariableDefinition instances" do
|
@@ -7,47 +7,8 @@ module Shipit
|
|
7
7
|
@hook = shipit_github_hooks(:shipit_push)
|
8
8
|
end
|
9
9
|
|
10
|
-
test "#verify_signature is true if the signature matches" do
|
11
|
-
assert @hook.verify_signature('sha1=9fb52fecc2b97b7a912aca27685149d2ce571900', 'hello shipit')
|
12
|
-
end
|
13
|
-
|
14
|
-
test "#verify_signature is false if the signature doesn't match" do
|
15
|
-
refute @hook.verify_signature('sha1=9fb52fecc2b97b7a912aca27685149d2ce571900', 'hello toto')
|
16
|
-
end
|
17
|
-
|
18
|
-
test "#setup! create the hook on Github side" do
|
19
|
-
@hook = shipit_github_hooks(:cyclimse_push)
|
20
|
-
|
21
|
-
response = mock(id: 44, rels: {self: mock(href: 'https://api.github.com/somestuff')})
|
22
|
-
Shipit.github_api.expects(:create_hook).with(
|
23
|
-
@hook.github_repo_name,
|
24
|
-
'web',
|
25
|
-
includes(:url, :content_type, :secret),
|
26
|
-
includes(:events, :active),
|
27
|
-
).returns(response)
|
28
|
-
@hook.setup!
|
29
|
-
@hook.reload
|
30
|
-
assert_equal 44, @hook.github_id
|
31
|
-
assert_equal 'https://api.github.com/somestuff', @hook.api_url
|
32
|
-
end
|
33
|
-
|
34
|
-
test "#setup! update the hook it it already exist" do
|
35
|
-
response = mock(id: 44, rels: {self: mock(href: 'https://api.github.com/somestuff')})
|
36
|
-
Shipit.github_api.expects(:edit_hook).with(
|
37
|
-
@hook.github_repo_name,
|
38
|
-
@hook.github_id,
|
39
|
-
'web',
|
40
|
-
includes(:url, :content_type, :secret),
|
41
|
-
includes(:events, :active),
|
42
|
-
).returns(response)
|
43
|
-
@hook.setup!
|
44
|
-
@hook.reload
|
45
|
-
assert_equal 44, @hook.github_id
|
46
|
-
assert_equal 'https://api.github.com/somestuff', @hook.api_url
|
47
|
-
end
|
48
|
-
|
49
10
|
test "#destroy starts by removing the hook" do
|
50
|
-
Shipit.
|
11
|
+
Shipit.legacy_github_api.expects(:remove_hook).with(@hook.github_repo_name, @hook.github_id)
|
51
12
|
assert_difference -> { GithubHook.count }, -1 do
|
52
13
|
@hook.destroy!
|
53
14
|
end
|
@@ -59,7 +59,7 @@ module Shipit
|
|
59
59
|
|
60
60
|
assert_nil PullRequest.extract_number(@stack, 'https://github.com/ACME/shipit-engine/pull/42')
|
61
61
|
|
62
|
-
Shipit.expects(:
|
62
|
+
Shipit.github.expects(:domain).returns('github.acme.com').at_least_once
|
63
63
|
assert_equal 42, PullRequest.extract_number(@stack, 'https://github.acme.com/Shopify/shipit-engine/pull/42')
|
64
64
|
assert_nil PullRequest.extract_number(@stack, 'https://github.com/Shopify/shipit-engine/pull/42')
|
65
65
|
end
|
@@ -69,7 +69,7 @@ module Shipit
|
|
69
69
|
|
70
70
|
head_sha = '64b3833d39def7ec65b57b42f496eb27ab4980b6'
|
71
71
|
base_sha = 'ba7ab50e02286f7d6c60c1ef75258133dd9ea763'
|
72
|
-
Shipit.
|
72
|
+
Shipit.github.api.expects(:pull_request).with(@stack.github_repo_name, pull_request.number).returns(
|
73
73
|
stub(
|
74
74
|
id: 4_857_578,
|
75
75
|
url: 'https://api.github.com/repos/Shopify/shipit-engine/pulls/64',
|
@@ -98,7 +98,7 @@ module Shipit
|
|
98
98
|
)
|
99
99
|
|
100
100
|
[head_sha, base_sha].each do |sha|
|
101
|
-
Shipit.
|
101
|
+
Shipit.github.api.expects(:commit).with(@stack.github_repo_name, sha).returns(
|
102
102
|
stub(
|
103
103
|
sha: sha,
|
104
104
|
author: author,
|
@@ -116,7 +116,7 @@ module Shipit
|
|
116
116
|
)
|
117
117
|
end
|
118
118
|
|
119
|
-
Shipit.
|
119
|
+
Shipit.github.api.expects(:statuses).with(@stack.github_repo_name, head_sha).returns([stub(
|
120
120
|
state: 'success',
|
121
121
|
description: nil,
|
122
122
|
context: 'default',
|
@@ -213,16 +213,16 @@ module Shipit
|
|
213
213
|
end
|
214
214
|
|
215
215
|
test "#merge! doesnt delete the branch if there are open PRs against it" do
|
216
|
-
Shipit.
|
217
|
-
Shipit.
|
218
|
-
Shipit.
|
216
|
+
Shipit.github.api.expects(:merge_pull_request).once.returns(true)
|
217
|
+
Shipit.github.api.expects(:pull_requests).once.with(@stack.github_repo_name, base: @pr.branch).returns([1])
|
218
|
+
Shipit.github.api.expects(:delete_branch).never.returns(false)
|
219
219
|
assert_equal true, @pr.merge!
|
220
220
|
end
|
221
221
|
|
222
222
|
test "#merge! increments undeployed_commits_count" do
|
223
|
-
Shipit.
|
224
|
-
Shipit.
|
225
|
-
Shipit.
|
223
|
+
Shipit.github.api.expects(:merge_pull_request).once.returns(true)
|
224
|
+
Shipit.github.api.expects(:pull_requests).once.returns([])
|
225
|
+
Shipit.github.api.expects(:delete_branch).once.returns(true)
|
226
226
|
assert_difference '@stack.undeployed_commits_count' do
|
227
227
|
@pr.merge!
|
228
228
|
@stack.reload
|
@@ -241,7 +241,7 @@ module Shipit
|
|
241
241
|
test "#stale? returns true when the branch falls behind the maximum commits" do
|
242
242
|
@pr.base_commit = shipit_commits(:second)
|
243
243
|
@pr.base_ref = 'default-branch'
|
244
|
-
Shipit.
|
244
|
+
Shipit.github.api.expects(:compare).with(@stack.github_repo_name, @pr.base_ref, @pr.head.sha).returns(
|
245
245
|
stub(
|
246
246
|
behind_by: 10,
|
247
247
|
),
|
data/test/models/stacks_test.rb
CHANGED
@@ -213,12 +213,6 @@ module Shipit
|
|
213
213
|
@stack.update_deployed_revision(last_deploy.since_commit.sha)
|
214
214
|
end
|
215
215
|
|
216
|
-
test "#create queues 2 GithubSetupWebhooksJob" do
|
217
|
-
assert_enqueued_with(job: SetupGithubHookJob) do
|
218
|
-
Stack.create!(repo_name: 'rails', repo_owner: 'rails')
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
216
|
test "#create queues a GithubSyncJob" do
|
223
217
|
assert_enqueued_with(job: GithubSyncJob) do
|
224
218
|
Stack.create!(repo_name: 'rails', repo_owner: 'rails')
|
@@ -455,16 +449,16 @@ module Shipit
|
|
455
449
|
repo_permalink = 'https://api.github.com/repositories/42'
|
456
450
|
|
457
451
|
commits_redirection = stub(message: 'Moved Permanently', url: File.join(repo_permalink, '/commits'))
|
458
|
-
Shipit.
|
452
|
+
Shipit.github.api.expects(:commits).with(@stack.github_repo_name, sha: 'master').returns(commits_redirection)
|
459
453
|
|
460
454
|
repo_redirection = stub(message: 'Moved Permanently', url: repo_permalink)
|
461
|
-
Shipit.
|
455
|
+
Shipit.github.api.expects(:repo).with('shopify/shipit-engine').returns(repo_redirection)
|
462
456
|
|
463
457
|
repo_resource = stub(name: 'shipster', owner: stub(login: 'george'))
|
464
|
-
Shipit.
|
458
|
+
Shipit.github.api.expects(:get).with(repo_permalink).returns(repo_resource)
|
465
459
|
|
466
460
|
commits_resource = stub
|
467
|
-
Shipit.
|
461
|
+
Shipit.github.api.expects(:commits).with('george/shipster', sha: 'master').returns(commits_resource)
|
468
462
|
|
469
463
|
assert_equal 'shopify/shipit-engine', @stack.github_repo_name
|
470
464
|
assert_equal commits_resource, @stack.github_commits
|