shipit-engine 0.21.0 → 0.22.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 +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
|