shipit-engine 0.28.0 → 0.32.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 (314) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -2
  3. data/Rakefile +4 -2
  4. data/app/assets/images/archive-solid.svg +1 -0
  5. data/app/assets/stylesheets/_pages/_stacks.scss +76 -3
  6. data/app/assets/stylesheets/_structure/_main.scss +2 -1
  7. data/app/assets/stylesheets/merge_status.scss +0 -3
  8. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +13 -0
  9. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  10. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  11. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  12. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  13. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  14. data/app/controllers/shipit/api/base_controller.rb +11 -6
  15. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  16. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  17. data/app/controllers/shipit/api/deploys_controller.rb +4 -3
  18. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  19. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  20. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  21. data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
  22. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  23. data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
  24. data/app/controllers/shipit/api/stacks_controller.rb +37 -5
  25. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  26. data/app/controllers/shipit/api_clients_controller.rb +50 -0
  27. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  28. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  29. data/app/controllers/shipit/commits_controller.rb +2 -1
  30. data/app/controllers/shipit/deploys_controller.rb +3 -2
  31. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  32. data/app/controllers/shipit/merge_status_controller.rb +19 -14
  33. data/app/controllers/shipit/pull_requests_controller.rb +3 -2
  34. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  35. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  36. data/app/controllers/shipit/shipit_controller.rb +2 -1
  37. data/app/controllers/shipit/stacks_controller.rb +78 -14
  38. data/app/controllers/shipit/status_controller.rb +2 -1
  39. data/app/controllers/shipit/tasks_controller.rb +6 -5
  40. data/app/controllers/shipit/webhooks_controller.rb +5 -132
  41. data/app/helpers/shipit/chunks_helper.rb +1 -0
  42. data/app/helpers/shipit/deploys_helper.rb +4 -3
  43. data/app/helpers/shipit/github_url_helper.rb +1 -0
  44. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  45. data/app/helpers/shipit/shipit_helper.rb +1 -0
  46. data/app/helpers/shipit/stacks_helper.rb +5 -0
  47. data/app/helpers/shipit/tasks_helper.rb +1 -0
  48. data/app/jobs/shipit/background_job.rb +4 -0
  49. data/app/jobs/shipit/background_job/unique.rb +4 -1
  50. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  51. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  52. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  53. data/app/jobs/shipit/continuous_delivery_job.rb +3 -1
  54. data/app/jobs/shipit/create_on_github_job.rb +6 -1
  55. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  56. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  57. data/app/jobs/shipit/deliver_hook_job.rb +1 -0
  58. data/app/jobs/shipit/destroy_job.rb +1 -0
  59. data/app/jobs/shipit/destroy_stack_job.rb +3 -2
  60. data/app/jobs/shipit/emit_event_job.rb +2 -1
  61. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  62. data/app/jobs/shipit/fetch_deployed_revision_job.rb +2 -1
  63. data/app/jobs/shipit/github_sync_job.rb +3 -2
  64. data/app/jobs/shipit/{mark_deploy_healty_job.rb → mark_deploy_healthy_job.rb} +1 -0
  65. data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
  66. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  67. data/app/jobs/shipit/perform_task_job.rb +14 -5
  68. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  69. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  70. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  72. data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
  73. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  74. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  75. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  76. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -3
  77. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  78. data/app/models/shipit/anonymous_user.rb +5 -0
  79. data/app/models/shipit/api_client.rb +3 -2
  80. data/app/models/shipit/application_record.rb +2 -1
  81. data/app/models/shipit/check_run.rb +4 -3
  82. data/app/models/shipit/command_line_user.rb +1 -0
  83. data/app/models/shipit/commit.rb +31 -12
  84. data/app/models/shipit/commit_checks.rb +1 -0
  85. data/app/models/shipit/commit_deployment.rb +17 -12
  86. data/app/models/shipit/commit_deployment_status.rb +8 -3
  87. data/app/models/shipit/commit_message.rb +1 -0
  88. data/app/models/shipit/delivery.rb +4 -3
  89. data/app/models/shipit/deploy.rb +40 -10
  90. data/app/models/shipit/deploy_spec.rb +22 -3
  91. data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
  92. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  93. data/app/models/shipit/deploy_spec/file_system.rb +10 -3
  94. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  95. data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
  96. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  97. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  98. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  99. data/app/models/shipit/deploy_stats.rb +58 -0
  100. data/app/models/shipit/duration.rb +3 -2
  101. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  102. data/app/models/shipit/github_hook.rb +2 -1
  103. data/app/models/shipit/github_status.rb +3 -2
  104. data/app/models/shipit/hook.rb +6 -5
  105. data/app/models/shipit/membership.rb +3 -2
  106. data/app/models/shipit/output_chunk.rb +7 -2
  107. data/app/models/shipit/pull_request.rb +13 -7
  108. data/app/models/shipit/record.rb +18 -0
  109. data/app/models/shipit/release_status.rb +3 -2
  110. data/app/models/shipit/repository.rb +43 -0
  111. data/app/models/shipit/rollback.rb +1 -0
  112. data/app/models/shipit/stack.rb +109 -50
  113. data/app/models/shipit/status.rb +3 -2
  114. data/app/models/shipit/status/common.rb +7 -6
  115. data/app/models/shipit/status/group.rb +1 -0
  116. data/app/models/shipit/status/missing.rb +2 -1
  117. data/app/models/shipit/status/unknown.rb +2 -1
  118. data/app/models/shipit/task.rb +64 -9
  119. data/app/models/shipit/task_definition.rb +1 -0
  120. data/app/models/shipit/team.rb +2 -1
  121. data/app/models/shipit/undeployed_commit.rb +1 -0
  122. data/app/models/shipit/unlimited_api_client.rb +1 -0
  123. data/app/models/shipit/user.rb +29 -5
  124. data/app/models/shipit/variable_definition.rb +1 -0
  125. data/app/models/shipit/webhooks.rb +33 -0
  126. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
  127. data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
  128. data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -0
  129. data/app/models/shipit/webhooks/handlers/push_handler.rb +21 -0
  130. data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -0
  131. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  132. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  133. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  134. data/app/serializers/shipit/commit_serializer.rb +1 -0
  135. data/app/serializers/shipit/deploy_serializer.rb +2 -1
  136. data/app/serializers/shipit/hook_serializer.rb +1 -0
  137. data/app/serializers/shipit/pull_request_serializer.rb +1 -0
  138. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  139. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  140. data/app/serializers/shipit/stack_serializer.rb +7 -1
  141. data/app/serializers/shipit/tail_task_serializer.rb +1 -0
  142. data/app/serializers/shipit/task_serializer.rb +2 -17
  143. data/app/serializers/shipit/user_serializer.rb +6 -1
  144. data/app/validators/ascii_only_validator.rb +4 -3
  145. data/app/validators/subset_validator.rb +1 -0
  146. data/app/views/layouts/_head.html.erb +0 -0
  147. data/app/views/layouts/shipit.html.erb +6 -4
  148. data/app/views/shipit/_variables.html.erb +1 -1
  149. data/app/views/shipit/api_clients/index.html.erb +36 -0
  150. data/app/views/shipit/api_clients/new.html.erb +33 -0
  151. data/app/views/shipit/api_clients/show.html.erb +35 -0
  152. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  153. data/app/views/shipit/deploys/new.html.erb +17 -12
  154. data/app/views/shipit/deploys/show.html.erb +2 -2
  155. data/app/views/shipit/merge_status/logged_out.erb +1 -1
  156. data/app/views/shipit/stacks/_header.html.erb +27 -12
  157. data/app/views/shipit/stacks/_links.html.erb +1 -0
  158. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  159. data/app/views/shipit/stacks/index.html.erb +7 -2
  160. data/app/views/shipit/stacks/settings.html.erb +19 -0
  161. data/app/views/shipit/stacks/statistics.html.erb +82 -0
  162. data/app/views/shipit/tasks/show.html.erb +1 -1
  163. data/config/initializers/inflections.rb +2 -1
  164. data/config/locales/en.yml +18 -5
  165. data/config/routes.rb +14 -2
  166. data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
  167. data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
  168. data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
  169. data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
  170. data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
  171. data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
  172. data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
  173. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  174. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  175. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  176. data/lib/shipit.rb +18 -20
  177. data/lib/shipit/cast_value.rb +1 -0
  178. data/lib/shipit/command.rb +14 -18
  179. data/lib/shipit/commands.rb +5 -4
  180. data/lib/shipit/csv_serializer.rb +1 -0
  181. data/lib/shipit/deploy_commands.rb +1 -0
  182. data/lib/shipit/engine.rb +11 -2
  183. data/lib/shipit/environment_variables.rb +11 -1
  184. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  185. data/lib/shipit/flock.rb +1 -0
  186. data/lib/shipit/github_app.rb +60 -6
  187. data/lib/shipit/github_http_cache_middleware.rb +57 -0
  188. data/lib/shipit/null_serializer.rb +1 -0
  189. data/lib/shipit/octokit_check_runs.rb +3 -2
  190. data/lib/shipit/octokit_iterator.rb +3 -2
  191. data/lib/shipit/paginator.rb +3 -2
  192. data/lib/shipit/rollback_commands.rb +1 -0
  193. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  194. data/lib/shipit/simple_message_verifier.rb +1 -0
  195. data/lib/shipit/stack_commands.rb +6 -3
  196. data/lib/shipit/stat.rb +1 -0
  197. data/lib/shipit/task_commands.rb +22 -14
  198. data/lib/shipit/version.rb +2 -1
  199. data/lib/snippets/release-gem +5 -1
  200. data/lib/tasks/cron.rake +2 -0
  201. data/lib/tasks/dev.rake +3 -2
  202. data/lib/tasks/shipit.rake +16 -17
  203. data/lib/tasks/teams.rake +1 -0
  204. data/test/controllers/api/base_controller_test.rb +3 -2
  205. data/test/controllers/api/ccmenu_controller_test.rb +9 -8
  206. data/test/controllers/api/commits_controller_test.rb +3 -2
  207. data/test/controllers/api/deploys_controller_test.rb +15 -14
  208. data/test/controllers/api/hooks_controller_test.rb +8 -7
  209. data/test/controllers/api/locks_controller_test.rb +7 -6
  210. data/test/controllers/api/outputs_controller_test.rb +3 -2
  211. data/test/controllers/api/pull_requests_controller_test.rb +8 -7
  212. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  213. data/test/controllers/api/rollback_controller_test.rb +113 -0
  214. data/test/controllers/api/stacks_controller_test.rb +44 -15
  215. data/test/controllers/api/tasks_controller_test.rb +13 -12
  216. data/test/controllers/api_clients_controller_test.rb +104 -0
  217. data/test/controllers/ccmenu_controller_test.rb +4 -3
  218. data/test/controllers/commit_checks_controller_test.rb +4 -3
  219. data/test/controllers/commits_controller_test.rb +3 -2
  220. data/test/controllers/deploys_controller_test.rb +33 -22
  221. data/test/controllers/github_authentication_controller_test.rb +1 -0
  222. data/test/controllers/merge_status_controller_test.rb +27 -9
  223. data/test/controllers/pull_requests_controller_test.rb +4 -3
  224. data/test/controllers/release_statuses_controller_test.rb +3 -2
  225. data/test/controllers/rollbacks_controller_test.rb +9 -8
  226. data/test/controllers/stacks_controller_test.rb +64 -15
  227. data/test/controllers/status_controller_test.rb +1 -0
  228. data/test/controllers/tasks_controller_test.rb +20 -19
  229. data/test/controllers/webhooks_controller_test.rb +36 -9
  230. data/test/dummy/config/application.rb +1 -1
  231. data/test/dummy/config/environments/development.rb +24 -4
  232. data/test/dummy/config/environments/test.rb +2 -0
  233. data/test/dummy/db/schema.rb +25 -11
  234. data/test/dummy/db/seeds.rb +34 -17
  235. data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
  236. data/test/fixtures/shipit/commit_deployments.yml +8 -8
  237. data/test/fixtures/shipit/commits.yml +38 -0
  238. data/test/fixtures/shipit/repositories.yml +27 -0
  239. data/test/fixtures/shipit/stacks.yml +190 -30
  240. data/test/fixtures/shipit/tasks.yml +66 -3
  241. data/test/fixtures/timeout +2 -1
  242. data/test/helpers/api_helper.rb +1 -0
  243. data/test/helpers/fixture_aliases_helper.rb +1 -0
  244. data/test/helpers/hooks_helper.rb +2 -1
  245. data/test/helpers/json_helper.rb +15 -11
  246. data/test/helpers/links_helper.rb +4 -3
  247. data/test/helpers/payloads_helper.rb +1 -0
  248. data/test/helpers/queries_helper.rb +3 -2
  249. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  250. data/test/jobs/chunk_rollup_job_test.rb +1 -0
  251. data/test/jobs/deliver_hook_job_test.rb +2 -1
  252. data/test/jobs/destroy_stack_job_test.rb +10 -0
  253. data/test/jobs/emit_event_job_test.rb +2 -1
  254. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  255. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  256. data/test/jobs/github_sync_job_test.rb +1 -0
  257. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  258. data/test/jobs/merge_pull_requests_job_test.rb +5 -4
  259. data/test/jobs/perform_task_job_test.rb +4 -3
  260. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  261. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  262. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  263. data/test/jobs/refresh_status_job_test.rb +1 -0
  264. data/test/jobs/unique_job_test.rb +1 -0
  265. data/test/jobs/update_github_last_deployed_ref_job_test.rb +13 -11
  266. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  267. data/test/models/api_client_test.rb +1 -0
  268. data/test/models/commit_checks_test.rb +1 -0
  269. data/test/models/commit_deployment_status_test.rb +34 -4
  270. data/test/models/commit_deployment_test.rb +9 -11
  271. data/test/models/commits_test.rb +99 -7
  272. data/test/models/delivery_test.rb +3 -2
  273. data/test/models/deploy_spec_test.rb +47 -42
  274. data/test/models/deploy_stats_test.rb +113 -0
  275. data/test/models/deploys_test.rb +60 -13
  276. data/test/models/duration_test.rb +1 -0
  277. data/test/models/github_hook_test.rb +1 -0
  278. data/test/models/hook_test.rb +20 -16
  279. data/test/models/membership_test.rb +1 -0
  280. data/test/models/output_chunk_test.rb +1 -0
  281. data/test/models/pull_request_test.rb +18 -11
  282. data/test/models/release_statuses_test.rb +1 -0
  283. data/test/models/rollbacks_test.rb +1 -0
  284. data/test/models/shipit/check_run_test.rb +1 -0
  285. data/test/models/shipit/repository_test.rb +77 -0
  286. data/test/models/shipit/wehbooks/handlers_test.rb +27 -0
  287. data/test/models/stacks_test.rb +110 -56
  288. data/test/models/status/group_test.rb +1 -0
  289. data/test/models/status/missing_test.rb +1 -0
  290. data/test/models/status_test.rb +1 -0
  291. data/test/models/task_definitions_test.rb +9 -8
  292. data/test/models/tasks_test.rb +18 -1
  293. data/test/models/team_test.rb +4 -2
  294. data/test/models/undeployed_commits_test.rb +14 -0
  295. data/test/models/users_test.rb +109 -1
  296. data/test/test_command_integration.rb +3 -2
  297. data/test/test_helper.rb +38 -34
  298. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  299. data/test/unit/command_test.rb +12 -7
  300. data/test/unit/commands_test.rb +1 -0
  301. data/test/unit/commit_serializer_test.rb +16 -0
  302. data/test/unit/csv_serializer_test.rb +3 -2
  303. data/test/unit/deploy_commands_test.rb +14 -4
  304. data/test/unit/deploy_serializer_test.rb +17 -0
  305. data/test/unit/environment_variables_test.rb +5 -4
  306. data/test/unit/github_app_test.rb +165 -0
  307. data/test/unit/github_url_helper_test.rb +1 -0
  308. data/test/unit/rollback_commands_test.rb +2 -1
  309. data/test/unit/shipit_helper_test.rb +17 -0
  310. data/test/unit/shipit_test.rb +1 -0
  311. data/test/unit/user_serializer_test.rb +14 -0
  312. data/test/unit/variable_definition_test.rb +1 -0
  313. metadata +215 -157
  314. data/lib/shipit/strip_cache_control.rb +0 -40
