shipit-engine 0.5.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/shipit/api/cacheable.rb +13 -0
  3. data/app/controllers/concerns/shipit/api/paginable.rb +37 -0
  4. data/app/controllers/concerns/shipit/api/rendering.rb +25 -0
  5. data/app/controllers/concerns/{api/paginable.rb → shipit/pagination.rb} +5 -13
  6. data/app/controllers/shipit/api/base_controller.rb +68 -0
  7. data/app/controllers/shipit/api/deploys_controller.rb +17 -0
  8. data/app/controllers/shipit/api/hooks_controller.rb +53 -0
  9. data/app/controllers/shipit/api/locks_controller.rb +32 -0
  10. data/app/controllers/shipit/api/outputs_controller.rb +17 -0
  11. data/app/controllers/shipit/api/stacks_controller.rb +21 -0
  12. data/app/controllers/shipit/api/tasks_controller.rb +20 -0
  13. data/app/controllers/shipit/commit_checks_controller.rb +26 -0
  14. data/app/controllers/shipit/deploys_controller.rb +47 -0
  15. data/app/controllers/shipit/github_authentication_controller.rb +27 -0
  16. data/app/controllers/shipit/rollbacks_controller.rb +26 -0
  17. data/app/controllers/shipit/shipit_controller.rb +62 -0
  18. data/app/controllers/shipit/stacks_controller.rb +81 -0
  19. data/app/controllers/shipit/status_controller.rb +7 -0
  20. data/app/controllers/shipit/tasks_controller.rb +48 -0
  21. data/app/controllers/shipit/webhooks_controller.rb +101 -0
  22. data/app/helpers/shipit/chunks_helper.rb +8 -0
  23. data/app/helpers/shipit/deploys_helper.rb +28 -0
  24. data/app/helpers/shipit/github_url_helper.rb +48 -0
  25. data/app/helpers/shipit/shipit_helper.rb +64 -0
  26. data/app/helpers/shipit/stacks_helper.rb +78 -0
  27. data/app/helpers/shipit/tasks_helper.rb +11 -0
  28. data/app/jobs/shipit/background_job.rb +24 -0
  29. data/app/jobs/shipit/background_job/unique.rb +28 -0
  30. data/app/jobs/shipit/cache_deploy_spec_job.rb +12 -0
  31. data/app/jobs/shipit/chunk_rollup_job.rb +21 -0
  32. data/app/jobs/shipit/clear_git_cache_job.rb +9 -0
  33. data/app/jobs/shipit/deliver_hook_job.rb +9 -0
  34. data/app/jobs/shipit/destroy_stack_job.rb +9 -0
  35. data/app/jobs/shipit/emit_event_job.rb +10 -0
  36. data/app/jobs/shipit/fetch_commit_stats_job.rb +9 -0
  37. data/app/jobs/shipit/fetch_deployed_revision_job.rb +23 -0
  38. data/app/jobs/shipit/git_mirror_update_job.rb +12 -0
  39. data/app/jobs/shipit/github_sync_job.rb +55 -0
  40. data/app/jobs/shipit/perform_commit_checks_job.rb +7 -0
  41. data/app/jobs/shipit/perform_task_job.rb +57 -0
  42. data/app/jobs/shipit/refresh_github_user_job.rb +9 -0
  43. data/app/jobs/shipit/refresh_statuses_job.rb +14 -0
  44. data/app/jobs/shipit/setup_github_hook_job.rb +11 -0
  45. data/app/models/shipit/anonymous_user.rb +43 -0
  46. data/app/models/shipit/api_client.rb +44 -0
  47. data/app/models/shipit/commit.rb +209 -0
  48. data/app/models/shipit/commit_checks.rb +90 -0
  49. data/app/models/shipit/delivery.rb +47 -0
  50. data/app/models/shipit/deploy.rb +153 -0
  51. data/app/models/shipit/deploy_spec.rb +150 -0
  52. data/app/models/shipit/deploy_spec/bundler_discovery.rb +61 -0
  53. data/app/models/shipit/deploy_spec/capistrano_discovery.rb +29 -0
  54. data/app/models/shipit/deploy_spec/file_system.rb +64 -0
  55. data/app/models/shipit/deploy_spec/pypi_discovery.rb +34 -0
  56. data/app/models/shipit/deploy_spec/rubygems_discovery.rb +34 -0
  57. data/app/models/shipit/github_hook.rb +148 -0
  58. data/app/models/shipit/hook.rb +86 -0
  59. data/app/models/shipit/membership.rb +8 -0
  60. data/app/models/shipit/missing_status.rb +21 -0
  61. data/app/models/shipit/output_chunk.rb +11 -0
  62. data/app/models/shipit/rollback.rb +31 -0
  63. data/app/models/shipit/stack.rb +308 -0
  64. data/app/models/shipit/status.rb +44 -0
  65. data/app/models/shipit/status_group.rb +35 -0
  66. data/app/models/shipit/task.rb +201 -0
  67. data/app/models/shipit/task_definition.rb +38 -0
  68. data/app/models/shipit/team.rb +69 -0
  69. data/app/models/shipit/unknown_status.rb +43 -0
  70. data/app/models/shipit/user.rb +83 -0
  71. data/app/models/shipit/variable_definition.rb +21 -0
  72. data/app/serializers/concerns/shipit/conditional_attributes.rb +22 -0
  73. data/app/serializers/shipit/anonymous_user_serializer.rb +4 -0
  74. data/app/serializers/shipit/commit_serializer.rb +8 -0
  75. data/app/serializers/shipit/deploy_serializer.rb +15 -0
  76. data/app/serializers/shipit/hook_serializer.rb +12 -0
  77. data/app/serializers/shipit/rollback_serializer.rb +7 -0
  78. data/app/serializers/shipit/short_commit_serializer.rb +9 -0
  79. data/app/serializers/shipit/stack_serializer.rb +33 -0
  80. data/app/serializers/shipit/tail_task_serializer.rb +39 -0
  81. data/app/serializers/shipit/task_serializer.rb +30 -0
  82. data/app/serializers/shipit/user_serializer.rb +5 -0
  83. data/app/views/{commits → shipit/commits}/_commit.html.erb +1 -1
  84. data/app/views/{commits → shipit/commits}/_commit_author.html.erb +0 -0
  85. data/app/views/{deploys → shipit/deploys}/_checklist.html.erb +0 -0
  86. data/app/views/{deploys → shipit/deploys}/_checks.html.erb +0 -0
  87. data/app/views/{deploys → shipit/deploys}/_concurrent_deploy_warning.html.erb +0 -0
  88. data/app/views/{deploys → shipit/deploys}/_deploy.html.erb +1 -1
  89. data/app/views/{deploys → shipit/deploys}/_monitoring.html.erb +0 -0
  90. data/app/views/{deploys → shipit/deploys}/_summary.html.erb +0 -0
  91. data/app/views/{deploys → shipit/deploys}/new.html.erb +3 -3
  92. data/app/views/{deploys → shipit/deploys}/rollback.html.erb +2 -2
  93. data/app/views/{deploys → shipit/deploys}/show.html.erb +1 -1
  94. data/app/views/{github_authentication → shipit/github_authentication}/failed.html.erb +0 -0
  95. data/app/views/{stacks → shipit/stacks}/_header.html.erb +0 -0
  96. data/app/views/{stacks → shipit/stacks}/index.html.erb +0 -0
  97. data/app/views/{stacks → shipit/stacks}/new.html.erb +0 -0
  98. data/app/views/{stacks → shipit/stacks}/settings.html.erb +1 -1
  99. data/app/views/{stacks → shipit/stacks}/show.html.erb +2 -2
  100. data/app/views/{statuses → shipit/statuses}/_group.html.erb +1 -1
  101. data/app/views/{statuses → shipit/statuses}/_status.html.erb +0 -0
  102. data/app/views/{tasks → shipit/tasks}/_task.html.erb +1 -1
  103. data/app/views/{tasks → shipit/tasks}/_task_output.html.erb +1 -1
  104. data/app/views/{tasks → shipit/tasks}/index.html.erb +1 -1
  105. data/app/views/{tasks → shipit/tasks}/new.html.erb +1 -1
  106. data/app/views/{tasks → shipit/tasks}/show.html.erb +1 -1
  107. data/db/migrate/20160104151742_increase_tasks_type_size_back.rb +5 -0
  108. data/db/migrate/20160104151833_convert_sti_columns.rb +10 -0
  109. data/lib/shipit.rb +11 -10
  110. data/lib/shipit/command.rb +171 -0
  111. data/lib/shipit/commands.rb +25 -0
  112. data/lib/shipit/deploy_commands.rb +21 -0
  113. data/lib/shipit/engine.rb +3 -0
  114. data/lib/shipit/rollback_commands.rb +7 -0
  115. data/lib/shipit/stack_commands.rb +60 -0
  116. data/lib/shipit/task_commands.rb +68 -0
  117. data/lib/shipit/version.rb +1 -1
  118. data/lib/tasks/cron.rake +3 -3
  119. data/test/controllers/api/base_controller_test.rb +18 -14
  120. data/test/controllers/api/deploys_controller_test.rb +56 -52
  121. data/test/controllers/api/hooks_controller_test.rb +62 -58
  122. data/test/controllers/api/locks_controller_test.rb +38 -34
  123. data/test/controllers/api/outputs_controller_test.rb +15 -11
  124. data/test/controllers/api/stacks_controller_test.rb +56 -52
  125. data/test/controllers/api/tasks_controller_test.rb +30 -26
  126. data/test/controllers/commit_checks_controller_test.rb +29 -27
  127. data/test/controllers/deploys_controller_test.rb +68 -66
  128. data/test/controllers/github_authentication_controller_test.rb +9 -7
  129. data/test/controllers/rollbacks_controller_test.rb +43 -41
  130. data/test/controllers/stacks_controller_test.rb +131 -128
  131. data/test/controllers/status_controller_test.rb +8 -6
  132. data/test/controllers/tasks_controller_test.rb +70 -68
  133. data/test/controllers/webhooks_controller_test.rb +127 -125
  134. data/test/dummy/db/development.sqlite3 +0 -0
  135. data/test/dummy/db/schema.rb +2 -2
  136. data/test/dummy/db/seeds.rb +133 -131
  137. data/test/dummy/db/test.sqlite3 +0 -0
  138. data/test/fixtures/{api_clients.yml → shipit/api_clients.yml} +0 -0
  139. data/test/fixtures/{commits.yml → shipit/commits.yml} +0 -0
  140. data/test/fixtures/{deliveries.yml → shipit/deliveries.yml} +0 -0
  141. data/test/fixtures/{github_hooks.yml → shipit/github_hooks.yml} +4 -4
  142. data/test/fixtures/{hooks.yml → shipit/hooks.yml} +0 -0
  143. data/test/fixtures/{memberships.yml → shipit/memberships.yml} +0 -0
  144. data/test/fixtures/{output_chunks.yml → shipit/output_chunks.yml} +0 -0
  145. data/test/fixtures/{stacks.yml → shipit/stacks.yml} +0 -0
  146. data/test/fixtures/{statuses.yml → shipit/statuses.yml} +0 -0
  147. data/test/fixtures/{tasks.yml → shipit/tasks.yml} +8 -8
  148. data/test/fixtures/{teams.yml → shipit/teams.yml} +0 -0
  149. data/test/fixtures/{users.yml → shipit/users.yml} +0 -0
  150. data/test/helpers/api_helper.rb +1 -1
  151. data/test/helpers/fixture_aliases_helper.rb +4 -4
  152. data/test/jobs/cache_deploy_spec_job_test.rb +15 -13
  153. data/test/jobs/chunk_rollup_job_test.rb +30 -28
  154. data/test/jobs/deliver_hook_job_test.rb +11 -9
  155. data/test/jobs/destroy_stack_job_test.rb +11 -9
  156. data/test/jobs/emit_event_job_test.rb +10 -8
  157. data/test/jobs/fetch_commit_stats_job_test.rb +10 -8
  158. data/test/jobs/fetch_deployed_revision_job_test.rb +24 -22
  159. data/test/jobs/github_sync_job_test.rb +51 -49
  160. data/test/jobs/perform_task_job_test.rb +78 -76
  161. data/test/jobs/refresh_github_user_job_test.rb +10 -8
  162. data/test/jobs/refresh_status_job_test.rb +14 -12
  163. data/test/jobs/unique_job_test.rb +18 -15
  164. data/test/models/api_client_test.rb +20 -18
  165. data/test/models/commit_checks_test.rb +63 -61
  166. data/test/models/commits_test.rb +317 -314
  167. data/test/models/delivery_test.rb +29 -27
  168. data/test/models/deploys_test.rb +289 -287
  169. data/test/models/github_hook_test.rb +45 -43
  170. data/test/models/hook_test.rb +44 -42
  171. data/test/models/membership_test.rb +9 -7
  172. data/test/models/missing_status_test.rb +16 -14
  173. data/test/models/output_chunk_test.rb +14 -12
  174. data/test/models/rollbacks_test.rb +14 -12
  175. data/test/models/stacks_test.rb +272 -270
  176. data/test/models/status_group_test.rb +18 -16
  177. data/test/models/status_test.rb +42 -40
  178. data/test/models/task_definitions_test.rb +27 -25
  179. data/test/models/team_test.rb +39 -37
  180. data/test/models/users_test.rb +61 -59
  181. data/test/unit/command_test.rb +43 -41
  182. data/test/unit/commands_test.rb +8 -6
  183. data/test/unit/csv_serializer_test.rb +28 -26
  184. data/test/unit/deploy_commands_test.rb +179 -176
  185. data/test/unit/deploy_spec_test.rb +237 -235
  186. data/test/unit/github_url_helper_test.rb +19 -17
  187. data/test/unit/shipit_test.rb +44 -42
  188. metadata +139 -137
  189. data/app/controllers/api/base_controller.rb +0 -66
  190. data/app/controllers/api/deploys_controller.rb +0 -15
  191. data/app/controllers/api/hooks_controller.rb +0 -51
  192. data/app/controllers/api/locks_controller.rb +0 -30
  193. data/app/controllers/api/outputs_controller.rb +0 -15
  194. data/app/controllers/api/stacks_controller.rb +0 -19
  195. data/app/controllers/api/tasks_controller.rb +0 -18
  196. data/app/controllers/commit_checks_controller.rb +0 -24
  197. data/app/controllers/concerns/api/cacheable.rb +0 -11
  198. data/app/controllers/concerns/api/rendering.rb +0 -23
  199. data/app/controllers/concerns/pagination.rb +0 -25
  200. data/app/controllers/deploys_controller.rb +0 -45
  201. data/app/controllers/github_authentication_controller.rb +0 -25
  202. data/app/controllers/rollbacks_controller.rb +0 -24
  203. data/app/controllers/shipit_controller.rb +0 -54
  204. data/app/controllers/stacks_controller.rb +0 -79
  205. data/app/controllers/status_controller.rb +0 -5
  206. data/app/controllers/tasks_controller.rb +0 -46
  207. data/app/controllers/webhooks_controller.rb +0 -99
  208. data/app/helpers/chunks_helper.rb +0 -6
  209. data/app/helpers/deploys_helper.rb +0 -26
  210. data/app/helpers/github_url_helper.rb +0 -46
  211. data/app/helpers/shipit_helper.rb +0 -62
  212. data/app/helpers/stacks_helper.rb +0 -76
  213. data/app/helpers/tasks_helper.rb +0 -9
  214. data/app/jobs/background_job.rb +0 -22
  215. data/app/jobs/background_job/unique.rb +0 -26
  216. data/app/jobs/cache_deploy_spec_job.rb +0 -10
  217. data/app/jobs/chunk_rollup_job.rb +0 -19
  218. data/app/jobs/clear_git_cache_job.rb +0 -7
  219. data/app/jobs/deliver_hook_job.rb +0 -7
  220. data/app/jobs/destroy_stack_job.rb +0 -7
  221. data/app/jobs/emit_event_job.rb +0 -8
  222. data/app/jobs/fetch_commit_stats_job.rb +0 -7
  223. data/app/jobs/fetch_deployed_revision_job.rb +0 -21
  224. data/app/jobs/git_mirror_update_job.rb +0 -10
  225. data/app/jobs/github_sync_job.rb +0 -53
  226. data/app/jobs/perform_commit_checks_job.rb +0 -5
  227. data/app/jobs/perform_task_job.rb +0 -55
  228. data/app/jobs/refresh_github_user_job.rb +0 -7
  229. data/app/jobs/refresh_statuses_job.rb +0 -12
  230. data/app/jobs/setup_github_hook_job.rb +0 -9
  231. data/app/models/anonymous_user.rb +0 -41
  232. data/app/models/api_client.rb +0 -42
  233. data/app/models/commit.rb +0 -207
  234. data/app/models/commit_checks.rb +0 -88
  235. data/app/models/delivery.rb +0 -45
  236. data/app/models/deploy.rb +0 -151
  237. data/app/models/deploy_spec.rb +0 -148
  238. data/app/models/deploy_spec/bundler_discovery.rb +0 -59
  239. data/app/models/deploy_spec/capistrano_discovery.rb +0 -27
  240. data/app/models/deploy_spec/file_system.rb +0 -62
  241. data/app/models/deploy_spec/pypi_discovery.rb +0 -32
  242. data/app/models/deploy_spec/rubygems_discovery.rb +0 -32
  243. data/app/models/github_hook.rb +0 -144
  244. data/app/models/hook.rb +0 -84
  245. data/app/models/membership.rb +0 -6
  246. data/app/models/missing_status.rb +0 -18
  247. data/app/models/output_chunk.rb +0 -9
  248. data/app/models/rollback.rb +0 -29
  249. data/app/models/stack.rb +0 -306
  250. data/app/models/status.rb +0 -42
  251. data/app/models/status_group.rb +0 -33
  252. data/app/models/task.rb +0 -197
  253. data/app/models/task_definition.rb +0 -36
  254. data/app/models/team.rb +0 -67
  255. data/app/models/unknown_status.rb +0 -41
  256. data/app/models/user.rb +0 -81
  257. data/app/models/variable_definition.rb +0 -19
  258. data/app/serializers/anonymous_user_serializer.rb +0 -2
  259. data/app/serializers/commit_serializer.rb +0 -6
  260. data/app/serializers/concerns/conditional_attributes.rb +0 -20
  261. data/app/serializers/deploy_serializer.rb +0 -13
  262. data/app/serializers/hook_serializer.rb +0 -10
  263. data/app/serializers/rollback_serializer.rb +0 -5
  264. data/app/serializers/short_commit_serializer.rb +0 -7
  265. data/app/serializers/stack_serializer.rb +0 -31
  266. data/app/serializers/tail_task_serializer.rb +0 -37
  267. data/app/serializers/task_serializer.rb +0 -28
  268. data/app/serializers/user_serializer.rb +0 -3
  269. data/lib/command.rb +0 -169
  270. data/lib/commands.rb +0 -23
  271. data/lib/deploy_commands.rb +0 -19
  272. data/lib/rollback_commands.rb +0 -5
  273. data/lib/stack_commands.rb +0 -58
  274. data/lib/task_commands.rb +0 -66
