shipit-engine 0.31.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 (290) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/Rakefile +4 -2
  4. data/app/assets/stylesheets/_pages/_stacks.scss +0 -3
  5. data/app/assets/stylesheets/merge_status.scss +0 -3
  6. data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +1 -0
  7. data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
  8. data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
  9. data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
  10. data/app/controllers/concerns/shipit/authentication.rb +3 -2
  11. data/app/controllers/concerns/shipit/pagination.rb +2 -1
  12. data/app/controllers/shipit/api/base_controller.rb +11 -6
  13. data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
  14. data/app/controllers/shipit/api/commits_controller.rb +2 -1
  15. data/app/controllers/shipit/api/deploys_controller.rb +4 -3
  16. data/app/controllers/shipit/api/hooks_controller.rb +6 -5
  17. data/app/controllers/shipit/api/locks_controller.rb +5 -4
  18. data/app/controllers/shipit/api/outputs_controller.rb +2 -1
  19. data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
  20. data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
  21. data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
  22. data/app/controllers/shipit/api/stacks_controller.rb +18 -5
  23. data/app/controllers/shipit/api/tasks_controller.rb +6 -5
  24. data/app/controllers/shipit/api_clients_controller.rb +4 -3
  25. data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
  26. data/app/controllers/shipit/commit_checks_controller.rb +2 -1
  27. data/app/controllers/shipit/commits_controller.rb +2 -1
  28. data/app/controllers/shipit/deploys_controller.rb +3 -2
  29. data/app/controllers/shipit/github_authentication_controller.rb +4 -3
  30. data/app/controllers/shipit/merge_status_controller.rb +17 -16
  31. data/app/controllers/shipit/pull_requests_controller.rb +3 -2
  32. data/app/controllers/shipit/release_statuses_controller.rb +3 -2
  33. data/app/controllers/shipit/rollbacks_controller.rb +3 -2
  34. data/app/controllers/shipit/shipit_controller.rb +2 -1
  35. data/app/controllers/shipit/stacks_controller.rb +22 -7
  36. data/app/controllers/shipit/status_controller.rb +2 -1
  37. data/app/controllers/shipit/tasks_controller.rb +6 -5
  38. data/app/controllers/shipit/webhooks_controller.rb +3 -2
  39. data/app/helpers/shipit/chunks_helper.rb +1 -0
  40. data/app/helpers/shipit/deploys_helper.rb +4 -3
  41. data/app/helpers/shipit/github_url_helper.rb +1 -0
  42. data/app/helpers/shipit/merge_status_helper.rb +1 -0
  43. data/app/helpers/shipit/shipit_helper.rb +1 -0
  44. data/app/helpers/shipit/stacks_helper.rb +1 -0
  45. data/app/helpers/shipit/tasks_helper.rb +1 -0
  46. data/app/jobs/shipit/background_job.rb +4 -0
  47. data/app/jobs/shipit/background_job/unique.rb +1 -0
  48. data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
  49. data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
  50. data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
  51. data/app/jobs/shipit/continuous_delivery_job.rb +2 -1
  52. data/app/jobs/shipit/create_on_github_job.rb +6 -1
  53. data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
  54. data/app/jobs/shipit/deferred_touch_job.rb +4 -0
  55. data/app/jobs/shipit/deliver_hook_job.rb +1 -0
  56. data/app/jobs/shipit/destroy_job.rb +1 -0
  57. data/app/jobs/shipit/destroy_stack_job.rb +1 -0
  58. data/app/jobs/shipit/emit_event_job.rb +2 -1
  59. data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
  60. data/app/jobs/shipit/fetch_deployed_revision_job.rb +1 -0
  61. data/app/jobs/shipit/github_sync_job.rb +2 -1
  62. data/app/jobs/shipit/mark_deploy_healthy_job.rb +1 -0
  63. data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
  64. data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
  65. data/app/jobs/shipit/perform_task_job.rb +12 -5
  66. data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
  67. data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
  68. data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
  69. data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
  70. data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
  71. data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
  72. data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
  73. data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
  74. data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +4 -3
  75. data/app/models/concerns/shipit/deferred_touch.rb +4 -3
  76. data/app/models/shipit/anonymous_user.rb +5 -0
  77. data/app/models/shipit/api_client.rb +3 -2
  78. data/app/models/shipit/application_record.rb +2 -1
  79. data/app/models/shipit/check_run.rb +4 -3
  80. data/app/models/shipit/command_line_user.rb +1 -0
  81. data/app/models/shipit/commit.rb +11 -4
  82. data/app/models/shipit/commit_checks.rb +1 -0
  83. data/app/models/shipit/commit_deployment.rb +3 -2
  84. data/app/models/shipit/commit_deployment_status.rb +2 -1
  85. data/app/models/shipit/commit_message.rb +1 -0
  86. data/app/models/shipit/delivery.rb +4 -3
  87. data/app/models/shipit/deploy.rb +6 -17
  88. data/app/models/shipit/deploy_spec.rb +22 -3
  89. data/app/models/shipit/deploy_spec/bundler_discovery.rb +1 -0
  90. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
  91. data/app/models/shipit/deploy_spec/file_system.rb +10 -3
  92. data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
  93. data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
  94. data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
  95. data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
  96. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
  97. data/app/models/shipit/deploy_stats.rb +2 -1
  98. data/app/models/shipit/duration.rb +3 -2
  99. data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
  100. data/app/models/shipit/github_hook.rb +2 -1
  101. data/app/models/shipit/github_status.rb +2 -1
  102. data/app/models/shipit/hook.rb +6 -5
  103. data/app/models/shipit/membership.rb +3 -2
  104. data/app/models/shipit/output_chunk.rb +7 -2
  105. data/app/models/shipit/pull_request.rb +6 -5
  106. data/app/models/shipit/record.rb +18 -0
  107. data/app/models/shipit/release_status.rb +3 -2
  108. data/app/models/shipit/repository.rb +10 -5
  109. data/app/models/shipit/rollback.rb +1 -0
  110. data/app/models/shipit/stack.rb +50 -16
  111. data/app/models/shipit/status.rb +3 -2
  112. data/app/models/shipit/status/common.rb +7 -6
  113. data/app/models/shipit/status/group.rb +1 -0
  114. data/app/models/shipit/status/missing.rb +2 -1
  115. data/app/models/shipit/status/unknown.rb +2 -1
  116. data/app/models/shipit/task.rb +38 -5
  117. data/app/models/shipit/task_definition.rb +1 -0
  118. data/app/models/shipit/team.rb +2 -1
  119. data/app/models/shipit/undeployed_commit.rb +1 -0
  120. data/app/models/shipit/unlimited_api_client.rb +1 -0
  121. data/app/models/shipit/user.rb +10 -8
  122. data/app/models/shipit/variable_definition.rb +1 -0
  123. data/app/models/shipit/webhooks.rb +1 -0
  124. data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +1 -0
  125. data/app/models/shipit/webhooks/handlers/handler.rb +1 -0
  126. data/app/models/shipit/webhooks/handlers/membership_handler.rb +1 -0
  127. data/app/models/shipit/webhooks/handlers/push_handler.rb +1 -0
  128. data/app/models/shipit/webhooks/handlers/status_handler.rb +1 -0
  129. data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
  130. data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
  131. data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
  132. data/app/serializers/shipit/commit_serializer.rb +1 -0
  133. data/app/serializers/shipit/deploy_serializer.rb +2 -1
  134. data/app/serializers/shipit/hook_serializer.rb +1 -0
  135. data/app/serializers/shipit/pull_request_serializer.rb +1 -0
  136. data/app/serializers/shipit/rollback_serializer.rb +1 -0
  137. data/app/serializers/shipit/short_commit_serializer.rb +1 -0
  138. data/app/serializers/shipit/stack_serializer.rb +1 -0
  139. data/app/serializers/shipit/tail_task_serializer.rb +1 -0
  140. data/app/serializers/shipit/task_serializer.rb +2 -17
  141. data/app/serializers/shipit/user_serializer.rb +6 -1
  142. data/app/validators/ascii_only_validator.rb +1 -0
  143. data/app/validators/subset_validator.rb +1 -0
  144. data/app/views/layouts/shipit.html.erb +1 -1
  145. data/app/views/shipit/_variables.html.erb +1 -1
  146. data/app/views/shipit/ccmenu/project.xml.builder +2 -1
  147. data/app/views/shipit/deploys/show.html.erb +2 -2
  148. data/app/views/shipit/stacks/_header.html.erb +3 -0
  149. data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
  150. data/app/views/shipit/stacks/index.html.erb +1 -1
  151. data/app/views/shipit/tasks/show.html.erb +1 -1
  152. data/config/initializers/inflections.rb +2 -1
  153. data/config/locales/en.yml +3 -3
  154. data/config/routes.rb +10 -2
  155. data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
  156. data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
  157. data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
  158. data/lib/shipit.rb +12 -2
  159. data/lib/shipit/cast_value.rb +1 -0
  160. data/lib/shipit/command.rb +13 -12
  161. data/lib/shipit/commands.rb +5 -4
  162. data/lib/shipit/csv_serializer.rb +1 -0
  163. data/lib/shipit/deploy_commands.rb +1 -0
  164. data/lib/shipit/engine.rb +7 -2
  165. data/lib/shipit/environment_variables.rb +2 -1
  166. data/lib/shipit/first_parent_commits_iterator.rb +1 -0
  167. data/lib/shipit/flock.rb +1 -0
  168. data/lib/shipit/github_app.rb +7 -6
  169. data/lib/shipit/github_http_cache_middleware.rb +1 -0
  170. data/lib/shipit/null_serializer.rb +1 -0
  171. data/lib/shipit/octokit_check_runs.rb +3 -2
  172. data/lib/shipit/octokit_iterator.rb +3 -2
  173. data/lib/shipit/paginator.rb +3 -2
  174. data/lib/shipit/rollback_commands.rb +1 -0
  175. data/lib/shipit/same_site_cookie_middleware.rb +29 -0
  176. data/lib/shipit/simple_message_verifier.rb +1 -0
  177. data/lib/shipit/stack_commands.rb +3 -2
  178. data/lib/shipit/stat.rb +1 -0
  179. data/lib/shipit/task_commands.rb +2 -0
  180. data/lib/shipit/version.rb +2 -1
  181. data/lib/snippets/release-gem +5 -1
  182. data/lib/tasks/cron.rake +2 -0
  183. data/lib/tasks/dev.rake +3 -2
  184. data/lib/tasks/shipit.rake +15 -14
  185. data/lib/tasks/teams.rake +1 -0
  186. data/test/controllers/api/base_controller_test.rb +3 -2
  187. data/test/controllers/api/ccmenu_controller_test.rb +8 -7
  188. data/test/controllers/api/commits_controller_test.rb +3 -2
  189. data/test/controllers/api/deploys_controller_test.rb +15 -14
  190. data/test/controllers/api/hooks_controller_test.rb +8 -7
  191. data/test/controllers/api/locks_controller_test.rb +7 -6
  192. data/test/controllers/api/outputs_controller_test.rb +2 -1
  193. data/test/controllers/api/pull_requests_controller_test.rb +8 -7
  194. data/test/controllers/api/release_statuses_controller_test.rb +2 -1
  195. data/test/controllers/api/rollback_controller_test.rb +113 -0
  196. data/test/controllers/api/stacks_controller_test.rb +30 -9
  197. data/test/controllers/api/tasks_controller_test.rb +13 -12
  198. data/test/controllers/api_clients_controller_test.rb +5 -4
  199. data/test/controllers/ccmenu_controller_test.rb +4 -3
  200. data/test/controllers/commit_checks_controller_test.rb +4 -3
  201. data/test/controllers/commits_controller_test.rb +3 -2
  202. data/test/controllers/deploys_controller_test.rb +32 -21
  203. data/test/controllers/github_authentication_controller_test.rb +1 -0
  204. data/test/controllers/merge_status_controller_test.rb +7 -6
  205. data/test/controllers/pull_requests_controller_test.rb +4 -3
  206. data/test/controllers/release_statuses_controller_test.rb +3 -2
  207. data/test/controllers/rollbacks_controller_test.rb +9 -8
  208. data/test/controllers/stacks_controller_test.rb +33 -19
  209. data/test/controllers/status_controller_test.rb +1 -0
  210. data/test/controllers/tasks_controller_test.rb +19 -18
  211. data/test/controllers/webhooks_controller_test.rb +11 -10
  212. data/test/dummy/config/environments/development.rb +2 -0
  213. data/test/dummy/config/environments/test.rb +2 -0
  214. data/test/dummy/db/schema.rb +4 -1
  215. data/test/fixtures/shipit/commits.yml +15 -0
  216. data/test/fixtures/shipit/repositories.yml +4 -0
  217. data/test/fixtures/shipit/stacks.yml +90 -14
  218. data/test/fixtures/timeout +2 -1
  219. data/test/helpers/api_helper.rb +1 -0
  220. data/test/helpers/fixture_aliases_helper.rb +1 -0
  221. data/test/helpers/hooks_helper.rb +2 -1
  222. data/test/helpers/json_helper.rb +15 -11
  223. data/test/helpers/links_helper.rb +4 -3
  224. data/test/helpers/payloads_helper.rb +1 -0
  225. data/test/helpers/queries_helper.rb +3 -2
  226. data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
  227. data/test/jobs/chunk_rollup_job_test.rb +1 -0
  228. data/test/jobs/deliver_hook_job_test.rb +1 -0
  229. data/test/jobs/destroy_stack_job_test.rb +1 -0
  230. data/test/jobs/emit_event_job_test.rb +2 -1
  231. data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
  232. data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
  233. data/test/jobs/github_sync_job_test.rb +1 -0
  234. data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
  235. data/test/jobs/merge_pull_requests_job_test.rb +1 -0
  236. data/test/jobs/perform_task_job_test.rb +4 -3
  237. data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
  238. data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
  239. data/test/jobs/refresh_github_user_job_test.rb +1 -0
  240. data/test/jobs/refresh_status_job_test.rb +1 -0
  241. data/test/jobs/unique_job_test.rb +1 -0
  242. data/test/jobs/update_github_last_deployed_ref_job_test.rb +1 -0
  243. data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
  244. data/test/models/api_client_test.rb +1 -0
  245. data/test/models/commit_checks_test.rb +1 -0
  246. data/test/models/commit_deployment_status_test.rb +1 -0
  247. data/test/models/commit_deployment_test.rb +2 -1
  248. data/test/models/commits_test.rb +72 -6
  249. data/test/models/delivery_test.rb +2 -1
  250. data/test/models/deploy_spec_test.rb +47 -42
  251. data/test/models/deploy_stats_test.rb +1 -0
  252. data/test/models/deploys_test.rb +31 -22
  253. data/test/models/duration_test.rb +1 -0
  254. data/test/models/github_hook_test.rb +1 -0
  255. data/test/models/hook_test.rb +18 -10
  256. data/test/models/membership_test.rb +1 -0
  257. data/test/models/output_chunk_test.rb +1 -0
  258. data/test/models/pull_request_test.rb +4 -3
  259. data/test/models/release_statuses_test.rb +1 -0
  260. data/test/models/rollbacks_test.rb +1 -0
  261. data/test/models/shipit/check_run_test.rb +1 -0
  262. data/test/models/shipit/repository_test.rb +1 -0
  263. data/test/models/shipit/wehbooks/handlers_test.rb +1 -0
  264. data/test/models/stacks_test.rb +30 -8
  265. data/test/models/status/group_test.rb +1 -0
  266. data/test/models/status/missing_test.rb +1 -0
  267. data/test/models/status_test.rb +1 -0
  268. data/test/models/task_definitions_test.rb +9 -8
  269. data/test/models/tasks_test.rb +18 -1
  270. data/test/models/team_test.rb +4 -2
  271. data/test/models/undeployed_commits_test.rb +1 -0
  272. data/test/models/users_test.rb +13 -5
  273. data/test/test_command_integration.rb +3 -2
  274. data/test/test_helper.rb +34 -31
  275. data/test/unit/anonymous_user_serializer_test.rb +14 -0
  276. data/test/unit/command_test.rb +8 -7
  277. data/test/unit/commands_test.rb +1 -0
  278. data/test/unit/commit_serializer_test.rb +16 -0
  279. data/test/unit/csv_serializer_test.rb +3 -2
  280. data/test/unit/deploy_commands_test.rb +5 -4
  281. data/test/unit/deploy_serializer_test.rb +17 -0
  282. data/test/unit/environment_variables_test.rb +5 -4
  283. data/test/unit/github_app_test.rb +1 -0
  284. data/test/unit/github_url_helper_test.rb +1 -0
  285. data/test/unit/rollback_commands_test.rb +2 -1
  286. data/test/unit/shipit_helper_test.rb +17 -0
  287. data/test/unit/shipit_test.rb +1 -0
  288. data/test/unit/user_serializer_test.rb +14 -0
  289. data/test/unit/variable_definition_test.rb +1 -0
  290. metadata +155 -130