@@ -12,7 +12,7 @@ end
12
12
 
13
13
  module Shipit
14
14
  class Application < Rails::Application
15
- config.load_defaults 5.2
15
+ config.load_defaults 6.0
16
16
  end
17
17
  end
18
18
 
@@ -9,9 +9,24 @@ Rails.application.configure do
9
9
  # Do not eager load code on boot.
10
10
  config.eager_load = false
11
11
 
12
- # Show full error reports and disable caching.
13
- config.consider_all_requests_local = true
14
- config.action_controller.perform_caching = false
12
+ # Show full error reports
13
+ config.consider_all_requests_local = true
14
+
15
+ # Enable/disable caching. By default caching is disabled.
16
+ # Run rails dev:cache to toggle caching.
17
+ if Shipit::Engine.root.join("tmp", "caching-dev.txt").exist?
18
+ config.action_controller.perform_caching = true
19
+ config.action_controller.enable_fragment_cache_logging = true
20
+
21
+ config.cache_store = :memory_store
22
+ config.public_file_server.headers = {
23
+ "Cache-Control" => "public, max-age=#{2.days.to_i}",
24
+ }
25
+ else
26
+ config.action_controller.perform_caching = false
27
+
28
+ config.cache_store = :null_store
29
+ end
15
30
 