@@ -1,79 +0,0 @@
1
- class StacksController < ShipitController
2
- before_action :load_stack, only: %i(update destroy settings sync_webhooks clear_git_cache refresh)
3
-
4
- def new
5
- @stack = Stack.new
6
- end
7
-
8
- def index
9
- @user_stacks = current_user.stacks_contributed_to
10
-
11
- @stacks = Stack.order('(undeployed_commits_count > 0) desc', tasks_count: :desc).to_a
12
- end
13
-
14
- def show
15
- @stack = Stack.from_param!(params[:id])
16
- return if flash.empty? && !stale?(last_modified: @stack.updated_at)
17
-
18
- @tasks = @stack.tasks.order(id: :desc).preload(:since_commit, :until_commit, :user).limit(10)
19
- @commits = @stack.commits.reachable.preload(:author, :statuses).order(id: :desc)
20
- if deployed_commit = @stack.last_deployed_commit
21
- @commits = @commits.where('id > ?', deployed_commit.id)
22
- end
23
- @commits = @commits.to_a
24
- end
25
-
26
- def create
27
- @stack = Stack.create(create_params)
28
- respond_with(@stack)
29
- end
30
-
31
- def destroy
32
- @stack.schedule_for_destroy!
33
- redirect_to stacks_url
34
- end
35
-
36
- def settings
37
- end
38
-
39
- def refresh
40
- RefreshStatusesJob.perform_later(stack_id: @stack.id)
41
- GithubSyncJob.perform_later(stack_id: @stack.id)
42
- flash[:success] = 'Refresh scheduled'
43
- redirect_to :back
44
- end
45
-
46
- def update
47
- options = {}
48
- unless @stack.update(update_params)
49
- options = {flash: {warning: @stack.errors.full_messages.to_sentence}}
50
- end
51
- redirect_to(params[:return_to].presence || stack_settings_path(@stack), options)
52
- end
53
-
54
- def sync_webhooks
55
- @stack.setup_hooks
56
- redirect_to stack_settings_path(@stack)
57
- end
58
-
59
- def clear_git_cache
60
- ClearGitCacheJob.perform_later(@stack)
61
- redirect_to stack_settings_path(@stack)
62
- end
63
-
64
- private
65
-
66
- def load_stack
67
- @stack = Stack.from_param!(params[:id])
68
- end
69
-
70
- def create_params
71
- params.require(:stack).permit(:repo_name, :repo_owner, :environment, :branch, :deploy_url, :ignore_ci)
72
- end
73
-
74
- def update_params
75
- params.require(:stack).permit(:deploy_url, :lock_reason, :continuous_deployment, :ignore_ci).tap do |params|
76
- params[:lock_author_id] = params[:lock_reason].present? ? current_user.id : nil
77
- end
78
- end
79
- end
@@ -1,5 +0,0 @@
1
- class StatusController < ActionController::Base
2
- def version
3
- render text: Shipit.revision
4
- end
5
- end
@@ -1,46 +0,0 @@
1
- class TasksController < ShipitController
2
- include Pagination
3
-
4
- before_action :stack
5
-
6
- self.default_page_size = 20
7
-
8
- def index
9
- paginator = paginate(stack.tasks)
10
- @tasks = paginator.to_a
11
- @links = paginator.links
12
- end
13
-
14
- def new
15
- @definition = stack.find_task_definition(params[:definition_id])
16
- @task = stack.tasks.build(definition: @definition)
17
- end
18
-
19
- def show
20
- task
21
- end
22
-
23
- def create
24
- @task = stack.trigger_task(params[:definition_id], current_user)
25
- redirect_to [stack, @task]
26
- end
27
-
28
- def abort
29
- task.abort!(rollback_once_aborted: params[:rollback].present?)
30
- head :ok
31
- end
32
-
33
- def tail
34
- render json: TailTaskSerializer.new(task, context: params)
35
- end
36
-
37
- private
38
-
39
- def task
40
- @task ||= stack.tasks.find(params[:id])
41
- end
42
-
43
- def stack
44
- @stack ||= Stack.from_param!(params[:stack_id])
45
- end
46
- end
@@ -1,99 +0,0 @@
1
- class WebhooksController < ActionController::Base
2
- before_action :check_if_ping, :verify_signature
3
-
4
- respond_to :json
5
-
6
- def push
7
- branch = params['ref'].gsub('refs/heads/', '')
8
-
9
- if branch == stack.branch
10
- GithubSyncJob.perform_later(stack_id: stack.id)
11
- GitMirrorUpdateJob.perform_later(stack)
12
- end
13
-
14
- head :ok
15
- end
16
-
17
- def state
18
- branches = params[:branches] || []
19
- if branches.find { |branch| branch[:name] == stack.branch }
20
- commit = stack.commits.find_by_sha!(params[:sha])
21
- commit.add_status(params.permit(:state, :description, :target_url, :context, :created_at))
22
- end
23
- head :ok
24
- end
25
-
26
- params do
27
- requires :team do
28
- requires :id, Integer
29
- requires :name, String
30
- requires :slug, String
31
- requires :url, String
32
- end
33
- requires :organization do
34
- requires :login, String
35
- end
36
- requires :member do
37
- requires :login, String
38
- end
39
- end
40
- def membership
41
- team = find_or_create_team!
42
- member = User.find_or_create_by_login!(params.member.login)
43
-
44
- case membership_action
45
- when 'added'
46
- team.add_member(member)
47
- when 'removed'
48
- team.members.delete(member)
49
- else
50
- raise ArgumentError, "Don't know how to perform action: `#{params.action.inspect}`"
51
- end
52
- head :ok
53
- end
54
-
55
- def index
56
- render text: "working"
57
- end
58
-
59
- private
60
-
61
- def find_or_create_team!
62
- Team.find_or_create_by!(github_id: params.team.id) do |team|
63
- team.github_team = params.team
64
- team.organization = params.organization.login
65
- team.automatically_setup_hooks = true
66
- end
67
- end
68
-
69
- def verify_signature
70
- request.body.rewind
71
- head(422) unless webhook.verify_signature(request.headers['X-Hub-Signature'], request.body.read)
72
- end
73
-
74
- def check_if_ping
75
- head :ok if event == 'ping'
76
- end
77
-
78
- def webhook
79
- @webhook ||= if params[:stack_id]
80
- stack.github_hooks.find_by!(event: event)
81
- else
82
- GithubHook::Organization.find_by!(organization: params.organization.login, event: event)
83
- end
84
- end
85
-
86
- def event
87
- request.headers['X-Github-Event'] || action_name
88
- end
89
-
90
- def membership_action
91
- # GitHub send an `action` parameter that is shadowed by Rails url parameters
92
- # It's also impossible to pass an `action` parameters from a test case.
93
- request.request_parameters['action'] || params[:_action]
94
- end
95
-
96
- def stack
97
- @stack ||= Stack.find(params[:stack_id])
98
- end
99
- end
@@ -1,6 +0,0 @@
1
- module ChunksHelper
2
- def next_chunks_url(task)
3
- return if task.finished?
4
- tail_stack_task_path(task.stack, task, last_id: task.chunks.last)
5
- end
6
- end
@@ -1,26 +0,0 @@
1
- module DeploysHelper
2
- def render_checklist(checklist)
3
- return if checklist.blank?
4
- render 'deploys/checklist', checklist: checklist
5
- end
6
-
7
- def render_monitoring(stack)
8
- return unless stack.monitoring?
9
- render 'deploys/monitoring', stack: stack
10
- end
11
-
12
- def render_checks(commit)
13
- return unless commit.stack.checks?
14
- render 'deploys/checks', commit: commit
15
- end
16
-
17
- def render_monitoring_panel(panel_spec)
18
- if url = panel_spec['image']
19
- image_tag(url, panel_spec.slice('height', 'width', 'alt'))
20
- elsif url = panel_spec['iframe']
21
- content_tag(:iframe, '', panel_spec.slice('height', 'width').merge('src' => url))
22
- else
23
- content_tag(:span, "#{panel_spec.inspect} is not a valid monitoring panel spec")
24
- end
25
- end
26
- end
@@ -1,46 +0,0 @@
1
- module GithubUrlHelper
2
- def github_avatar(user, options = {})
3
- uri = user.avatar_uri
4
- attributes = options.slice(:class).merge(alt: user.try!(:name))
5
- if options[:size]
6
- uri.query ||= ''
7
- uri.query += "&s=#{options[:size]}"
8
- attributes[:width] = options[:size]
9
- attributes[:height] = options[:size]
10
- end
11
-
12
- image_tag(uri.to_s, attributes)
13
- end
14
-
15
- def github_commit_range_url(stack, since_commit, until_commit)
16
- github_repo_url(stack.repo_owner, stack.repo_name, 'compare', "#{since_commit.sha}...#{until_commit.sha}")
17
- end
18
-
19
- def github_user_url(user, *args)
20
- [Shipit.github_url, user, *args].join('/')
21
- end
22
-
23
- def render_github_user(user)
24
- link_to(github_user_url(user.login), class: 'user main-user') do
25
- github_avatar(user, size: 20) + user.name
26
- end
27
- end
28
-
29
- def github_repo_url(owner, repo, *args)
30
- github_user_url(owner, repo, *args)
31
- end
32
-
33
- def github_commit_url(commit)
34
- github_repo_url(commit.stack.repo_owner, commit.stack.repo_name, 'commit', commit.sha)
35
- end
36
-
37
- def github_diff_url(owner, repo, from_sha, to_sha)
38
- github_repo_url(owner, repo, 'compare', "#{from_sha}...#{to_sha}")
39
- end
40
-
41
- def link_to_github_deploy(deploy)
42
- url = github_commit_range_url(deploy.stack, *deploy.commit_range)
43
- text = deploy.commit_range.map(&:short_sha).join('...')
44
- link_to(text, url, class: 'number')
45
- end
46
- end
@@ -1,62 +0,0 @@
1
- module ShipitHelper
2
- def include_plugins(stack)
3
- stack.plugins.flat_map do |plugin, config|
4
- plugin_tags(plugin, config)
5
- end.join.html_safe
6
- end
7
-
8
- def plugin_tags(plugin, config)
9
- tags = []
10
- tags << tag('meta', name: "#{plugin}-config", content: config.to_json) if config
11
- tags << javascript_include_tag("plugins/#{plugin}")
12
- tags << stylesheet_link_tag("plugins/#{plugin}")
13
- tags
14
- end
15
-
16
- def missing_github_oauth_message
17
- (<<-MESSAGE).html_safe
18
- Shipit requires a GitHub application to authenticate users.
19
- If you haven't created an application on GitHub yet, you can do so in the
20
- #{link_to 'Settings', Shipit.github_url('/settings/applications/new'), target: '_blank'}
21
- section of your profile. You can also create applications for organizations.
22
- MESSAGE
23
- end
24
-
25
- def missing_github_oauth_id_message
26
- (<<-MESSAGE).html_safe
27
- Copy the Client ID from your GitHub application,
28
- and paste it into the secrets.yml file under <code>github_oauth.id</code>.
29
- MESSAGE
30
- end
31
-
32
- def missing_github_oauth_secret_message
33
- (<<-MESSAGE).html_safe
34
- Copy the Client Secret from your GitHub application,
35
- and paste it into the secrets.yml file under <code>github_oauth.secret</code>.
36
- MESSAGE
37
- end
38
-
39
- def missing_github_api_credentials_message
40
- (<<-MESSAGE).html_safe
41
- Shipit needs API access to GitHub. You can
42
- #{link_to 'create an access token', Shipit.github_url('/settings/tokens'), target: '_blank'}
43
- with the following permissions:
44
- <code>admin:repo_hook</code>, <code>admin:org_hook</code> and <code>repo</code>
45
- and add it to the secrets.yml file under the key <code>github_api.access_token</code>.
46
- MESSAGE
47
- end
48
-
49
- def missing_redis_url_message
50
- (<<-MESSAGE).html_safe
51
- Shipit needs a Redis server. Please configure the Redis URL in the secrets.yml file of your app,
52
- under the key <code>redis_url</code>.
53
- MESSAGE
54
- end
55
-
56
- def missing_host_message
57
- (<<-MESSAGE).html_safe
58
- Shipit needs the host of the application before generating links in background jobs.
59
- Add the host name to the secrets.yml file, under the <code>host</code> key.
60
- MESSAGE
61
- end
62
- end
@@ -1,76 +0,0 @@
1
- module StacksHelper
2
- COMMIT_TITLE_LENGTH = 79
3
-
4
- def redeploy_button(commit)
5
- url = new_stack_deploy_path(@stack, sha: commit.sha)
6
- classes = %W(btn btn--primary deploy-action #{commit.state})
7
-
8
- unless commit.stack.deployable?
9
- classes.push(ignore_lock? ? 'btn--warning' : 'btn--disabled')
10
- end
11
-
12
- caption = 'Redeploy'
13
- caption = 'Locked' if commit.stack.locked? && !ignore_lock?
14
- caption = 'Deploy in progress...' if commit.stack.deploying?
15
-
16
- link_to(caption, url, class: classes)
17
- end
18
-
19
- def ignore_lock?
20
- params[:force].present?
21
- end
22
-
23
- def deploy_button(commit)
24
- url = new_stack_deploy_path(@stack, sha: commit.sha)
25
- classes = %W(btn btn--primary deploy-action #{commit.state})
26
- if deploy_button_disabled?(commit)
27
- classes.push(params[:force].present? ? 'btn--warning' : 'btn--disabled')
28
- end
29
-
30
- link_to(deploy_button_caption(commit), url, class: classes)
31
- end
32
-
33
- def github_change_url(commit)
34
- commit.pull_request_url || github_commit_url(commit)
35
- end
36
-
37
- def render_commit_message(commit)
38
- message = commit.pull_request_title || commit.message
39
- content_tag(:span, message.truncate(COMMIT_TITLE_LENGTH), class: 'event-message')
40
- end
41
-
42
- def render_commit_message_with_link(commit)
43
- link_to(render_commit_message(commit), github_change_url(commit), target: '_blank')
44
- end
45
-
46
- def render_commit_id_link(commit)
47
- if commit.pull_request?
48
- pull_request_link(commit) + "&nbsp;(#{render_raw_commit_id_link(commit)})".html_safe
49
- else
50
- render_raw_commit_id_link(commit)
51
- end
52
- end
53
-
54
- def pull_request_link(commit)
55
- link_to("##{commit.pull_request_id}", commit.pull_request_url, target: '_blank', class: 'number')
56
- end
57
-
58
- def render_raw_commit_id_link(commit)
59
- link_to(commit.short_sha, github_commit_url(commit), target: '_blank', class: 'number')
60
- end
61
-
62
- private
63
-
64
- def deploy_button_disabled?(commit)
65
- !commit.deployable? || !commit.stack.deployable?
66
- end
67
-
68
- def deploy_button_caption(commit)
69
- state = commit.status.state
70
- state = 'locked' if commit.stack.locked? && !ignore_lock?
71
- if commit.deployable?
72
- state = commit.stack.deploying? ? 'deploying' : 'enabled'
73
- end
74
- t("deploy_button.caption.#{state}")
75
- end
76
- end