@@ -1,11 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class StacksController < BaseController
4
5
  require_permission :read, :stack, only: %i(index show)
5
- require_permission :write, :stack, only: %i(create destroy)
6
+ require_permission :write, :stack, only: %i(create update destroy)
6
7
 
7
8
  def index
8
- render_resources stacks
9
+ render_resources(stacks)
9
10
  end
10
11
 
11
12
  params do
@@ -16,21 +17,33 @@ module Shipit
16
17
  accepts :deploy_url, String
17
18
  accepts :ignore_ci, Boolean
18
19
  accepts :merge_queue_enabled, Boolean
20
+ accepts :continuous_deployment, Boolean
19
21
  end
20
22
  def create
21
23
  stack = Stack.new(create_params)
22
24
  stack.repository = repository
23
25
  stack.save
24
- render_resource stack
26
+ render_resource(stack)
27
+ end
28
+
29
+ params do
30
+ accepts :deploy_url, String
31
+ accepts :ignore_ci, Boolean
32
+ accepts :merge_queue_enabled, Boolean
33
+ accepts :continuous_deployment, Boolean
34
+ end
35
+ def update
36
+ stack.update(params)
37
+ render_resource(stack)
25
38
  end
26
39
 
27
40
  def show
28
- render_resource stack
41
+ render_resource(stack)
29
42
  end
