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
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module Shipit
3
+ module Webhooks
4
+ module Handlers
5
+ class PushHandler < Handler
6
+ params do
7
+ requires :ref
8
+ end
9
+ def process
10
+ stacks.where(branch: branch).each(&:sync_github)
11
+ end
12
+
13
+ private
14
+
15
+ def branch
16
+ params.ref.gsub('refs/heads/', '')
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module Shipit
3
+ module Webhooks
4
+ module Handlers
5
+ class StatusHandler < Handler
6
+ params do
7
+ requires :sha, String
8
+ requires :state, String
9
+ accepts :description, String
10
+ accepts :target_url, String
11
+ accepts :context, String
12
+ accepts :created_at, String
13
+
14
+ accepts :branches, Array do
15
+ requires :name, String
16
+ end
17
+ end
18
+
19
+ def process
20
+ Commit.where(sha: params.sha).each do |commit|
21
+ commit.create_status_from_github!(params)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  module ConditionalAttributes
3
4
  extend ActiveSupport::Concern
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class AnonymousUserSerializer < UserSerializer
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class CommandLineUserSerializer < UserSerializer
3
4
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class CommitSerializer < ShortCommitSerializer
3
4
  include GithubUrlHelper
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class DeploySerializer < TaskSerializer
3
4
  include GithubUrlHelper
4
5
 
5
6
  has_many :commits
6
7
 
7
- attributes :compare_url, :rollback_url, :additions, :deletions
8
+ attributes :compare_url, :rollback_url, :additions, :deletions, :rollback_once_aborted_to
8
9
 
9
10
  def html_url
10
11
  stack_deploy_url(object.stack, object)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class HookSerializer < ActiveModel::Serializer
3
4
  include ConditionalAttributes
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class PullRequestSerializer < ActiveModel::Serializer
3
4
  include GithubUrlHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class RollbackSerializer < DeploySerializer
3
4
  def type
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class ShortCommitSerializer < ActiveModel::Serializer
3
4
  attributes :sha, :message
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class StackSerializer < ActiveModel::Serializer
3
4
  include ConditionalAttributes
@@ -5,7 +6,8 @@ module Shipit
5
6
  has_one :lock_author
6
7
  attributes :id, :repo_owner, :repo_name, :environment, :html_url, :url, :tasks_url, :deploy_url, :pull_requests_url,
7
8
  :deploy_spec, :undeployed_commits_count, :is_locked, :lock_reason, :continuous_deployment, :created_at,
8
- :updated_at, :locked_since, :last_deployed_at, :branch, :merge_queue_enabled
9
+ :updated_at, :locked_since, :last_deployed_at, :branch, :merge_queue_enabled, :is_archived,
10
+ :archived_since
9
11
 
10
12
  def url
11
13
  api_stack_url(object)
@@ -39,6 +41,10 @@ module Shipit
39
41
  object.locked?
40
42
  end
41
43
 
44
+ def is_archived
45
+ object.archived?
46
+ end
47
+
42
48
  def deploy_spec
43
49
  object.cached_deploy_spec.cacheable.config
44
50
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class TailTaskSerializer < ActiveModel::Serializer
3
4
  include ChunksHelper
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class TaskSerializer < ActiveModel::Serializer
3
4
  include ConditionalAttributes
@@ -5,23 +6,7 @@ module Shipit
5
6
  has_one :author
6
7
  has_one :revision, serializer: ShortCommitSerializer
7
8
 
8
- attributes(*%i(
9
- id
10
- url
11
- html_url
12
- output_url
13
- type
14
- status
15
- action
16
- title
17
- description
18
- started_at
19
- ended_at
20
- updated_at
21
- created_at
22
- env
23
- ignored_safeties
24
- ))
9
+ attributes(:id, :url, :html_url, :output_url, :type, :status, :action, :title, :description, :started_at, :ended_at, :updated_at, :created_at, :env, :ignored_safeties)
25
10
 
26
11
  def revision
27
12
  object.until_commit
@@ -1,5 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  module Shipit
2
3
  class UserSerializer < ActiveModel::Serializer
3
- attributes :id, :name, :email, :login, :avatar_url, :created_at, :updated_at, :github_id
4
+ attributes :id, :name, :email, :login, :avatar_url, :created_at, :updated_at, :github_id, :anonymous
5
+
6
+ def anonymous
7
+ !object.logged_in?
8
+ end
4
9
  end
5
10
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  class AsciiOnlyValidator < ActiveModel::EachValidator
2
3
  def validate_each(record, attribute, value)
3
- value.encode(Encoding::ASCII)
4
- rescue Encoding::UndefinedConversionError
5
- record.errors.add(attribute, :ascii)
4
+ if value && !value.ascii_only?
5
+ record.errors.add(attribute, :ascii)
6
+ end
6
7
  end