16
31
  # Don't care if the mailer can't send.
17
32
  config.action_mailer.raise_delivery_errors = false
@@ -39,11 +54,16 @@ Rails.application.configure do
39
54
  # Raises error for missing translations
40
55
  # config.action_view.raise_on_missing_translations = true
41
56
  if Rails.application.config_for(:database)['adapter'] == 'sqlite3'
42
- Shipit::DeferredTouch.enabled = false
57
+ config.to_prepare do
58
+ Shipit::DeferredTouch.enabled = false
59
+ end
43
60
  end
61
+
44
62
  config.active_job.queue_adapter = :async
45
63
 
46
64
  Pubsubstub.use_persistent_connections = false
47
65
 
48
66
  Shipit.disable_api_authentication = true if ENV['PUBLIC_API']
67
+
68
+ config.hosts << "shipit-engine.myshopify.io"
49
69
  end
@@ -42,5 +42,7 @@ Rails.application.configure do
42
42
 
43
43
  config.to_prepare do
44
44
  Shipit::DeferredTouch.enabled = false
45
+ # The deploy specs in fixtures are pretty printed, we should do the same to avoid marking stacks as dirty
46
+ Shipit::DeploySpec.pretty_generate = true
45
47
  end
46
48
  end
@@ -2,15 +2,15 @@
2
2
  # of editing this file, please use the migrations feature of Active Record to