30
43
 
31
44
  def destroy
32
45
  stack.schedule_for_destroy!
33
- head :accepted
46
+ head(:accepted)
34
47
  end
35
48
 
36
49
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module Api
3
4
  class TasksController < BaseController
@@ -5,22 +6,22 @@ module Shipit
5
6
  require_permission :deploy, :stack, only: :trigger
6
7
 
7
8
  def index
8
- render_resources stack.tasks
9
+ render_resources(stack.tasks)
9
10
  end
10
11
 
11
12
  def show
12
- render_resource stack.tasks.find(params[:id])
13
+ render_resource(stack.tasks.find(params[:id]))
13
14
  end
14
15
 
15
16
  params do
16
17
  accepts :env, Hash, default: {}
17
18
  end
18
19
  def trigger
19
- render_resource stack.trigger_task(params[:task_name], current_user, env: params.env), status: :accepted
20
+ render_resource(stack.trigger_task(params[:task_name], current_user, env: params.env), status: :accepted)
20
21
  rescue Shipit::Task::ConcurrentTaskRunning
21
- render status: :conflict, json: {
22
+ render(status: :conflict, json: {
22
23
  message: 'A task is already running.',
23
- }
24
+ })
24
25
  end
25
26
  end
26
27
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class ApiClientsController < ShipitController
3
4
  include Pagination
