shipit-engine 0.5.2 → 0.6.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.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/shipit/api/cacheable.rb +13 -0
  3. data/app/controllers/concerns/shipit/api/paginable.rb +37 -0
  4. data/app/controllers/concerns/shipit/api/rendering.rb +25 -0
  5. data/app/controllers/concerns/{api/paginable.rb → shipit/pagination.rb} +5 -13
  6. data/app/controllers/shipit/api/base_controller.rb +68 -0
  7. data/app/controllers/shipit/api/deploys_controller.rb +17 -0
  8. data/app/controllers/shipit/api/hooks_controller.rb +53 -0
  9. data/app/controllers/shipit/api/locks_controller.rb +32 -0
  10. data/app/controllers/shipit/api/outputs_controller.rb +17 -0
  11. data/app/controllers/shipit/api/stacks_controller.rb +21 -0
  12. data/app/controllers/shipit/api/tasks_controller.rb +20 -0
  13. data/app/controllers/shipit/commit_checks_controller.rb +26 -0
  14. data/app/controllers/shipit/deploys_controller.rb +47 -0
  15. data/app/controllers/shipit/github_authentication_controller.rb +27 -0
  16. data/app/controllers/shipit/rollbacks_controller.rb +26 -0
  17. data/app/controllers/shipit/shipit_controller.rb +62 -0
  18. data/app/controllers/shipit/stacks_controller.rb +81 -0
  19. data/app/controllers/shipit/status_controller.rb +7 -0
  20. data/app/controllers/shipit/tasks_controller.rb +48 -0
  21. data/app/controllers/shipit/webhooks_controller.rb +101 -0
  22. data/app/helpers/shipit/chunks_helper.rb +8 -0
  23. data/app/helpers/shipit/deploys_helper.rb +28 -0
  24. data/app/helpers/shipit/github_url_helper.rb +48 -0
  25. data/app/helpers/shipit/shipit_helper.rb +64 -0
  26. data/app/helpers/shipit/stacks_helper.rb +78 -0
  27. data/app/helpers/shipit/tasks_helper.rb +11 -0
  28. data/app/jobs/shipit/background_job.rb +24 -0
  29. data/app/jobs/shipit/background_job/unique.rb +28 -0
  30. data/app/jobs/shipit/cache_deploy_spec_job.rb +12 -0
  31. data/app/jobs/shipit/chunk_rollup_job.rb +21 -0
  32. data/app/jobs/shipit/clear_git_cache_job.rb +9 -0
  33. data/app/jobs/shipit/deliver_hook_job.rb +9 -0
  34. data/app/jobs/shipit/destroy_stack_job.rb +9 -0
  35. data/app/jobs/shipit/emit_event_job.rb +10 -0
  36. data/app/jobs/shipit/fetch_commit_stats_job.rb +9 -0
  37. data/app/jobs/shipit/fetch_deployed_revision_job.rb +23 -0
  38. data/app/jobs/shipit/git_mirror_update_job.rb +12 -0
  39. data/app/jobs/shipit/github_sync_job.rb +55 -0
  40. data/app/jobs/shipit/perform_commit_checks_job.rb +7 -0
  41. data/app/jobs/shipit/perform_task_job.rb +57 -0
  42. data/app/jobs/shipit/refresh_github_user_job.rb +9 -0
  43. data/app/jobs/shipit/refresh_statuses_job.rb +14 -0
  44. data/app/jobs/shipit/setup_github_hook_job.rb +11 -0
  45. data/app/models/shipit/anonymous_user.rb +43 -0
  46. data/app/models/shipit/api_client.rb +44 -0
  47. data/app/models/shipit/commit.rb +209 -0
  48. data/app/models/shipit/commit_checks.rb +90 -0
  49. data/app/models/shipit/delivery.rb +47 -0
  50. data/app/models/shipit/deploy.rb +153 -0
  51. data/app/models/shipit/deploy_spec.rb +150 -0
  52. data/app/models/shipit/deploy_spec/bundler_discovery.rb +61 -0
  53. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +29 -0
  54. data/app/models/shipit/deploy_spec/file_system.rb +64 -0
  55. data/app/models/shipit/deploy_spec/pypi_discovery.rb +34 -0
  56. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +34 -0
  57. data/app/models/shipit/github_hook.rb +148 -0
  58. data/app/models/shipit/hook.rb +86 -0
  59. data/app/models/shipit/membership.rb +8 -0
  60. data/app/models/shipit/missing_status.rb +21 -0
  61. data/app/models/shipit/output_chunk.rb +11 -0
  62. data/app/models/shipit/rollback.rb +31 -0
  63. data/app/models/shipit/stack.rb +308 -0
  64. data/app/models/shipit/status.rb +44 -0
  65. data/app/models/shipit/status_group.rb +35 -0
  66. data/app/models/shipit/task.rb +201 -0
  67. data/app/models/shipit/task_definition.rb +38 -0
  68. data/app/models/shipit/team.rb +69 -0
  69. data/app/models/shipit/unknown_status.rb +43 -0
  70. data/app/models/shipit/user.rb +83 -0
  71. data/app/models/shipit/variable_definition.rb +21 -0
  72. data/app/serializers/concerns/shipit/conditional_attributes.rb +22 -0
  73. data/app/serializers/shipit/anonymous_user_serializer.rb +4 -0
  74. data/app/serializers/shipit/commit_serializer.rb +8 -0
  75. data/app/serializers/shipit/deploy_serializer.rb +15 -0
  76. data/app/serializers/shipit/hook_serializer.rb +12 -0
  77. data/app/serializers/shipit/rollback_serializer.rb +7 -0
  78. data/app/serializers/shipit/short_commit_serializer.rb +9 -0
  79. data/app/serializers/shipit/stack_serializer.rb +33 -0
  80. data/app/serializers/shipit/tail_task_serializer.rb +39 -0
  81. data/app/serializers/shipit/task_serializer.rb +30 -0
  82. data/app/serializers/shipit/user_serializer.rb +5 -0
  83. data/app/views/{commits → shipit/commits}/_commit.html.erb +1 -1
  84. data/app/views/{commits → shipit/commits}/_commit_author.html.erb +0 -0
  85. data/app/views/{deploys → shipit/deploys}/_checklist.html.erb +0 -0
  86. data/app/views/{deploys → shipit/deploys}/_checks.html.erb +0 -0
  87. data/app/views/{deploys → shipit/deploys}/_concurrent_deploy_warning.html.erb +0 -0
  88. data/app/views/{deploys → shipit/deploys}/_deploy.html.erb +1 -1
  89. data/app/views/{deploys → shipit/deploys}/_monitoring.html.erb +0 -0
  90. data/app/views/{deploys → shipit/deploys}/_summary.html.erb +0 -0
  91. data/app/views/{deploys → shipit/deploys}/new.html.erb +3 -3
  92. data/app/views/{deploys → shipit/deploys}/rollback.html.erb +2 -2
  93. data/app/views/{deploys → shipit/deploys}/show.html.erb +1 -1
  94. data/app/views/{github_authentication → shipit/github_authentication}/failed.html.erb +0 -0
  95. data/app/views/{stacks → shipit/stacks}/_header.html.erb +0 -0
  96. data/app/views/{stacks → shipit/stacks}/index.html.erb +0 -0
  97. data/app/views/{stacks → shipit/stacks}/new.html.erb +0 -0
  98. data/app/views/{stacks → shipit/stacks}/settings.html.erb +1 -1
  99. data/app/views/{stacks → shipit/stacks}/show.html.erb +2 -2
  100. data/app/views/{statuses → shipit/statuses}/_group.html.erb +1 -1
  101. data/app/views/{statuses → shipit/statuses}/_status.html.erb +0 -0
  102. data/app/views/{tasks → shipit/tasks}/_task.html.erb +1 -1
  103. data/app/views/{tasks → shipit/tasks}/_task_output.html.erb +1 -1
  104. data/app/views/{tasks → shipit/tasks}/index.html.erb +1 -1
  105. data/app/views/{tasks → shipit/tasks}/new.html.erb +1 -1
  106. data/app/views/{tasks → shipit/tasks}/show.html.erb +1 -1
  107. data/db/migrate/20160104151742_increase_tasks_type_size_back.rb +5 -0
  108. data/db/migrate/20160104151833_convert_sti_columns.rb +10 -0
  109. data/lib/shipit.rb +11 -10
  110. data/lib/shipit/command.rb +171 -0
  111. data/lib/shipit/commands.rb +25 -0
  112. data/lib/shipit/deploy_commands.rb +21 -0
  113. data/lib/shipit/engine.rb +3 -0
  114. data/lib/shipit/rollback_commands.rb +7 -0
  115. data/lib/shipit/stack_commands.rb +60 -0
  116. data/lib/shipit/task_commands.rb +68 -0
  117. data/lib/shipit/version.rb +1 -1
  118. data/lib/tasks/cron.rake +3 -3
  119. data/test/controllers/api/base_controller_test.rb +18 -14
  120. data/test/controllers/api/deploys_controller_test.rb +56 -52
  121. data/test/controllers/api/hooks_controller_test.rb +62 -58
  122. data/test/controllers/api/locks_controller_test.rb +38 -34
  123. data/test/controllers/api/outputs_controller_test.rb +15 -11
  124. data/test/controllers/api/stacks_controller_test.rb +56 -52
  125. data/test/controllers/api/tasks_controller_test.rb +30 -26
  126. data/test/controllers/commit_checks_controller_test.rb +29 -27
  127. data/test/controllers/deploys_controller_test.rb +68 -66
  128. data/test/controllers/github_authentication_controller_test.rb +9 -7
  129. data/test/controllers/rollbacks_controller_test.rb +43 -41
  130. data/test/controllers/stacks_controller_test.rb +131 -128
  131. data/test/controllers/status_controller_test.rb +8 -6
  132. data/test/controllers/tasks_controller_test.rb +70 -68
  133. data/test/controllers/webhooks_controller_test.rb +127 -125
  134. data/test/dummy/db/development.sqlite3 +0 -0
  135. data/test/dummy/db/schema.rb +2 -2
  136. data/test/dummy/db/seeds.rb +133 -131
  137. data/test/dummy/db/test.sqlite3 +0 -0
  138. data/test/fixtures/{api_clients.yml → shipit/api_clients.yml} +0 -0
  139. data/test/fixtures/{commits.yml → shipit/commits.yml} +0 -0
  140. data/test/fixtures/{deliveries.yml → shipit/deliveries.yml} +0 -0
  141. data/test/fixtures/{github_hooks.yml → shipit/github_hooks.yml} +4 -4
  142. data/test/fixtures/{hooks.yml → shipit/hooks.yml} +0 -0
  143. data/test/fixtures/{memberships.yml → shipit/memberships.yml} +0 -0
  144. data/test/fixtures/{output_chunks.yml → shipit/output_chunks.yml} +0 -0
  145. data/test/fixtures/{stacks.yml → shipit/stacks.yml} +0 -0
  146. data/test/fixtures/{statuses.yml → shipit/statuses.yml} +0 -0
  147. data/test/fixtures/{tasks.yml → shipit/tasks.yml} +8 -8
  148. data/test/fixtures/{teams.yml → shipit/teams.yml} +0 -0
  149. data/test/fixtures/{users.yml → shipit/users.yml} +0 -0
  150. data/test/helpers/api_helper.rb +1 -1
  151. data/test/helpers/fixture_aliases_helper.rb +4 -4
  152. data/test/jobs/cache_deploy_spec_job_test.rb +15 -13
  153. data/test/jobs/chunk_rollup_job_test.rb +30 -28
  154. data/test/jobs/deliver_hook_job_test.rb +11 -9
  155. data/test/jobs/destroy_stack_job_test.rb +11 -9
  156. data/test/jobs/emit_event_job_test.rb +10 -8
  157. data/test/jobs/fetch_commit_stats_job_test.rb +10 -8
  158. data/test/jobs/fetch_deployed_revision_job_test.rb +24 -22
  159. data/test/jobs/github_sync_job_test.rb +51 -49
  160. data/test/jobs/perform_task_job_test.rb +78 -76
  161. data/test/jobs/refresh_github_user_job_test.rb +10 -8
  162. data/test/jobs/refresh_status_job_test.rb +14 -12
  163. data/test/jobs/unique_job_test.rb +18 -15
  164. data/test/models/api_client_test.rb +20 -18
  165. data/test/models/commit_checks_test.rb +63 -61
  166. data/test/models/commits_test.rb +317 -314
  167. data/test/models/delivery_test.rb +29 -27
  168. data/test/models/deploys_test.rb +289 -287
  169. data/test/models/github_hook_test.rb +45 -43
  170. data/test/models/hook_test.rb +44 -42
  171. data/test/models/membership_test.rb +9 -7
  172. data/test/models/missing_status_test.rb +16 -14
  173. data/test/models/output_chunk_test.rb +14 -12
  174. data/test/models/rollbacks_test.rb +14 -12
  175. data/test/models/stacks_test.rb +272 -270
  176. data/test/models/status_group_test.rb +18 -16
  177. data/test/models/status_test.rb +42 -40
  178. data/test/models/task_definitions_test.rb +27 -25
  179. data/test/models/team_test.rb +39 -37
  180. data/test/models/users_test.rb +61 -59
  181. data/test/unit/command_test.rb +43 -41
  182. data/test/unit/commands_test.rb +8 -6
  183. data/test/unit/csv_serializer_test.rb +28 -26
  184. data/test/unit/deploy_commands_test.rb +179 -176
  185. data/test/unit/deploy_spec_test.rb +237 -235
  186. data/test/unit/github_url_helper_test.rb +19 -17
  187. data/test/unit/shipit_test.rb +44 -42
  188. metadata +139 -137
  189. data/app/controllers/api/base_controller.rb +0 -66
  190. data/app/controllers/api/deploys_controller.rb +0 -15
  191. data/app/controllers/api/hooks_controller.rb +0 -51
  192. data/app/controllers/api/locks_controller.rb +0 -30
  193. data/app/controllers/api/outputs_controller.rb +0 -15
  194. data/app/controllers/api/stacks_controller.rb +0 -19
  195. data/app/controllers/api/tasks_controller.rb +0 -18
  196. data/app/controllers/commit_checks_controller.rb +0 -24
  197. data/app/controllers/concerns/api/cacheable.rb +0 -11
  198. data/app/controllers/concerns/api/rendering.rb +0 -23
  199. data/app/controllers/concerns/pagination.rb +0 -25
  200. data/app/controllers/deploys_controller.rb +0 -45
  201. data/app/controllers/github_authentication_controller.rb +0 -25
  202. data/app/controllers/rollbacks_controller.rb +0 -24
  203. data/app/controllers/shipit_controller.rb +0 -54
  204. data/app/controllers/stacks_controller.rb +0 -79
  205. data/app/controllers/status_controller.rb +0 -5
  206. data/app/controllers/tasks_controller.rb +0 -46
  207. data/app/controllers/webhooks_controller.rb +0 -99
  208. data/app/helpers/chunks_helper.rb +0 -6
  209. data/app/helpers/deploys_helper.rb +0 -26
  210. data/app/helpers/github_url_helper.rb +0 -46
  211. data/app/helpers/shipit_helper.rb +0 -62
  212. data/app/helpers/stacks_helper.rb +0 -76
  213. data/app/helpers/tasks_helper.rb +0 -9
  214. data/app/jobs/background_job.rb +0 -22
  215. data/app/jobs/background_job/unique.rb +0 -26
  216. data/app/jobs/cache_deploy_spec_job.rb +0 -10
  217. data/app/jobs/chunk_rollup_job.rb +0 -19
  218. data/app/jobs/clear_git_cache_job.rb +0 -7
  219. data/app/jobs/deliver_hook_job.rb +0 -7
  220. data/app/jobs/destroy_stack_job.rb +0 -7
  221. data/app/jobs/emit_event_job.rb +0 -8
  222. data/app/jobs/fetch_commit_stats_job.rb +0 -7
  223. data/app/jobs/fetch_deployed_revision_job.rb +0 -21
  224. data/app/jobs/git_mirror_update_job.rb +0 -10
  225. data/app/jobs/github_sync_job.rb +0 -53
  226. data/app/jobs/perform_commit_checks_job.rb +0 -5
  227. data/app/jobs/perform_task_job.rb +0 -55
  228. data/app/jobs/refresh_github_user_job.rb +0 -7
  229. data/app/jobs/refresh_statuses_job.rb +0 -12
  230. data/app/jobs/setup_github_hook_job.rb +0 -9
  231. data/app/models/anonymous_user.rb +0 -41
  232. data/app/models/api_client.rb +0 -42
  233. data/app/models/commit.rb +0 -207
  234. data/app/models/commit_checks.rb +0 -88
  235. data/app/models/delivery.rb +0 -45
  236. data/app/models/deploy.rb +0 -151
  237. data/app/models/deploy_spec.rb +0 -148
  238. data/app/models/deploy_spec/bundler_discovery.rb +0 -59
  239. data/app/models/deploy_spec/capistrano_discovery.rb +0 -27
  240. data/app/models/deploy_spec/file_system.rb +0 -62
  241. data/app/models/deploy_spec/pypi_discovery.rb +0 -32
  242. data/app/models/deploy_spec/rubygems_discovery.rb +0 -32
  243. data/app/models/github_hook.rb +0 -144
  244. data/app/models/hook.rb +0 -84
  245. data/app/models/membership.rb +0 -6
  246. data/app/models/missing_status.rb +0 -18
  247. data/app/models/output_chunk.rb +0 -9
  248. data/app/models/rollback.rb +0 -29
  249. data/app/models/stack.rb +0 -306
  250. data/app/models/status.rb +0 -42
  251. data/app/models/status_group.rb +0 -33
  252. data/app/models/task.rb +0 -197
  253. data/app/models/task_definition.rb +0 -36
  254. data/app/models/team.rb +0 -67
  255. data/app/models/unknown_status.rb +0 -41
  256. data/app/models/user.rb +0 -81
  257. data/app/models/variable_definition.rb +0 -19
  258. data/app/serializers/anonymous_user_serializer.rb +0 -2
  259. data/app/serializers/commit_serializer.rb +0 -6
  260. data/app/serializers/concerns/conditional_attributes.rb +0 -20
  261. data/app/serializers/deploy_serializer.rb +0 -13
  262. data/app/serializers/hook_serializer.rb +0 -10
  263. data/app/serializers/rollback_serializer.rb +0 -5
  264. data/app/serializers/short_commit_serializer.rb +0 -7
  265. data/app/serializers/stack_serializer.rb +0 -31
  266. data/app/serializers/tail_task_serializer.rb +0 -37
  267. data/app/serializers/task_serializer.rb +0 -28
  268. data/app/serializers/user_serializer.rb +0 -3
  269. data/lib/command.rb +0 -169
  270. data/lib/commands.rb +0 -23
  271. data/lib/deploy_commands.rb +0 -19
  272. data/lib/rollback_commands.rb +0 -5
  273. data/lib/stack_commands.rb +0 -58
  274. data/lib/task_commands.rb +0 -66