3
3
  # incrementally modify your database, and then regenerate this schema definition.
4
4
  #
5
- # Note that this schema.rb definition is the authoritative source for your
6
- # database schema. If you need to create the application database on another
7
- # system, you should be using db:schema:load, not running all the migrations
8
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
- # you'll amass, the slower it'll run and the greater likelihood for issues).
5
+ # This file is the source Rails uses to define your schema when running `rails
6
+ # db:schema:load`. When creating a new database, `rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
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: 2019_05_02_020249) do
13
+ ActiveRecord::Schema.define(version: 2020_06_15_181558) do
14
14
 
15
15
  create_table "api_clients", force: :cascade do |t|
16
16
  t.text "permissions", limit: 65535
@@ -55,6 +55,7 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
55
55
  t.string "api_url"
56
56
  t.datetime "created_at", null: false
57
57
  t.datetime "updated_at", null: false
58
+ t.string "sha", limit: 40
58
59
  t.index ["commit_id", "task_id"], name: "index_commit_deployments_on_commit_id_and_task_id", unique: true
59
60
  t.index ["task_id"], name: "index_commit_deployments_on_task_id"
60
61
  end
@@ -77,6 +78,7 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
77
78
  t.integer "pull_request_id"
78
79
  t.boolean "locked", default: false, null: false