@@ -28,10 +29,10 @@ module Shipit
28
29
  def update
29
30
  @api_client = ApiClient.find(params[:id])
30
31
  options = if @api_client.update(update_params)
31
- {flash: {success: 'Successfully updated'}}
32
+ { flash: { success: 'Successfully updated' } }
32
33
  else
33
- {flash: {warning: @stack.errors.full_messages.to_sentence}}
34
- end
34
+ { flash: { warning: @stack.errors.full_messages.to_sentence } }
35
+ end
35
36
 
36
37
  redirect_to(params[:return_to].presence || api_client_path(@api_client), options)
37
38
  end
@@ -1,18 +1,19 @@
1
+ # frozen_string_literal: true
1
2
  require 'uri'
2
3
 
3
4
  module Shipit
4
5
  class CCMenuUrlController < ShipitController
5
6
  def fetch
6
7
  uri = URI(api_stack_ccmenu_url(stack_id: stack.to_param))
7
- uri.query = {'token' => client.authentication_token}.to_query
8
- render json: {ccmenu_url: uri.to_s}
8
+ uri.query = { 'token' => client.authentication_token }.to_query
9
+ render(json: { ccmenu_url: uri.to_s })
9
10
  end
10
11
 
11
12
  private
12
13
 
13
14
  def client