7
8
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class SubsetValidator < ActiveModel::EachValidator
2
3
  def validate_each(record, attribute, value)
3
4
  superset = options[:of]
File without changes
@@ -2,7 +2,7 @@
2
2
  <html lang="<%= I18n.locale %>" data-controller="<%= controller_name %>" data-action="<%= action_name %>">
3
3
  <head>
4
4
  <% if @stack %>
5
- <title><%= Shipit.app_name %> - <%= @stack.repo_name %>/<%= @stack.environment %></title>
5
+ <title><%= @stack.repo_name %>/<%= @stack.environment %> - <%= Shipit.app_name %></title>
6
6
  <% else %>
7
7
  <title><%= Shipit.app_name %></title>
8
8
  <% end %>
@@ -12,6 +12,8 @@
12
12
  <%= javascript_include_tag :shipit %>
13
13
  <%= yield :update_subscription %>
14
14
  <%= csrf_meta_tags %>
15
+
16
+ <%= render 'layouts/head' %>
15
17
  </head>
16
18
  <body>
17
19
  <% flash.each do |name, msg| %>
@@ -33,7 +35,7 @@
33
35
 
34
36
  <div id="layout-content">
35
37
  <% github_status = Shipit::GithubStatus.status
36
- unless github_status.nil? || github_status[:status] == 'good' %>
38
+ unless github_status.nil? || github_status[:status] == 'operational' %>
37
39
  <div class="banner github-status banner--orange hidden">
38
40
  <div class="banner__inner wrapper">
39
41
  <div class="banner__content">
@@ -52,11 +54,11 @@
52
54
  <% end %>
53
55
 
54
56
  <header class="header">
55
- <%= link_to "Shipit v#{Shipit::VERSION}", "https://github.com/Shopify/shipit-engine/tree/v#{Shipit::VERSION}", class: 'powered-by' %>
57
+ <%= link_to "Powered by Shipit v#{Shipit::VERSION}", "https://github.com/Shopify/shipit-engine/tree/v#{Shipit::VERSION}", class: 'powered-by' %>
56
58
  <div class="wrapper">
57
59
  <div class="header__inner">
58
60
  <a href="/" class="logo">
59
- <span class="visually-hidden">Shipit</span>
61
+ <span class="visually-hidden"><%= Shipit.app_name %></span>
60
62
  </a>
61
63
  <div class="header__page-title">
62
64
  <%= yield :page_title %>
@@ -7,7 +7,7 @@
7
7
  <% variables.each do |variable| %>
8
8
  <p class="variables-fields">
9
9
  <% if variable.select %>
10
- <%= field.select variable.name, options_for_select([["Please select...", { disabled: "disabled", selected: true }]] + variable.select) %>
10
+ <%= field.select variable.name, options_for_select([["Please select...", { disabled: "disabled" }]] + variable.select, variable.default || "Please select...") %>
11
11
  <% else %>
12
12
  <%= field.text_field variable.name, value: variable.default %>
13
13
  <% end %>