79
80
  t.integer "lock_author_id", limit: 4
81
+ t.string "pull_request_head_sha", limit: 40
80
82
  t.index ["author_id"], name: "index_commits_on_author_id"
81
83
  t.index ["committer_id"], name: "index_commits_on_committer_id"
82
84
  t.index ["created_at"], name: "index_commits_on_created_at"
@@ -190,9 +192,15 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
190
192
  t.index ["user_id"], name: "index_deploy_statuses_on_user_id"
191
193
  end
192
194
 
195
+ create_table "repositories", force: :cascade do |t|
196
+ t.string "owner", limit: 39, null: false
197
+ t.string "name", limit: 100, null: false
198
+ t.datetime "created_at", precision: 6, null: false
199
+ t.datetime "updated_at", precision: 6, null: false
200
+ t.index ["owner", "name"], name: "repository_unicity", unique: true
201
+ end
202
+
193
203
  create_table "stacks", force: :cascade do |t|
194
- t.string "repo_name", limit: 100, null: false
195
- t.string "repo_owner", limit: 39, null: false
196
204
  t.string "environment", limit: 50, default: "production", null: false
197
205
  t.datetime "created_at"
198
206
  t.datetime "updated_at"
@@ -211,7 +219,11 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
211
219
  t.datetime "locked_since"
212
220
  t.boolean "merge_queue_enabled", default: false, null: false
213
221
  t.datetime "last_deployed_at"
214
- t.index ["repo_owner", "repo_name", "environment"], name: "stack_unicity", unique: true
222
+ t.integer "repository_id", null: false
223
+ t.datetime "archived_since"
224
+ t.index ["archived_since"], name: "index_stacks_on_archived_since"
225
+ t.index ["repository_id", "environment"], name: "stack_unicity", unique: true
226
+ t.index ["repository_id"], name: "index_stacks_on_repository_id"
215
227
  end
216
228
 
217
229
  create_table "statuses", force: :cascade do |t|
@@ -228,8 +240,8 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
228
240
 
229
241
  create_table "tasks", force: :cascade do |t|
230
242
  t.integer "stack_id", limit: 4, null: false
231
- t.integer "since_commit_id", limit: 4, null: false
232
- t.integer "until_commit_id", limit: 4, null: false
243
+ t.integer "since_commit_id", limit: 4
244
+ t.integer "until_commit_id", limit: 4
233
245
  t.string "status", limit: 10, default: "pending", null: false
234
246
  t.datetime "created_at"
235
247
  t.datetime "updated_at"
@@ -249,11 +261,13 @@ ActiveRecord::Schema.define(version: 2019_05_02_020249) do
249
261
  t.datetime "ended_at"
250
262
  t.boolean "ignored_safeties", default: false, null: false
251
263
  t.integer "aborted_by_id"
264
+ t.integer "rollback_once_aborted_to_id"
252
265
  t.index ["rolled_up", "created_at", "status"], name: "index_tasks_on_rolled_up_and_created_at_and_status"
253
266
  t.index ["since_commit_id"], name: "index_tasks_on_since_commit_id"
254
267
  t.index ["stack_id", "allow_concurrency", "status"], name: "index_active_tasks"
255
268
  t.index ["stack_id", "allow_concurrency"], name: "index_tasks_on_stack_id_and_allow_concurrency"