14
15
  @client ||= ApiClient.create_with(permissions: %w(read:stack))
15
- .find_or_create_by!(creator: current_user, name: 'CCMenu Client')
16
+ .find_or_create_by!(creator: current_user, name: 'CCMenu Client')
16
17
  end
17
18
 
18
19
  def stack
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class CommitChecksController < ShipitController
3
4
  def show
@@ -15,7 +16,7 @@ module Shipit
15
16
  url = stack_tail_commit_checks_path(stack, sha: commit.sha, since: next_offset)
16
17
  end
17
18
 
18
- render json: {url: url, output: output, status: checks.status}
19
+ render(json: { url: url, output: output, status: checks.status })
19
20
  end
20
21
 
21
22
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class CommitsController < ShipitController
3
4
  def update
@@ -9,7 +10,7 @@ module Shipit
9
10
  end
10
11
  end
11
12
 
12
- head :ok
13
+ head(:ok)
13
14
  end
14
15
 
15
16
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class DeploysController < ShipitController
3
4
  include ChunksHelper
@@ -29,7 +30,7 @@ module Shipit
29
30
  )
30
31
  respond_with(@deploy.stack, @deploy)
31
32
  rescue Task::ConcurrentTaskRunning
32
- redirect_to new_stack_deploy_path(@stack, sha: @until_commit.sha)
33
+ redirect_to(new_stack_deploy_path(@stack, sha: @until_commit.sha))
33
34
  end