@@ -0,0 +1,36 @@
1
+
2
+ <div class="wrapper">
3
+ <section>
4
+ <%= link_to "Create new api client", new_api_client_path, class: 'btn'%>
5
+ </section>
6
+ </div>
7
+ <div class="wrapper">
8
+ <section>
9
+ <ul class="task-list">
10
+ <% @api_clients.each do |api_client|%>
11
+ <li>
12
+ <p>
13
+ <%= link_to api_client.name, api_client_path(api_client) %>
14
+ created by <%= api_client.creator.name %> on <%= api_client.created_at%>
15
+ </p>
16
+ </li>
17
+ <% end %>
18
+ </ul>
19
+ </section>
20
+ </div>
21
+
22
+ <div class="wrapper">
23
+ <section class="pagination">
24
+ <% if params[:since].present? %>
25
+ <%= link_to 'Start', @links[:first], class: 'header__btn btn' %>
26
+ <% else %>
27
+ <%= link_to 'Start', '', class: 'header__btn btn btn--disabled disabled' %>
28
+ <% end %>
29
+
30
+ <% if url = @links[:next] %>
31
+ <%= link_to 'Older', url, class: 'header__btn btn' %>
32
+ <% else %>
33
+ <%= link_to 'Older', '', class: 'header__btn btn btn--disabled disabled' %>
34
+ <% end %>
35
+ </section>
36
+ </div>
@@ -0,0 +1,33 @@
1
+ <div class="wrapper">
2
+ <section>
3
+ <header class="section-header">
4
+ <p>New Api Client</p>
5
+ </header>
6
+ </section>
7
+
8
+ <%= form_for @api_client, url: api_clients_path(@api_client) do |f| %>
9
+ <section>
10
+ <%= label_tag "App Name" %>
11
+ <%= f.text_field :name, placeholder: 'e.g. spy', required: true %>
12
+ </section>
13
+
14
+ <section>
15
+ <%= label_tag "Permissions" %>
16
+ <ul class="deploy-checklist">
17
+ <% Shipit::ApiClient::PERMISSIONS.each do |permission| %>
18
+ <li class="deploy-checklist__item">
19
+ <%= check_box_tag 'api_client[permissions][]', permission, false,
20
+ class: 'deploy-checklist__item__checkbox', id: "checkbox_" + permission %>
21
+ <label class="deploy-checklist__item__label" for="checkbox_<%= permission %>">
22
+ <%= permission %>
23
+ </label>
24
+ </li>
25
+ <% end %>
26
+ </ul>
27
+ </section>
28
+
29
+ <section class="submit-section">
30
+ <%= f.submit "Create", :class => ['btn', 'primary'] %>
31
+ </section>
32
+ <% end %>
33
+ </div>
@@ -0,0 +1,35 @@
1
+ <div class="wrapper">
2
+ <section>
3
+ <header class="section-header">
4
+ <h2>Api client: <b><%= @api_client.name %></b></h2>
5
+ </header>
6
+
7
+ <p>Created by <%= @api_client.creator.name %> on <%= @api_client.created_at %></p>
8
+ </section>
9
+
10
+ <section>
11
+ <h3>Authentication token:</h3>
12
+ <code style="background-color: yellow">
13
+ <b><%= @api_client.authentication_token %></b>
14
+ </code>
15
+ </section>
16
+
17
+ <section>
18
+ <%= form_for @api_client, url: api_client_path(@api_client) do |f| %>
19
+ <h3> Permissions </h3>
20
+ <ul class="deploy-checklist">
21
+ <% Shipit::ApiClient::PERMISSIONS.each do |permission| %>
22
+ <li class="deploy-checklist__item">
23
+ <%= check_box_tag 'api_client[permissions][]', permission, @api_client.permissions.include?(permission),
24
+ class: 'deploy-checklist__item__checkbox', id: "checkbox_" + permission %>
25
+ <label class="deploy-checklist__item__label" for="checkbox_<%= permission %>">
26
+ <%= permission %>
27
+ </label>
28
+ </li>
29
+ <% end %>
30
+ </ul>
31
+ <%= f.submit "Update", :class => ['btn', 'primary'] %>
32
+ <% end %>
33
+ </section>
34
+
35
+ </div>
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # Derived from http://timnew.me/blog/2013/04/07/multiple-project-summary-reporting-standard-cctray-xml-feed/
2
- status_map = {'backlogged' => 'failure', 'locked' => 'failure'}
3
+ status_map = { 'backlogged' => 'failure', 'locked' => 'failure' }
3
4
  xml.instruct!
4
5
  xml.Projects do