256
269
  t.index ["stack_id", "status", "type"], name: "index_tasks_by_stack_and_status"
270
+ t.index ["status"], name: "index_tasks_on_status"
257
271
  t.index ["type", "stack_id", "parent_id"], name: "index_tasks_by_stack_and_parent"
258
272
  t.index ["until_commit_id"], name: "index_tasks_on_until_commit_id"
259
273
  t.index ["user_id"], name: "index_tasks_on_user_id"
@@ -1,8 +1,11 @@
1
1
  require 'faker'
2
- require 'fakeweb'
2
+ require 'webmock'
3
+ include WebMock::API
4
+ WebMock.enable!
5
+ WebMock.allow_net_connect!
3
6
 
4
7
  # Sometimes on Travis the background job runs immediately so provide a response to fake hooks
5
- FakeWeb.register_uri(:post, %r{https://example\.com/}, status: %w(200 OK))
8
+ stub_request(:post, %r{https://example\.com/}).to_return(status: %w(200 OK))
6
9
 
7
10
  # Cheap hack to allow rake db:seed to work
8
11
  module Shipit
@@ -11,6 +14,8 @@ module Shipit
11
14
  Commit.send(:define_method, :refresh_statuses!) {}
12
15
  Commit.send(:define_method, :refresh_check_runs!) {}
13
16
  ReleaseStatus.send(:define_method, :create_status_on_github!) {}
17
+ CommitDeployment.send(:define_method, :schedule_create_on_github) {}
18
+ CommitDeploymentStatus.send(:define_method, :schedule_create_on_github) {}
14
19
 
15
20
  users = 3.times.map do
16
21
  User.create!(
@@ -22,8 +27,10 @@ module Shipit
22
27
 
23
28
  stacks = 3.times.map do
24
29
  Stack.create!(
25
- repo_name: Faker::Internet.domain_name.parameterize,
26
- repo_owner: Faker::Company.name.parameterize,
30
+ repository: Repository.find_or_create_by(
31
+ name: Faker::Internet.domain_name.parameterize,
32
+ owner: Faker::Company.name.parameterize
33
+ ),
27
34
  deploy_url: "https://#{Faker::Internet.domain_name.parameterize}.#{Faker::Internet.domain_suffix}/",
28
35
  cached_deploy_spec: DeploySpec.load(%(
29
36
  {
@@ -109,8 +116,8 @@ module Shipit
109
116
  message: Faker::Company.catch_phrase,
110
117
  authored_at: Time.now,
111
118
  committed_at: Time.now,
112
- additions: Faker::Number.number(3),
113
- deletions: Faker::Number.number(3),
119
+ additions: Faker::Number.number(digits: 3),
120
+ deletions: Faker::Number.number(digits: 3),
114
121
  )
115
122
 
116
123
  if (i % 4) != 0
@@ -141,19 +148,19 @@ module Shipit
141
148
  end
142
149
 
143
150
  stack.pull_requests.create!(
144
- number: Faker::Number.number(3),
151
+ number: Faker::Number.number(digits: 3),
145
152
  title: Faker::Company.catch_phrase,
146
153
  merge_status: 'pending',
147
154
  merge_requested_at: 5.minute.ago,
148
155
  merge_requested_by: users.sample,
149
- github_id: Faker::Number.number(8),
156
+ github_id: Faker::Number.number(digits: 8),
150
157
  api_url: 'https://api.github.com/repos/shopify/shipit-engine/pulls/62',
151
158
  state: 'open',
152
- branch: "feature-#{Faker::Number.number(3)}",
159
+ branch: "feature-#{Faker::Number.number(digits: 3)}",
153
160
  head_id: nil,
154
161
  mergeable: true,
155
- additions: Faker::Number.number(3),
156
- deletions: Faker::Number.number(3),
162
+ additions: Faker::Number.number(digits: 3),
163
+ deletions: Faker::Number.number(digits: 3),
157
164
  )
158
165
  end
159
166
 
@@ -170,8 +177,8 @@ module Shipit
170
177
  since_commit_id: commits.first.id,
171
178
  until_commit_id: commits.last.id,
172
179
  status: "success",
173
- additions: Faker::Number.number(3),
174
- deletions: Faker::Number.number(3),
180
+ additions: Faker::Number.number(digits: 3),
181
+ deletions: Faker::Number.number(digits: 3),
175
182
  started_at: Random.rand(15.minutes.to_i).seconds.ago,
176
183
  ended_at: Time.now.utc,
177
184
  user: users.sample,
@@ -192,9 +199,19 @@ module Shipit
192
199
  )
193
200
  write_output(rollback)
194
201
 
195
- task = stack.tasks.create!(
196
- since_commit_id: stack.last_deployed_commit.id,
197
- until_commit_id: stack.last_deployed_commit.id,
202
+ provision_task = stack.tasks.create!(
203
+ status: "pending",
204
+ user: users.sample,
205
+ definition: TaskDefinition.new('provision',
206
+ 'action' => 'Provision some resources',
207
+ 'description' => 'Provisions servers for the application to be deployed to',
208
+ 'steps' => ['./provision.sh'],
209
+ ),
210
+ started_at: Random.rand(15.minutes.to_i).seconds.ago,
211
+ )
212
+ write_output(provision_task)
213
+
214
+ restart_task = stack.tasks.create!(
198
215
  status: "success",
199
216
  user: users.sample,
200
217
  definition: TaskDefinition.new('restart',
@@ -205,6 +222,6 @@ module Shipit
205
222
  started_at: Random.rand(15.minutes.to_i).seconds.ago,
206
223
  ended_at: Time.now.utc,
207
224
  )
208
- write_output(rollback)
225
+ write_output(restart_task)
209
226
  end
210
227
  end
@@ -1,6 +1,6 @@
1
- shipit_deploy_second_pending:
1
+ shipit_deploy_second_in_progress:
2
2
  commit_deployment: shipit_deploy_second
3
- status: pending
3
+ status: in_progress
4
4
  github_id: 42
5
5
  api_url: https://api.github.com/repos/shopify/shipit-engine/deployments/1/statuses/42
6
6
 
@@ -10,9 +10,9 @@ shipit_deploy_second_success:
10
10
  github_id: 43
11
11
  api_url: https://api.github.com/repos/shopify/shipit-engine/deployments/1/statuses/43
12
12
 
13
- shipit2_deploy_third_pending:
13
+ shipit2_deploy_third_in_progress:
14
14
  commit_deployment: shipit2_deploy_third
15
- status: pending
15
+ status: in_progress
16
16
 
17
17
  shipit2_deploy_third_failure:
18
18
  commit_deployment: shipit2_deploy_third
@@ -1,37 +1,37 @@
1
1
  shipit_deploy_second:
2
- commit_id: 2 # second
2
+ sha: f890fd8b5f2be05d1fedb763a3605ee461c39074 # second
3
3
  task_id: 1 # shipit
4
4
  api_url: https://api.github.com/repos/shopify/shipit-engine/deployments/1
5
5
  github_id: 1
6
6
 
7
7
  shipit2_deploy_third:
8
- commit_id: 3 # third
8
+ sha: 367578b362bf2b4df5903e1c7960929361c39074 # third
9
9
  task_id: 2 # shipit2
10
10
  api_url: https://api.github.com/repos/shopify/shipit-engine/deployments/2
11
11
  github_id: 2
12
12
 
13
13
  shipit_pending_third:
14
- commit_id: 3 # third
14
+ sha: 367578b362bf2b4df5903e1c7960929361c39074 # third
15
15
  task_id: 4 # shipit_pending
16
16
  api_url: https://api.github.com/repos/shopify/shipit-engine/deployments/3
17
17
  github_id: 3
18
18
 
19
19
  shipit_pending_fourth:
20
- commit_id: 4 # fourth
20
+ sha: 467578b362bf2b4df5903e1c7960929361c3435a # fourth
21
21
  task_id: 4 # shipit_pending
22
22
 
23
23
  shipit_running_fourth:
24
- commit_id: 4 # fourth
24
+ sha: 467578b362bf2b4df5903e1c7960929361c3435a # fourth
25
25
  task_id: 5 # shipit_running
26
26
 
27
27
  shipit_complete_fourth:
28
- commit_id: 4 # fourth
28
+ sha: 467578b362bf2b4df5903e1c7960929361c3435a # fourth
29
29
  task_id: 6 # shipit_complete
30
30
 
31
31
  shipit_aborted_fourth:
32
- commit_id: 4 # fourth
32
+ sha: 467578b362bf2b4df5903e1c7960929361c3435a # fourth
33
33
  task_id: 7 # shipit_aborted
34
34
 
35
35
  shipit_rollback_fourth:
36
- commit_id: 4 # fourth
36
+ sha: 467578b362bf2b4df5903e1c7960929361c3435a # fourth
37
37
  task_id: 8 # shipit_rollback
@@ -10,6 +10,7 @@ first:
10
10
  additions: 42
11
11
  deletions: 24
12
12
  updated_at: <%= 8.days.ago.to_s(:db) %>
13
+ created_at: <%= 1.day.ago.to_s(:db) %>
13
14
 
14
15
  second:
15
16
  id: 2
@@ -23,6 +24,7 @@ second:
23
24
  additions: 1
24
25
  deletions: 1
25
26
  updated_at: <%= 8.days.ago.to_s(:db) %>
27
+ created_at: <%= 1.day.ago.to_s(:db) %>
26
28
 
27
29
  third:
28
30
  id: 3
@@ -36,6 +38,7 @@ third:
36
38
  additions: 12
37
39
  deletions: 64
38
40
  updated_at: <%= 8.days.ago.to_s(:db) %>
41
+ created_at: <%= 1.day.ago.to_s(:db) %>
39
42
 
40
43
  fourth:
41
44
  id: 4
@@ -49,6 +52,8 @@ fourth:
49
52
  additions: 420
50
53
  deletions: 342
51
54
  updated_at: <%= 8.days.ago.to_s(:db) %>
55
+ created_at: <%= 1.day.ago.to_s(:db) %>
56
+ pull_request_head_sha: '6dcb09b5b57875f334f61aebed695e2e4193db5e'
52
57
 
53
58
  fifth:
54
59
  id: 5
@@ -62,6 +67,7 @@ fifth:
62
67
  additions: 1
63
68
  deletions: 24
64
69
  updated_at: <%= 8.days.ago.to_s(:db) %>
70
+ created_at: <%= 1.day.ago.to_s(:db) %>
65
71
 
66
72
  cyclimse_first:
67
73
  id: 6
@@ -194,6 +200,7 @@ canaries_first:
194
200
  additions: 42
195
201
  deletions: 24
196
202
  updated_at: <%= 8.days.ago.to_s(:db) %>
203
+ created_at: <%= 1.day.ago.to_s(:db) %>
197
204
 
198
205
  canaries_second:
199
206
  id: 302
@@ -207,6 +214,7 @@ canaries_second:
207
214
  additions: 1
208
215
  deletions: 1
209
216
  updated_at: <%= 8.days.ago.to_s(:db) %>
217
+ created_at: <%= 1.day.ago.to_s(:db) %>
210
218
 
211
219
  canaries_third:
212
220
  id: 303
@@ -220,6 +228,7 @@ canaries_third:
220
228
  additions: 12
221
229
  deletions: 64
222
230
  updated_at: <%= 8.days.ago.to_s(:db) %>
231
+ created_at: <%= 1.day.ago.to_s(:db) %>
223
232
 
224
233
  canaries_fourth:
225
234
  id: 304
@@ -233,6 +242,7 @@ canaries_fourth:
233
242
  additions: 420
234
243
  deletions: 342
235
244
  updated_at: <%= 8.days.ago.to_s(:db) %>
245
+ created_at: <%= 1.day.ago.to_s(:db) %>
236
246
 
237
247
  canaries_fifth:
238
248
  id: 305
@@ -246,6 +256,7 @@ canaries_fifth:
246
256
  additions: 1
247
257
  deletions: 24
248
258
  updated_at: <%= 8.days.ago.to_s(:db) %>
259
+ created_at: <%= 1.day.ago.to_s(:db) %>
249
260
 
250
261
  undeployed_1:
251
262
  id: 401
@@ -350,3 +361,30 @@ single:
350
361
  additions: 420
351
362
  deletions: 342
352
363
  updated_at: <%= 8.days.ago.to_s(:db) %>
364
+
365
+ task_no_commits:
366
+ id: 601
367
+ sha: 547578b362bf2b4df5903e1c7960929361c3435a
368
+ message: "first commit"
369
+ stack: shipit_task_no_commits
370
+ author: walrus
371
+ committer: walrus
372
+ authored_at: <%= 4.days.ago.to_s(:db) %>
373
+ committed_at: <%= 3.days.ago.to_s(:db) %>
374
+ additions: 420
375
+ deletions: 342
376
+ updated_at: <%= 8.days.ago.to_s(:db) %>
377
+
378
+ check_deploy_spec_first:
379
+ id: 701
380
+ sha: 547578b362bf2b4df5903e1c7960929361c3435a
381
+ message: "Removing deploy spec"
382
+ stack: check_deploy_spec
383
+ author: walrus
384
+ committer: walrus
385
+ authored_at: <%= 4.days.ago.to_s(:db) %>
386
+ committed_at: <%= 3.days.ago.to_s(:db) %>
387
+ additions: 420
388
+ deletions: 342
389
+ updated_at: <%= 8.days.ago.to_s(:db) %>
390
+
@@ -0,0 +1,27 @@
1
+ shipit:
2
+ owner: shopify
3
+ name: shipit-engine
4
+
5
+ cyclimse:
6
+ owner: george
7
+ name: cyclimse
8
+
9
+ foo-bar:
10
+ owner: shopify
11
+ name: foo-bar
12
+
13
+ soc:
14
+ owner: "shopify"
15
+ name: "soc"
16
+
17
+ check_runs:
18
+ owner: shopify
19
+ name: check_runs
20
+
21
+ check_deploy_spec:
22
+ owner: shopify
23
+ name: check_deploy_spec
24
+
25
+ rails:
26
+ owner: rails
27
+ name: rails