34
35
 
35
36
  def rollback
@@ -38,7 +39,7 @@ module Shipit
38
39
 
39
40
  def revert
40
41
  previous_deploy = @stack.deploys.success.where(until_commit_id: @deploy.since_commit_id).order(id: :desc).first!
41
- redirect_to rollback_stack_deploy_path(@stack, previous_deploy)
42
+ redirect_to(rollback_stack_deploy_path(@stack, previous_deploy))
42
43
  end
43
44
 
44
45
  def short_commit_sha(task)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class GithubAuthenticationController < ActionController::Base
3
4
  include Shipit::Engine.routes.url_helpers
@@ -6,16 +7,16 @@ module Shipit
6
7
  return_url = request.env['omniauth.origin'] || root_path
7
8
  auth = request.env['omniauth.auth']
8
9
 
9
- return render 'failed', layout: false if auth.blank?
10
+ return render('failed', layout: false) if auth.blank?
10
11
 
11
12
  session[:user_id] = sign_in_github(auth)
12
13
 
13
- redirect_to return_url
14
+ redirect_to(return_url)
14
15
  end
15
16
 
16
17
  def logout
17
18
  reset_session
18
- redirect_to root_path
19
+ redirect_to(root_path)
19
20
  end
20
21
 
21
22
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class MergeStatusController < ShipitController
3
4
  skip_authentication only: %i(check show)
@@ -12,25 +13,25 @@ module Shipit
12
13
  if stack
13
14
  return render('logged_out') unless current_user.logged_in?
14
15
  if stale?(last_modified: [stack.updated_at, pull_request.updated_at].max, template: false)
15
- render stack_status, layout: !request.xhr?
16
+ render(stack_status, layout: !request.xhr?)
16
17
  end
17
18
  else
18
- render html: ''
19
+ render(html: '')
19
20
  end
20
21
  rescue ArgumentError
21
- render html: ''
22
+ render(html: '')
22
23
  end
23
24
 
24
25
  def enqueue
25
26
  PullRequest.request_merge!(stack, params[:number], current_user)
26
- render stack_status, layout: !request.xhr?
27
+ render(stack_status, layout: !request.xhr?)
27
28
  end
28
29
 
29
30
  def dequeue
30
31
  if pull_request = stack.pull_requests.find_by_number(params[:number])
31
32
  pull_request.cancel! if pull_request.waiting?
32
33
  end
33
- render stack_status, layout: !request.xhr?
34
+ render(stack_status, layout: !request.xhr?)
34
35
  end
35
36
 
36
37
  def check
@@ -42,7 +43,7 @@ module Shipit
42
43
  render plain: stack_status, status: 503
43
44
  end
44
45
  end
45
- format.json { render json: {stack_status: stack_status} }
46
+ format.json { render json: { stack_status: stack_status } }
46
47
  end
47
48
  end
48
49
 
@@ -62,12 +63,12 @@ module Shipit
62
63
  else
63
64
  # Null ordering is inconsistent across DBMS's, this case statement is ugly but supported universally
64
65
  scope = Stack.order(Arel.sql('CASE WHEN locked_since IS NULL THEN 1 ELSE 0 END, locked_since'))