5
6
  xml.Project(
@@ -9,18 +9,6 @@
9
9
  <%= render 'shipit/deploys/summary', commits: @deploy.commits %>
10
10
  </section>
11
11
 
12
- <% unless @deploy.commits_since.empty? %>
13
- <section class="less-important">
14
-
15
- <p>The following commits are <strong>not</strong> included in this deploy.
16
- Please ensure that none of these commits are needed for what
17
- <strong>is</strong> being deployed (for example, if they contain the revert
18
- of a broken change).</p>
19
-
20
- <%= render 'shipit/deploys/summary', commits: @deploy.commits_since %>
21
- </section>
22
- <% end %>
23
-
24
12
  <%= render_monitoring @stack %>
25
13
 
26
14
  <%= render_checks @commit %>
@@ -37,4 +25,21 @@
37
25
  <%= f.submit class: 'btn btn--primary btn--large trigger-deploy' %>
38
26
  </section>
39
27
  <% end %>
28
+
29
+ <% unless @deploy.commits_since.empty? %>
30
+ <section class="less-important">
31
+ <header class="section-header">
32
+ <h2>Commits not included in this deploy</h2>
33
+ </header>
34
+
35
+ <div>
36
+ <p>The following commits are <strong>not</strong> included in this deploy.
37
+ Please ensure that none of these commits are needed for what
38
+ <strong>is</strong> being deployed (for example, if they contain the revert
39
+ of a broken change).</p>
40
+
41
+ <%= render 'shipit/deploys/summary', commits: @deploy.commits_since %>
42
+ </div>
43
+ </section>
44
+ <% end %>
40
45
  </div>
@@ -1,8 +1,8 @@
1
1
  <% content_for :task_title do %>
2
2
  <% if @deploy.rollback? %>
3
- rolling back to
3
+ <%= @deploy.active? ? "rolling back to" : "rolled back to" %>
4
4
  <% else %>
5
- deploying
5
+ <%= @deploy.active? ? "deploying" : "deployed" %>
6
6
  <% end %>
7
7
  <span class="short-sha"><%= link_to_github_deploy(@deploy) %></span>
8
8
  <%= timeago_tag(@deploy.created_at, force: true) %>
@@ -3,7 +3,7 @@
3
3
  <%= render 'anchor', color: '#bd2c00' %>
4
4
  </div>
5
5
  <h4 class="status-heading text-red">
6
- Please log in to <%= link_to 'Shipit', '/', target: '_blank', rel: 'noopener' %>
6
+ Please log in to <%= link_to Shipit.app_name, '/', target: '_blank', rel: 'noopener' %>
7
7
  </h4>
8
8
  <span class="status-meta">
9
9
  Here Comes The Walrus is unable to check merge status.
@@ -5,23 +5,26 @@
5
5
 
6
6
 
7
7
  <% content_for :primary_navigation do %>
8
- <%= link_to 'Refresh statuses & commits', stack_refresh_path(stack), method: 'post', class: "header__btn btn" %>
8
+ <%= link_to t('stack.nav.refresh'), stack_refresh_path(stack), method: 'post', class: "header__btn btn" %>
9
9
  <% end %>
10
10
 
11
11
  <% content_for :secondary_navigation do %>
12
12
  <ul class="nav__list nav__list--primary">
13
13
  <li class="nav__list__item">
14
- <%= link_to "Commits & Deploys", stack_path(stack) %>
14
+ <%= link_to t('stack.nav.commits'), stack_path(stack) %>
15
15
  </li>
16
16
  <li class="nav__list__item">
17
- <%= link_to 'Settings', stack_settings_path(stack) %>
17
+ <%= link_to t('stack.nav.settings'), stack_settings_path(stack) %>
18
18
  </li>
19
19
  <li class="nav__list__item">
20
- <%= link_to 'Timeline', index_stack_tasks_path(stack) %>
20
+ <%= link_to t('stack.nav.timeline'), index_stack_tasks_path(stack) %>
21
+ </li>
22
+ <li class="nav__list__item">
23
+ <%= link_to t('stack.nav.statistics'), stack_statistics_path(stack) %>
21
24
  </li>
22
25
  <% if stack.merge_queue_enabled? %>
23
26
  <li class="nav__list__item">
24
- <%= link_to "Merge Queue (#{stack.pull_requests.queued.count})", stack_pull_requests_path(stack) %>
27
+ <%= link_to t('stack.nav.merge_queue', count: stack.pull_requests.queued.count), stack_pull_requests_path(stack) %>
25
28
  </li>
26
29
  <% end %>
27
30
 
@@ -35,25 +38,37 @@
35
38
  <%= link_to "#{definition.action}…", new_stack_tasks_path(stack, definition_id: definition.id), class: "trigger-deploy" %>
36
39
  </li>
37
40
  <% end %>
41
+ <li class="nav__list__sub__item">
42
+ <%= link_to "All tasks", stack_tasks_list_path(stack), class: "trigger-deploy" %>
43
+ </li>
38
44
  </ul>
39
45
  </li>
40
46
  <% end %>
47
+
48
+ <%= render partial: 'shipit/stacks/links', locals: { stack: stack } %>
41
49
  </ul>
42
50
 
43
51
  <ul class="nav__list nav__list--secondary">
44
52
  <% if stack.links.present? %>
45
- <% stack.links.each do |name, url| %>
46
- <li class="nav__list__item">
47
- <%= link_to name.humanize, url, :target => '_blank', :class => "#{name.dasherize}-url" %>
48
- </li>
49
- <% end %>
53
+ <li class="nav__list__item nav__list__item--has-children">
54
+
55
+ <%= t('stack.nav.links') %>
56
+
57
+ <ul class="nav__sub__list">
58
+ <% stack.links.each do |name, url| %>
59
+ <li class="nav__list__sub__item">
60
+ <%= link_to name.humanize, url, :target => '_blank', :class => "#{name.dasherize}-url" %>
61
+ </li>
62
+ <% end %>
63
+ </ul>
64
+ </li>
50
65
  <% end %>
51
66
  <li class="nav__list__item">
52
- <%= link_to 'View on GitHub', github_repo_url(stack.repo_owner, stack.repo_name) %>
67
+ <%= link_to t('stack.nav.view_on_github'), github_repo_url(stack.repo_owner, stack.repo_name) %>
53
68
  </li>
54
69
  <% if stack.deploy_url.present? %>
55
70
  <li class="nav__list__item">
56
- <%= sanitize link_to 'View website', stack.deploy_url, :target => '_blank', :class => 'deploy-url' %>
71
+ <%= sanitize link_to t('stack.nav.deploy_link'), stack.deploy_url, :target => '_blank', :class => 'deploy-url' %>
57
72
  </li>
58
73
  <% end %>
59
74
  </ul>