@@ -1,27 +0,0 @@
1
- class DeploySpec
2
- module CapistranoDiscovery
3
- def discover_deploy_steps
4
- discover_capistrano || super
5
- end
6
-
7
- def discover_rollback_steps
8
- discover_capistrano_rollback || super
9
- end
10
-
11
- def discover_capistrano
12
- [cap('deploy')] if capistrano?
13
- end
14
-
15
- def discover_capistrano_rollback
16
- [cap('deploy:rollback')] if capistrano?
17
- end
18
-
19
- def cap(command)
20
- bundle_exec("cap $ENVIRONMENT #{command}")
21
- end
22
-
23
- def capistrano?
24
- file('Capfile').exist?
25
- end
26
- end
27
- end
@@ -1,62 +0,0 @@
1
- class DeploySpec
2
- class FileSystem < DeploySpec
3
- include PypiDiscovery
4
- include RubygemsDiscovery
5
- include CapistranoDiscovery
6
- include BundlerDiscovery
7
-
8
- def initialize(app_dir, env)
9
- @app_dir = Pathname(app_dir)
10
- @env = env
11
- end
12
-
13
- def cacheable
14
- DeploySpec.new(cacheable_config)
15
- end
16
-
17
- private
18
-
19
- def cacheable_config
20
- (config || {}).deep_merge(
21
- 'ci' => {
22
- 'hide' => hidden_statuses,
23
- 'allow_failures' => soft_failing_statuses,
24
- 'require' => required_statuses,
25
- },
26
- 'machine' => {'environment' => machine_env, 'directory' => directory},
27
- 'review' => {
28
- 'checklist' => review_checklist,
29
- 'monitoring' => review_monitoring,
30
- 'checks' => review_checks,
31
- },
32
- 'plugins' => plugins,
33
- 'dependencies' => {'override' => dependencies_steps},
34
- 'deploy' => {'override' => deploy_steps, 'variables' => deploy_variables.map(&:to_h)},
35
- 'rollback' => {'override' => rollback_steps},
36
- 'fetch' => fetch_deployed_revision_steps,
37
- 'tasks' => cacheable_tasks,
38
- )
39
- end
40
-
41
- def cacheable_tasks
42
- (config('tasks') || {}).map { |k, c| [k, coerce_task_definition(c)] }.to_h
43
- end
44
-
45
- def config(*)
46
- @config ||= load_config
47
- super
48
- end
49
-
50
- def load_config
51
- read_config(file("shipit.#{@env}.yml")) || read_config(file('shipit.yml'))
52
- end
53
-
54
- def read_config(path)
55
- SafeYAML.load(path.read) if path.exist?
56
- end
57
-
58
- def file(path)
59
- @app_dir.join(path)
60
- end
61
- end
62
- end
@@ -1,32 +0,0 @@
1
- class DeploySpec
2
- module PypiDiscovery
3
- def discover_deploy_steps
4
- discover_pypi || super
5
- end
6
-
7
- def discover_pypi
8
- publish_egg if egg?
9
- end
10
-
11
- def discover_review_checklist
12
- discover_pypi_checklist || super
13
- end
14
-
15
- def discover_pypi_checklist
16
- [%(<strong>Don't forget to add a tag before deploying!</strong> You can do this with:
17
- git tag -a -m "Version <strong>x.y.z</strong>" v<strong>x.y.z</strong> && git push --tags)] if egg?
18
- end
19
-
20
- def egg?
21
- setup_dot_py.exist?
22
- end
23
-
24
- def setup_dot_py
25
- file('setup.py')
26
- end
27
-
28
- def publish_egg
29
- ["assert-egg-version-tag #{setup_dot_py}", 'python setup.py register sdist upload']
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- class DeploySpec
2
- module RubygemsDiscovery
3
- def discover_deploy_steps
4
- discover_gem || super
5
- end
6
-
7
- def discover_gem
8
- publish_gem if gem?
9
- end
10
-
11
- def discover_review_checklist
12
- discover_gem_checklist || super
13
- end
14
-
15
- def discover_gem_checklist
16
- [%(<strong>Don't forget to add a tag before deploying!</strong> You can do this with:
17
- git tag -a -m "Version <strong>x.y.z</strong>" v<strong>x.y.z</strong> && git push --tags)] if gem?
18
- end
19
-
20
- def gem?
21
- !!gemspec
22
- end
23
-
24
- def gemspec
25
- Dir[file('*.gemspec').to_s].first
26
- end
27
-
28
- def publish_gem
29
- ["assert-gem-version-tag #{gemspec}", 'bundle exec rake release']
30
- end
31
- end
32
- end
@@ -1,144 +0,0 @@
1
- class GithubHook < ActiveRecord::Base
2
- include SecureCompare
3
-
4
- before_create :generate_secret
5
- before_destroy :teardown!
6
-
7
- def verify_signature(signature, message)
8
- algorithm, signature = signature.split("=", 2)
9
- return false unless algorithm == 'sha1'
10
-
11
- secure_compare(signature, OpenSSL::HMAC.hexdigest(algorithm, secret, message))
12
- end
13
-
14
- delegate :github_repo_name, to: :stack
15
- def setup!
16
- hook = already_setup? ? update_hook! : create_hook!
17
- update!(github_id: hook.id, api_url: hook.rels[:self].href)
18
- end
19
-
20
- def schedule_setup!
21
- SetupGithubHookJob.perform_later(self)
22
- end
23
-
24
- def teardown!
25
- destroy_hook! if already_setup?
26
- true
27
- end
28
-
29
- def event=(event)
30
- super(event.to_s)
31
- end
32
-
33
- def already_setup?
34
- github_id?
35
- end
36
-
37
- private
38
-
39
- def update_hook!
40
- edit_hook!
41
- rescue Octokit::NotFound
42
- create_hook!
43
- end
44
-
45
- private
46
-
47
- def endpoint_url
48
- raise NotImplementedError.new('Subclasses must implement a `endpoint_url` method')
49
- end
50
-
51
- def hook_properties
52
- {url: endpoint_url, content_type: 'json', secret: secret}
53
- end
54
-
55
- def generate_secret
56
- self.secret = SecureRandom.hex
57
- end
58
-
59
- def url_helpers
60
- Shipit::Engine.routes.url_helpers
61
- end
62
-
63
- def host
64
- Shipit.host
65
- end
66
-
67
- def api
68
- Shipit.github_api
69
- end
70
-
71
- class Repo < GithubHook
72
- belongs_to :stack, required: true
73
-
74
- private
75
-
76
- def create_hook!
77
- api.create_hook(github_repo_name, 'web', properties, events: [event], active: true)
78
- end
79
-
80
- def edit_hook!
81
- api.edit_hook(github_repo_name, github_id, 'web', properties, events: [event], active: true)
82
- end
83
-
84
- def destroy_hook!
85
- api.remove_hook(github_repo_name, github_id)
86
- rescue Octokit::NotFound
87
- end
88
-
89
- def properties
90
- {
91
- url: endpoint_url,
92
- content_type: 'json',
93
- secret: secret,
94
- }
95
- end
96
-
97
- def endpoint_url
98
- case event
99
- when 'push'
100
- url_helpers.push_stack_webhooks_url(stack_id, host: host)
101
- when 'status'
102
- url_helpers.state_stack_webhooks_url(stack_id, host: host)
103
- else
104
- raise ArgumentError, "Unknown GithubHook::Repo event: `#{event.inspect}`"
105
- end
106
- end
107
- end
108
-
109
- class Organization < GithubHook
110
- validates :organization, presence: true
111
-
112
- private
113
-
114
- def create_hook!
115
- api.create_org_hook(organization, properties, events: [event], active: true)
116
- end
117
-
118
- def edit_hook!
119
- api.edit_org_hook(organization, github_id, properties, events: [event], active: true)
120
- end
121
-
122
- def destroy_hook!
123
- api.remove_org_hook(organization, github_id)
124
- rescue Octokit::NotFound
125
- end
126
-
127
- def properties
128
- {
129
- url: endpoint_url,
130
- content_type: 'json',
131
- secret: secret,
132
- }
133
- end
134
-
135
- def endpoint_url
136
- case event
137
- when 'membership'
138
- url_helpers.membership_webhooks_url(host: host)
139
- else
140
- raise ArgumentError, "Unknown GithubHook::Organization event: `#{event.inspect}`"
141
- end
142
- end
143
- end
144
- end
data/app/models/hook.rb DELETED
@@ -1,84 +0,0 @@
1
- class Hook < ActiveRecord::Base
2
- default_scope { order :id }
3
-
4
- CONTENT_TYPES = {
5
- 'json' => 'application/json',
6
- 'form' => 'application/x-www-form-urlencoded',
7
- }.freeze
8
-
9
- EVENTS = %w(
10
- task
11
- deploy
12
- rollback
13
- lock
14
- commit_status
15
- deployable_status
16
- ).freeze
17
-
18
- belongs_to :stack, required: false
19
- has_many :deliveries
20
-
21
- validates :url, presence: true, url: {no_local: true, allow_blank: true}
22
- validates :content_type, presence: true, inclusion: {in: CONTENT_TYPES.keys}
23
- validates :events, presence: true, subset: {of: EVENTS}
24
-
25
- serialize :events, Shipit::CSVSerializer
26
-
27
- scope :global, -> { where(stack_id: nil) }
28
- scope :scoped_to, -> (stack) { where(stack_id: stack.id) }
29
- scope :for_stack, -> (stack_id) { where(stack_id: [nil, stack_id]) }
30
-
31
- class << self
32
- def emit(event, stack, payload)
33
- EmitEventJob.perform_later(
34
- event: event.to_s,
35
- stack_id: stack.try!(:id),
36
- payload: coerce_payload(payload),
37
- )
38
- end
39
-
40
- def deliver(event, stack_id, payload)
41
- for_stack(stack_id).listening_event(event).each do |hook|
42
- hook.deliver!(event, payload)
43
- end
44
- end
45
-
46
- def listening_event(event)
47
- event = event.to_s
48
- all.to_a.select { |h| h.events.include?(event) }
49
- end
50
-
51
- def coerce_payload(payload)
52
- coerced_payload = payload.dup
53
- payload.each do |key, value|
54
- if serializer = ActiveModel::Serializer.serializer_for(value)
55
- coerced_payload[key] = serializer.new(value)
56
- end
57
- end
58
- coerced_payload.to_json
59
- end
60
- end
61
-
62
- def scoped?
63
- stack_id?
64
- end
65
-
66
- def deliver!(event, payload)
67
- deliveries.create!(
68
- event: event,
69
- url: url,
70
- content_type: CONTENT_TYPES[content_type],
71
- payload: serialize_payload(payload),
72
- ).schedule!
73
- end
74
-
75
- private
76
-
77
- def serialize_payload(payload)
78
- if content_type == 'form'
79
- payload.to_query
80
- else
81
- JSON.pretty_generate(payload)
82
- end
83
- end
84
- end
@@ -1,6 +0,0 @@
1
- class Membership < ActiveRecord::Base
2
- belongs_to :team, required: true
3
- belongs_to :user, required: true
4
-
5
- validates :user_id, uniqueness: {scope: :team_id}
6
- end
@@ -1,18 +0,0 @@
1
- class MissingStatus < SimpleDelegator
2
- def initialize(instance, missing_statuses)
3
- @missing_statuses = missing_statuses
4
- super(instance)
5
- end
6
-
7
- def state
8
- 'missing'
9
- end
10
-
11
- def success?
12
- false
13
- end
14
-
15
- def description
16
- I18n.t('missing_status.description', missing_statuses: @missing_statuses.to_sentence, count: @missing_statuses.size)
17
- end
18
- end
@@ -1,9 +0,0 @@
1
- class OutputChunk < ActiveRecord::Base
2
- belongs_to :task
3
-
4
- scope :tail, -> (start) { order(id: :asc).where('id > ?', start || 0) }
5
-
6
- def text=(string)
7
- super(string.force_encoding(Encoding::UTF_8).scrub)
8
- end
9
- end
@@ -1,29 +0,0 @@
1
- class Rollback < Deploy
2
- belongs_to :deploy, foreign_key: :parent_id
3
-
4
- def rollback?
5
- true
6
- end
7
-
8
- def rollbackable?
9
- false
10
- end
11
-
12
- def supports_rollback?
13
- false
14
- end
15
-
16
- def commits
17
- return Commit.none unless stack
18
-
19
- @commits ||= stack.commits.reachable.newer_than(until_commit_id).until(since_commit_id).order(id: :asc)
20
- end
21
-
22
- def commit_range
23
- [until_commit, since_commit]
24
- end
25
-
26
- def to_partial_path
27
- 'deploys/deploy'
28
- end
29
- end