65
- .order(merge_queue_enabled: :desc, id: :asc).includes(:repository).where(
66
- repositories: {
67
- owner: referrer_parser.repo_owner,
68
- name: referrer_parser.repo_name,
69
- },
70
- )
66
+ .order(merge_queue_enabled: :desc, id: :asc).includes(:repository).where(
67
+ repositories: {
68
+ owner: referrer_parser.repo_owner,
69
+ name: referrer_parser.repo_name,
70
+ },
71
+ )
71
72
  scope = if params[:branch]
72
73
  scope.where(branch: params[:branch])
73
74
  else
@@ -112,10 +113,10 @@ module Shipit
112
113
  attr_reader :repo_owner, :repo_name, :pull_request_number
113
114
 
114
115
  def initialize(referrer)
115
- if URL_PATTERN =~ referrer.to_s
116
- @repo_owner = $1.downcase
117
- @repo_name = $2.downcase
118
- @pull_request_number = $3.to_i
116
+ if (match_info = URL_PATTERN.match(referrer.to_s))
117
+ @repo_owner = match_info[1].downcase
118
+ @repo_name = match_info[2].downcase
119
+ @pull_request_number = match_info[3].to_i
119
120
  else
120
121
  raise ArgumentError, "Invalid referrer: #{referrer.inspect}"
121
122
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class PullRequestsController < ShipitController
3
4
  def index
@@ -11,14 +12,14 @@ module Shipit
11
12
  else
12
13
  flash[:warning] = "Invalid or missing pull request number."
13
14
  end
14
- redirect_to stack_pull_requests_path
15
+ redirect_to(stack_pull_requests_path)
15
16
  end
16
17
 
17
18
  def destroy
18
19
  pull_request = stack.pull_requests.find(params[:id])
19
20
  pull_request.cancel!
20
21
  flash[:success] = 'Merge canceled'
21
- redirect_to stack_pull_requests_path
22
+ redirect_to(stack_pull_requests_path)
22
23
  end
23
24
 
24
25
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class ReleaseStatusesController < ShipitController
3
4
  before_action :load_stack
@@ -10,9 +11,9 @@ module Shipit
10
11
  when 'failure'
11
12
  @deploy.report_faulty!(user: current_user)
12
13
  else
13
- render status: :unprocessable_entity, json: {message: "Invalid `status` parameter"}
14
+ render(status: :unprocessable_entity, json: { message: "Invalid `status` parameter" })
14
15
  end
15
- render status: :created, json: @deploy.last_release_status
16
+ render(status: :created, json: @deploy.last_release_status)
16
17
  end
17
18
 
18
19
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class RollbacksController < ShipitController
3
4
  before_action :load_stack
@@ -5,9 +6,9 @@ module Shipit
5
6
 
6
7
  def create
7
8
  @rollback = @deploy.trigger_rollback(current_user, env: rollback_params[:env], force: params[:force].present?)
8
- redirect_to stack_deploy_path(@stack, @rollback)
9
+ redirect_to(stack_deploy_path(@stack, @rollback))
9
10
  rescue Task::ConcurrentTaskRunning
10
- redirect_to rollback_stack_deploy_path(@stack, @deploy)
11
+ redirect_to(rollback_stack_deploy_path(@stack, @deploy))
11
12
  end
12
13
 
13
14
  private
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class ShipitController < ApplicationController
3
4
  layout 'shipit'
@@ -27,7 +28,7 @@ module Shipit
27
28
  def ensure_required_settings
28
29
  return if Shipit.all_settings_present?
29
30
 
30
- render 'shipit/missing_settings'
31
+ render('shipit/missing_settings')
31
32
  end
32
33
  end
33
34
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class StacksController < ShipitController
3
4
  before_action :load_stack, only: %i(update destroy settings statistics clear_git_cache refresh)
@@ -9,7 +10,16 @@ module Shipit
9
10
  def index
10
11
  @user_stacks = current_user.stacks_contributed_to
11
12
 
12
- @stacks = Stack.order(Arel.sql('(undeployed_commits_count > 0) desc'), tasks_count: :desc)
13
+ @stacks = Stack.all
14
+ if params[:repo]
15
+ @stacks = if (repository = Repository.from_github_repo_name(params[:repo]))
16
+ repository.stacks
17
+ else
18
+ Stack.none
19
+ end
20
+ end
21
+
22
+ @stacks = @stacks.order(Arel.sql('(undeployed_commits_count > 0) desc'), tasks_count: :desc)
13
23
 
14
24
  @show_archived = params[:show_archived]
15
25
  @stacks = @stacks.not_archived unless @show_archived
@@ -48,7 +58,7 @@ module Shipit
48
58
 
49
59
  def lookup
50
60
  @stack = Stack.find(params[:id])
51
- redirect_to stack_url(@stack)
61
+ redirect_to(stack_url(@stack))
52
62
  end
53
63
 
54
64
  def create
@@ -62,18 +72,23 @@ module Shipit
62
72
 
63
73
  def destroy
64
74
  @stack.schedule_for_destroy!
65
- redirect_to stacks_url
75
+ redirect_to(stacks_url)
66
76
  end
67
77
 
68
78
  def settings
69
79
  end
70
80
 
81
+ def all_tasks
82
+ @stack = Stack.from_param!(params[:id])
83
+ @tasks = @stack.tasks.where(type: nil).order(id: :desc).preload(:since_commit, :until_commit, :user).limit(10)
84
+ end
85
+
71
86
  def statistics
72
87
  previous_deploy_stats = Shipit::DeployStats.new(@stack.deploys.not_active.previous_seven_days)
73
88
  @deploy_stats = Shipit::DeployStats.new(@stack.deploys.not_active.last_seven_days)
74
89
  if @deploy_stats.empty?
75
90
  flash[:warning] = 'Statistics not available without previous deploys'
76
- return redirect_to stack_path(@stack)
91
+ return redirect_to(stack_path(@stack))
77
92
  end
78
93
  @diffs = @deploy_stats.compare(previous_deploy_stats)
79
94
  end
@@ -83,13 +98,13 @@ module Shipit
83
98
  RefreshCheckRunsJob.perform_later(stack_id: @stack.id)
84
99
  GithubSyncJob.perform_later(stack_id: @stack.id)
85
100
  flash[:success] = 'Refresh scheduled'
86
- redirect_to request.referer.presence || stack_path(@stack)
101
+ redirect_to(request.referer.presence || stack_path(@stack))
87
102
  end
88
103
 
89
104
  def update
90
105
  options = {}
91
106
  unless @stack.update(update_params)
92
- options = {flash: {warning: @stack.errors.full_messages.to_sentence}}
107
+ options = { flash: { warning: @stack.errors.full_messages.to_sentence } }
93
108
  end
94
109
 
95
110
  update_lock
@@ -101,7 +116,7 @@ module Shipit
101
116
  def clear_git_cache
102
117
  ClearGitCacheJob.perform_later(@stack)
103
118
  flash[:success] = 'Git Cache clearing scheduled'
104
- redirect_to stack_settings_path(@stack)
119
+ redirect_to(stack_settings_path(@stack))
105
120
  end
106
121
 
107
122
  private
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class StatusController < ActionController::Base
3
4
  def version
4
- render plain: Shipit.revision
5
+ render(plain: Shipit.revision)
5
6
  end
6
7
  end
7
8
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class TasksController < ShipitController
3
4
  include Pagination
@@ -35,25 +36,25 @@ module Shipit
35
36
  env: task_params[:env],
36
37
  force: params[:force].present?,
37
38
  )
38
- redirect_to [stack, @task]
39
+ redirect_to([stack, @task])
39
40
  rescue Task::ConcurrentTaskRunning
40
- redirect_to new_stack_tasks_path(stack, @definition)
41
+ redirect_to(new_stack_tasks_path(stack, @definition))
41
42
  end
42
43
  end
43
44
 
44
45
  def abort
45
46
  task.abort!(rollback_once_aborted: params[:rollback].present?, aborted_by: current_user)
46
- head :ok
47
+ head(:ok)
47
48
  end
48
49
 
49
50
  def tail
50
- render json: TailTaskSerializer.new(task, context: params)
51
+ render(json: TailTaskSerializer.new(task, context: params))
51
52
  end
52
53
 
53
54
  def lookup
54
55
  @task = Task.find(params[:id])
55
56
 
56
- redirect_to url_for_task
57
+ redirect_to(url_for_task)
57
58
  end
58
59
 
59
60
  private