shipit-engine 0.32.0 → 0.35.1
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.
- checksums.yaml +4 -4
- data/README.md +13 -2
- data/app/assets/images/magic-solid.svg +1 -0
- data/app/assets/javascripts/shipit/repositories_search.js.coffee +60 -0
- data/app/assets/javascripts/shipit/{search.js.coffee → stack_search.js.coffee} +0 -0
- data/app/assets/stylesheets/_pages/_deploy.scss +2 -3
- data/app/assets/stylesheets/_pages/_repositories.scss +148 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +19 -0
- data/app/assets/stylesheets/shipit.scss +1 -0
- data/app/controllers/shipit/api/ccmenu_controller.rb +1 -1
- data/app/controllers/shipit/api/deploys_controller.rb +2 -0
- data/app/controllers/shipit/api/{pull_requests_controller.rb → merge_requests_controller.rb} +8 -8
- data/app/controllers/shipit/api/rollbacks_controller.rb +2 -1
- data/app/controllers/shipit/api/stacks_controller.rb +15 -1
- data/app/controllers/shipit/deploys_controller.rb +1 -1
- data/app/controllers/shipit/merge_requests_controller.rb +31 -0
- data/app/controllers/shipit/merge_status_controller.rb +15 -15
- data/app/controllers/shipit/repositories_controller.rb +74 -0
- data/app/controllers/shipit/stacks_controller.rb +2 -2
- data/app/controllers/shipit/tasks_controller.rb +2 -2
- data/app/controllers/shipit/webhooks_controller.rb +23 -4
- data/app/helpers/shipit/chunks_helper.rb +2 -2
- data/app/helpers/shipit/github_url_helper.rb +8 -0
- data/app/helpers/shipit/shipit_helper.rb +0 -1
- data/app/helpers/shipit/stacks_helper.rb +4 -0
- data/app/jobs/shipit/create_on_github_job.rb +1 -0
- data/app/jobs/shipit/deliver_hook_job.rb +1 -1
- data/app/jobs/shipit/destroy_repository_job.rb +24 -0
- data/app/jobs/shipit/destroy_stack_job.rb +2 -2
- data/app/jobs/shipit/github_sync_job.rb +13 -9
- data/app/jobs/shipit/perform_task_job.rb +4 -98
- data/app/jobs/shipit/process_merge_requests_job.rb +32 -0
- data/app/jobs/shipit/refresh_merge_request_job.rb +11 -0
- data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +1 -1
- data/app/models/shipit/anonymous_user.rb +10 -2
- data/app/models/shipit/check_run.rb +38 -2
- data/app/models/shipit/command_line_user.rb +4 -0
- data/app/models/shipit/commit.rb +31 -20
- data/app/models/shipit/commit_checks.rb +14 -13
- data/app/models/shipit/commit_deployment.rb +3 -3
- data/app/models/shipit/commit_deployment_status.rb +3 -3
- data/app/models/shipit/deploy.rb +17 -11
- data/app/models/shipit/deploy_spec/file_system.rb +11 -5
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +12 -4
- data/app/models/shipit/deploy_spec.rb +16 -4
- data/app/models/shipit/duration.rb +2 -0
- data/app/models/shipit/hook.rb +28 -2
- data/app/models/shipit/merge_request.rb +304 -0
- data/app/models/shipit/provisioning_handler/base.rb +30 -0
- data/app/models/shipit/provisioning_handler/unregistered_provisioning_handler.rb +35 -0
- data/app/models/shipit/provisioning_handler.rb +32 -0
- data/app/models/shipit/pull_request.rb +26 -265
- data/app/models/shipit/pull_request_assignment.rb +10 -0
- data/app/models/shipit/release_status.rb +1 -1
- data/app/models/shipit/repository.rb +63 -3
- data/app/models/shipit/review_stack.rb +130 -0
- data/app/models/shipit/review_stack_provisioning_queue.rb +39 -0
- data/app/models/shipit/rollback.rb +5 -0
- data/app/models/shipit/stack.rb +78 -30
- data/app/models/shipit/status/group.rb +1 -1
- data/app/models/shipit/task.rb +62 -9
- data/app/models/shipit/task_execution_strategy/base.rb +20 -0
- data/app/models/shipit/task_execution_strategy/default.rb +109 -0
- data/app/models/shipit/team.rb +4 -2
- data/app/models/shipit/user.rb +10 -1
- data/app/models/shipit/webhooks/handlers/pull_request/assigned_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/closed_handler.rb +68 -0
- data/app/models/shipit/webhooks/handlers/pull_request/edited_handler.rb +74 -0
- data/app/models/shipit/webhooks/handlers/pull_request/label_capturing_handler.rb +127 -0
- data/app/models/shipit/webhooks/handlers/pull_request/labeled_handler.rb +106 -0
- data/app/models/shipit/webhooks/handlers/pull_request/opened_handler.rb +83 -0
- data/app/models/shipit/webhooks/handlers/pull_request/reopened_handler.rb +88 -0
- data/app/models/shipit/webhooks/handlers/pull_request/review_stack_adapter.rb +103 -0
- data/app/models/shipit/webhooks/handlers/pull_request/unlabeled_handler.rb +107 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +4 -1
- data/app/models/shipit/webhooks.rb +10 -0
- data/app/serializers/shipit/deploy_serializer.rb +6 -0
- data/app/serializers/shipit/merge_request_serializer.rb +21 -0
- data/app/serializers/shipit/pull_request_serializer.rb +5 -8
- data/app/serializers/shipit/review_stack_serializer.rb +7 -0
- data/app/serializers/shipit/stack_serializer.rb +7 -6
- data/app/serializers/shipit/tail_task_serializer.rb +10 -2
- data/app/serializers/shipit/task_serializer.rb +1 -1
- data/app/validators/subset_validator.rb +1 -1
- data/app/views/layouts/merge_status.html.erb +1 -1
- data/app/views/shipit/merge_requests/_merge_request.html.erb +29 -0
- data/app/views/shipit/{pull_requests → merge_requests}/index.html.erb +2 -2
- data/app/views/shipit/merge_requests/merge_requests/_pull_request.html.erb +29 -0
- data/app/views/shipit/merge_requests/merge_requests/index.html.erb +20 -0
- data/app/views/shipit/merge_status/_merge_queue_button.html.erb +3 -3
- data/app/views/shipit/merge_status/backlogged.html.erb +1 -1
- data/app/views/shipit/merge_status/failure.html.erb +1 -1
- data/app/views/shipit/merge_status/locked.html.erb +1 -1
- data/app/views/shipit/merge_status/success.html.erb +2 -2
- data/app/views/shipit/repositories/_header.html.erb +19 -0
- data/app/views/shipit/repositories/index.html.erb +31 -0
- data/app/views/shipit/repositories/new.html.erb +23 -0
- data/app/views/shipit/repositories/settings.html.erb +53 -0
- data/app/views/shipit/repositories/show.html.erb +30 -0
- data/app/views/shipit/stacks/_banners.html.erb +15 -1
- data/app/views/shipit/stacks/_header.html.erb +5 -2
- data/app/views/shipit/stacks/_stack.html.erb +8 -0
- data/app/views/shipit/stacks/index.html.erb +2 -1
- data/app/views/shipit/stacks/new.html.erb +1 -1
- data/app/views/shipit/stacks/settings.html.erb +5 -5
- data/app/views/shipit/stacks/show.html.erb +1 -1
- data/app/views/shipit/tasks/_task_output.html.erb +1 -1
- data/config/routes.rb +15 -5
- data/config/secrets.development.example.yml +24 -0
- data/config/secrets.development.shopify.yml +20 -9
- data/db/migrate/20200706145406_add_review_stacks.rb +12 -0
- data/db/migrate/20200804144639_rename_pull_request_to_merge_request.rb +7 -0
- data/db/migrate/20200804161512_rename_commits_pull_request_id_to_merge_request_id.rb +5 -0
- data/db/migrate/20200813134712_recreate_shipit_pull_requests.rb +22 -0
- data/db/migrate/20200813194056_create_pull_request_assignments.rb +8 -0
- data/db/migrate/20201001125502_add_provision_pr_stacks_flag_to_repositories.rb +7 -0
- data/db/migrate/20201008145809_add_retry_attempt_to_tasks.rb +5 -0
- data/db/migrate/20201008152744_add_max_retries_to_tasks.rb +5 -0
- data/db/migrate/20210325194053_remove_stacks_branch_default.rb +5 -0
- data/db/migrate/20210504200438_add_github_updated_at_to_check_runs.rb +5 -0
- data/db/migrate/20210823075617_change_check_runs_github_updated_at_default.rb +5 -0
- data/lib/shipit/command.rb +7 -6
- data/lib/shipit/commands.rb +18 -5
- data/lib/shipit/engine.rb +2 -0
- data/lib/shipit/flock.rb +8 -1
- data/lib/shipit/github_app.rb +8 -6
- data/lib/shipit/octokit_iterator.rb +3 -3
- data/lib/shipit/review_stack_commands.rb +8 -0
- data/lib/shipit/simple_message_verifier.rb +2 -2
- data/lib/shipit/stack_commands.rb +36 -7
- data/lib/shipit/task_commands.rb +8 -1
- data/lib/shipit/version.rb +1 -1
- data/lib/shipit.rb +50 -16
- data/lib/snippets/publish-lerna-independent-packages +35 -34
- data/lib/snippets/publish-lerna-independent-packages-legacy +39 -0
- data/lib/tasks/cron.rake +11 -2
- data/test/controllers/api/ccmenu_controller_test.rb +1 -1
- data/test/controllers/api/deploys_controller_test.rb +17 -0
- data/test/controllers/api/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +12 -12
- data/test/controllers/api/outputs_controller_test.rb +1 -0
- data/test/controllers/api/rollback_controller_test.rb +1 -1
- data/test/controllers/api/stacks_controller_test.rb +42 -8
- data/test/controllers/{pull_requests_controller_test.rb → merge_requests_controller_test.rb} +6 -6
- data/test/controllers/repositories_controller_test.rb +71 -0
- data/test/controllers/stacks_controller_test.rb +9 -1
- data/test/controllers/tasks_controller_test.rb +14 -2
- data/test/controllers/webhooks_controller_test.rb +27 -12
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/config/application.rb +7 -2
- data/test/dummy/config/database.yml +9 -0
- data/test/dummy/config/environments/development.rb +1 -4
- data/test/dummy/config/environments/test.rb +0 -5
- data/test/dummy/config/secrets_double_github_app.yml +79 -0
- data/test/dummy/db/schema.rb +56 -17
- data/test/dummy/db/seeds.rb +2 -1
- data/test/fixtures/payloads/check_suite_master.json +4 -32
- data/test/fixtures/payloads/invalid_pull_request.json +117 -0
- data/test/fixtures/payloads/provision_disabled_pull_request.json +454 -0
- data/test/fixtures/payloads/pull_request_assigned.json +480 -0
- data/test/fixtures/payloads/pull_request_closed.json +454 -0
- data/test/fixtures/payloads/pull_request_labeled.json +461 -0
- data/test/fixtures/payloads/pull_request_opened.json +454 -0
- data/test/fixtures/payloads/pull_request_reopened.json +454 -0
- data/test/fixtures/payloads/pull_request_unlabeled.json +454 -0
- data/test/fixtures/payloads/pull_request_with_no_repo.json +454 -0
- data/test/fixtures/payloads/push_master.json +1 -1
- data/test/fixtures/payloads/push_not_master.json +1 -1
- data/test/fixtures/shipit/commits.yml +17 -4
- data/test/fixtures/shipit/hooks.yml +1 -0
- data/test/fixtures/shipit/merge_requests.yml +141 -0
- data/test/fixtures/shipit/pull_request_assignments.yml +3 -0
- data/test/fixtures/shipit/pull_requests.yml +10 -131
- data/test/fixtures/shipit/repositories.yml +1 -0
- data/test/fixtures/shipit/stacks.yml +145 -0
- data/test/fixtures/shipit/statuses.yml +9 -0
- data/test/fixtures/shipit/tasks.yml +4 -1
- data/test/fixtures/shipit/users.yml +7 -0
- data/test/helpers/json_helper.rb +5 -1
- data/test/helpers/payloads_helper.rb +4 -0
- data/test/jobs/chunk_rollup_job_test.rb +15 -1
- data/test/jobs/destroy_repository_job_test.rb +27 -0
- data/test/jobs/github_sync_job_test.rb +2 -1
- data/test/jobs/perform_task_job_test.rb +8 -8
- data/test/jobs/{merge_pull_requests_job_test.rb → process_merge_requests_job_test.rb} +18 -18
- data/test/lib/shipit/deploy_commands_test.rb +16 -0
- data/test/lib/shipit/task_commands_test.rb +17 -0
- data/test/models/commit_deployment_status_test.rb +3 -3
- data/test/models/commits_test.rb +24 -13
- data/test/models/deploy_spec_test.rb +64 -24
- data/test/models/deploys_test.rb +188 -14
- data/test/models/hook_test.rb +30 -1
- data/test/models/{pull_request_test.rb → merge_request_test.rb} +49 -34
- data/test/models/pull_request_assignment_test.rb +16 -0
- data/test/models/shipit/check_run_test.rb +124 -5
- data/test/models/shipit/provisioning_handler/base_test.rb +33 -0
- data/test/models/shipit/provisioning_handler/unregistered_provisioning_handler_test.rb +49 -0
- data/test/models/shipit/provisioning_handler_test.rb +64 -0
- data/test/models/shipit/pull_request_test.rb +52 -0
- data/test/models/shipit/repository_test.rb +5 -1
- data/test/models/shipit/review_stack_provision_status_test.rb +77 -0
- data/test/models/shipit/review_stack_provisioning_queue_test.rb +63 -0
- data/test/models/shipit/review_stack_test.rb +91 -0
- data/test/models/{stacks_test.rb → shipit/stacks_test.rb} +52 -8
- data/test/models/shipit/webhooks/handlers/pull_request/assigned_handler_test.rb +45 -0
- data/test/models/shipit/webhooks/handlers/pull_request/closed_handler_test.rb +192 -0
- data/test/models/shipit/webhooks/handlers/pull_request/edited_handler_test.rb +47 -0
- data/test/models/shipit/webhooks/handlers/pull_request/label_capturing_handler_test.rb +209 -0
- data/test/models/shipit/webhooks/handlers/pull_request/labeled_handler_test.rb +332 -0
- data/test/models/shipit/webhooks/handlers/pull_request/opened_handler_test.rb +238 -0
- data/test/models/shipit/webhooks/handlers/pull_request/reopened_handler_test.rb +282 -0
- data/test/models/shipit/webhooks/handlers/pull_request/review_stack_adapter_test.rb +107 -0
- data/test/models/shipit/webhooks/handlers/pull_request/unlabeled_handler_test.rb +324 -0
- data/test/models/shipit/{wehbooks → webhooks}/handlers_test.rb +0 -0
- data/test/models/tasks_test.rb +66 -3
- data/test/serializers/shipit/pull_request_serializer_test.rb +29 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/anonymous_user_serializer_test.rb +1 -1
- data/test/unit/command_test.rb +8 -3
- data/test/unit/commit_serializer_test.rb +1 -1
- data/test/unit/deploy_commands_test.rb +73 -17
- data/test/unit/deploy_serializer_test.rb +1 -1
- data/test/unit/github_app_test.rb +2 -3
- data/test/unit/github_apps_test.rb +416 -0
- data/test/unit/github_url_helper_test.rb +5 -0
- data/test/unit/shipit_deployment_checks_test.rb +77 -0
- data/test/unit/shipit_task_execution_strategy_test.rb +47 -0
- data/test/unit/shipit_test.rb +14 -0
- data/test/unit/user_serializer_test.rb +1 -1
- metadata +306 -188
- data/app/controllers/shipit/pull_requests_controller.rb +0 -31
- data/app/jobs/shipit/merge_pull_requests_job.rb +0 -32
- data/app/jobs/shipit/refresh_pull_request_job.rb +0 -11
- data/app/views/shipit/pull_requests/_pull_request.html.erb +0 -29
- data/test/fixtures/shipit/output_chunks.yml +0 -47
- data/test/models/output_chunk_test.rb +0 -21
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<li class="pr" id="pr-<%= merge_request.id %>">
|
|
2
|
+
<%= render 'shipit/shared/author', author: merge_request.merge_requested_by %>
|
|
3
|
+
<div class="pr-details">
|
|
4
|
+
<span class="pr-number">
|
|
5
|
+
<%= pull_request_link(merge_request) %>
|
|
6
|
+
</span>
|
|
7
|
+
<span class="pr-title">
|
|
8
|
+
<%= render_pull_request_title_with_link merge_request %>
|
|
9
|
+
</span>
|
|
10
|
+
<p class="pr-meta">
|
|
11
|
+
<span class="code-additions">+<%= merge_request.additions %></span>
|
|
12
|
+
<span class="code-deletions">-<%= merge_request.deletions %></span>
|
|
13
|
+
</p>
|
|
14
|
+
<p class="pr-meta">
|
|
15
|
+
Enqueued <%= timeago_tag(merge_request.merge_requested_at, force: true) %>
|
|
16
|
+
<% if merge_request.revalidating? %>
|
|
17
|
+
<em class="warning">Need revalidation.</em>
|
|
18
|
+
<% end %>
|
|
19
|
+
</p>
|
|
20
|
+
</div>
|
|
21
|
+
<% if merge_request.revalidating? %>
|
|
22
|
+
<div class="commit-actions">
|
|
23
|
+
<%= button_to 'Confirm', stack_merge_requests_path(merge_request.stack, number_or_url: merge_request.number), class: 'btn btn--warning', method: 'post' %>
|
|
24
|
+
</div>
|
|
25
|
+
<% end %>
|
|
26
|
+
<div class="commit-actions">
|
|
27
|
+
<%= button_to 'Cancel', stack_merge_request_path(merge_request.stack, merge_request), class: 'btn btn--warning', method: 'delete' %>
|
|
28
|
+
</div>
|
|
29
|
+
</li>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<% subscribe events_path(channels: ["stack.#{@stack.id}"]), '.pr-list', '.header' %>
|
|
2
|
+
|
|
3
|
+
<%= render partial: 'shipit/stacks/header', locals: { stack: @stack } %>
|
|
4
|
+
|
|
5
|
+
<div class="wrapper">
|
|
6
|
+
<section>
|
|
7
|
+
<header class="section-header">
|
|
8
|
+
<%= form_tag stack_merge_requests_path(@stack) do %>
|
|
9
|
+
<div class="field-wrapper inline">
|
|
10
|
+
<%= text_field_tag :number_or_url, '', placeholder: 'PR number or URL' %>
|
|
11
|
+
<%= submit_tag 'Request merge', class: 'btn' %>
|
|
12
|
+
</div>
|
|
13
|
+
<% end %>
|
|
14
|
+
</header>
|
|
15
|
+
|
|
16
|
+
<ul class="pr-list">
|
|
17
|
+
<%= render @merge_requests %>
|
|
18
|
+
</ul>
|
|
19
|
+
</section>
|
|
20
|
+
</div>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<% classes = 'branch-action-btn float-right js-immediate-updates js-handle-pull-merging-errors' %>
|
|
2
|
-
<% if
|
|
3
|
-
<%= form_tag
|
|
2
|
+
<% if merge_request.try!(&:waiting?) %>
|
|
3
|
+
<%= form_tag dequeue_merge_request_path(stack, pull_request_number), method: 'delete', class: classes, data: {remote: true} do %>
|
|
4
4
|
<%= hidden_field_tag 'referrer', params[:referrer] %>
|
|
5
5
|
<button type="submit" data-disable-with="Removing from merge queue…" class="btn">
|
|
6
6
|
Remove from merge queue
|
|
7
7
|
</button>
|
|
8
8
|
<% end %>
|
|
9
9
|
<% else %>
|
|
10
|
-
<%= form_tag
|
|
10
|
+
<%= form_tag enqueue_merge_request_path(stack, pull_request_number), method: 'put', class: classes, data: {remote: true} do %>
|
|
11
11
|
<%= hidden_field_tag 'referrer', params[:referrer] %>
|
|
12
12
|
<button type="submit" data-disable-with="Adding to merge queue…" class="btn btn-primary">
|
|
13
13
|
Add to merge queue
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
</div>
|
|
6
6
|
|
|
7
7
|
<h4 class="status-heading">
|
|
8
|
-
<% if
|
|
9
|
-
<% if
|
|
8
|
+
<% if merge_request.waiting? %>
|
|
9
|
+
<% if merge_request.all_status_checks_passed? %>
|
|
10
10
|
Will be merged shortly!
|
|
11
11
|
<% else %>
|
|
12
12
|
Will be merged when required checks are passing.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<% content_for :page_title do %>
|
|
2
|
+
<span><%= repository.owner %></span>
|
|
3
|
+
<h1><%= repository.name %></h1>
|
|
4
|
+
<% end %>
|
|
5
|
+
|
|
6
|
+
<% content_for :primary_navigation do %>
|
|
7
|
+
<%= link_to 'Add a stack', repository_stacks_new_path(repository), class: 'btn secondary' %>
|
|
8
|
+
<% end %>
|
|
9
|
+
|
|
10
|
+
<% content_for :secondary_navigation do %>
|
|
11
|
+
<ul class="nav__list nav__list--primary">
|
|
12
|
+
<li class="nav__list__item">
|
|
13
|
+
<%= link_to 'Stacks', repository_path(repository) %>
|
|
14
|
+
</li>
|
|
15
|
+
<li class="nav__list__item">
|
|
16
|
+
<%= link_to 'Settings', repository_settings_path(repository) %>
|
|
17
|
+
</li>
|
|
18
|
+
</ul>
|
|
19
|
+
<% end %>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<% content_for :page_title do %>
|
|
2
|
+
<h1>Repositories</h1>
|
|
3
|
+
<% end %>
|
|
4
|
+
<% content_for :primary_navigation do %>
|
|
5
|
+
<%= link_to 'Add a repository', new_repository_path, class: 'btn secondary' %>
|
|
6
|
+
<% end %>
|
|
7
|
+
|
|
8
|
+
<div class="wrapper <%= 'filtering-enabled' if @repositories.size > 10 %>">
|
|
9
|
+
<section>
|
|
10
|
+
<header class="section-header repository-search-header">
|
|
11
|
+
<input class="repository-search" placeholder="Search <%= @repositories.size %> repositories" />
|
|
12
|
+
</header>
|
|
13
|
+
<ul class="repository-table-header">
|
|
14
|
+
<li class="col">Owner<li>
|
|
15
|
+
<li class="col">Name</li>
|
|
16
|
+
</ul>
|
|
17
|
+
<ul class="repository-lst">
|
|
18
|
+
<% @repositories.each do |repository| %>
|
|
19
|
+
<li class="search-item <%= contributor_class(current_user.repositories_contributed_to, repository.id) %>" data-search="<%= repository.github_repo_name %>" data-repository-id="<%= repository.id %>">
|
|
20
|
+
<%= link_to repository_path(repository), class: 'commits-path' do %>
|
|
21
|
+
<span class="col"><%= repository.owner %></span>
|
|
22
|
+
<span class="col"><%= repository.name %></span>
|
|
23
|
+
<% end %>
|
|
24
|
+
</li>
|
|
25
|
+
<% end %>
|
|
26
|
+
</ul>
|
|
27
|
+
|
|
28
|
+
<%= link_to 'show all repositories', '#', class: 'btn secondary show-all-repositories' %></p>
|
|
29
|
+
</section>
|
|
30
|
+
|
|
31
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<% content_for :page_title do %>
|
|
2
|
+
<h1>Create a repository</h1>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<div class="wrapper">
|
|
6
|
+
<section>
|
|
7
|
+
<div class="setting-section">
|
|
8
|
+
<%= form_for @repository do |f| %>
|
|
9
|
+
<div class="field-wrapper">
|
|
10
|
+
<%= label_tag "Repo" %>
|
|
11
|
+
<br>
|
|
12
|
+
<%= Shipit.github.url %>
|
|
13
|
+
/
|
|
14
|
+
<%= f.text_field :owner, placeholder: 'e.g. Shopify', required: true, class: "repo" %>
|
|
15
|
+
/
|
|
16
|
+
<%= f.text_field :name, required: true, pattern: "^[a-zA-Z0-9\-_\.]+$", class: "repo" %>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="field-wrapper"><%= f.submit class: 'btn' %></div>
|
|
20
|
+
<% end %>
|
|
21
|
+
</div>
|
|
22
|
+
</section>
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<%= render partial: 'shipit/repositories/header', locals: { repository: @repository } %>
|
|
2
|
+
|
|
3
|
+
<div class="wrapper">
|
|
4
|
+
<section>
|
|
5
|
+
<header class="section-header">
|
|
6
|
+
<h2>Settings (Repository <%= @repository.github_repo_name %>)</h2>
|
|
7
|
+
</header>
|
|
8
|
+
|
|
9
|
+
<div class="setting-section">
|
|
10
|
+
<%= form_for @repository do |f| %>
|
|
11
|
+
<div class="field-wrapper">
|
|
12
|
+
<%= f.check_box :review_stacks_enabled %>
|
|
13
|
+
<%= f.label :review_stacks_enabled, "Dynamically provision stacks for Pull Requests?" %>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="field-wrapper">
|
|
17
|
+
<p>
|
|
18
|
+
<%= f.label :provisioning_behavior, "Provisioning behavior", aria: { describedby: 'provisioningBehaviorHelp' } %>
|
|
19
|
+
<%= f.select :provisioning_behavior, Shipit::Repository.provisioning_behaviors.map { |key, value| [ key.titleize, key] } %>
|
|
20
|
+
</p>
|
|
21
|
+
<p>
|
|
22
|
+
<small class="form-text text-muted" id="provisioningBehaviorHelp">
|
|
23
|
+
When "Allow All", the provisioning label has no effect on dynamic stack provisioning - ALL Pull Requests dynamically provision stacks.
|
|
24
|
+
</small>
|
|
25
|
+
</p>
|
|
26
|
+
<p>
|
|
27
|
+
<small class="form-text text-muted">
|
|
28
|
+
When "Allow With Label", dynamic provisioning occurs ONLY for Pull Requests whose labels include the 'Provisioning Label'.
|
|
29
|
+
</small>
|
|
30
|
+
</p>
|
|
31
|
+
<p>
|
|
32
|
+
<small class="form-text text-muted">
|
|
33
|
+
When "Prevent With Label", dynamic provisioning will occur for every Pull Request EXCEPT those whose labels include the 'Provisioning Label'.
|
|
34
|
+
</small>
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="field-wrapper">
|
|
39
|
+
<%= f.label :provisioning_label_name, "Provisioning label" %>
|
|
40
|
+
<%= f.text_field :provisioning_label_name %>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<%= f.submit class: "btn", value: "Save" %>
|
|
44
|
+
<% end %>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="setting-section">
|
|
48
|
+
<h5>Delete this repository</h5>
|
|
49
|
+
<p>This action will delete the repository and its stacks from Ship it permanently. Be careful.</p>
|
|
50
|
+
<%= button_to "Delete…", repository_path(@repository), class: 'btn btn--delete', data: {confirm: 'Are you sure?'}, method: :delete %>
|
|
51
|
+
</div>
|
|
52
|
+
</section>
|
|
53
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<% subscribe events_path(channels: ["repository.#{@repository.id}"]), '#layout-content' %>
|
|
2
|
+
|
|
3
|
+
<%= render partial: 'shipit/repositories/header', locals: {repository: @repository} %>
|
|
4
|
+
|
|
5
|
+
<div class="wrapper">
|
|
6
|
+
<section>
|
|
7
|
+
<% cache [@repository, params[:show_archived]] do %>
|
|
8
|
+
<section>
|
|
9
|
+
<header class="section-header">
|
|
10
|
+
<h2>Stacks</h2>
|
|
11
|
+
</header>
|
|
12
|
+
<ul class="repository-table-header">
|
|
13
|
+
<li class="col">Name</li>
|
|
14
|
+
<li class="col">Environment</li>
|
|
15
|
+
<li class="col">Branch</li>
|
|
16
|
+
<li class="col">Deploy URL</li>
|
|
17
|
+
</ul>
|
|
18
|
+
<ul class="repository-lst">
|
|
19
|
+
<%= render @stacks %>
|
|
20
|
+
</ul>
|
|
21
|
+
|
|
22
|
+
<%= link_to 'show all stacks', '#', class: 'btn secondary show-all-stacks' %></p>
|
|
23
|
+
<% if @show_archived %>
|
|
24
|
+
<%= link_to 'hide archived stacks', '?', class: 'btn secondary' %></p>
|
|
25
|
+
<% else %>
|
|
26
|
+
<%= link_to 'show archived stacks', '?show_archived=1', class: 'btn secondary' %></p>
|
|
27
|
+
<% end %>
|
|
28
|
+
</section>
|
|
29
|
+
<% end %>
|
|
30
|
+
</div>
|
|
@@ -49,6 +49,19 @@
|
|
|
49
49
|
</div>
|
|
50
50
|
<% end %>
|
|
51
51
|
|
|
52
|
+
<% if stack.awaiting_provision? %>
|
|
53
|
+
<div class="banner banner--orange">
|
|
54
|
+
<div class="banner__inner wrapper">
|
|
55
|
+
<div class="banner__content">
|
|
56
|
+
<h2 class="banner__title">
|
|
57
|
+
<i class="icon icon--list"></i>
|
|
58
|
+
This stack is in a queue waiting on provisioning. This may be because too many review stacks exist for this repository.
|
|
59
|
+
</h2>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
<% end %>
|
|
64
|
+
|
|
52
65
|
<% if stack.continuous_delivery_delayed? %>
|
|
53
66
|
<div class="banner">
|
|
54
67
|
<div class="banner__inner wrapper">
|
|
@@ -56,7 +69,8 @@
|
|
|
56
69
|
<h2 class="banner__title">Continuous Delivery Delayed!</h2>
|
|
57
70
|
<p class="banner__text">
|
|
58
71
|
Continuous Delivery for this stack is currently paused because
|
|
59
|
-
|
|
72
|
+
|
|
73
|
+
<%= link_to_if stack.deployment_checks_passed?, 'the pre-deploy checks failed', stack_commit_checks_path(stack, sha: stack.next_commit_to_deploy.sha) %>.
|
|
60
74
|
You can either wait for them to pass, or trigger a deploy manually.
|
|
61
75
|
</p>
|
|
62
76
|
</div>
|
|
@@ -22,9 +22,12 @@
|
|
|
22
22
|
<li class="nav__list__item">
|
|
23
23
|
<%= link_to t('stack.nav.statistics'), stack_statistics_path(stack) %>
|
|
24
24
|
</li>
|
|
25
|
+
<li class="nav__list__item">
|
|
26
|
+
<%= link_to 'Repository', repository_path(stack.repository) %>
|
|
27
|
+
</li>
|
|
25
28
|
<% if stack.merge_queue_enabled? %>
|
|
26
29
|
<li class="nav__list__item">
|
|
27
|
-
<%= link_to t('stack.nav.merge_queue', count: stack.
|
|
30
|
+
<%= link_to t('stack.nav.merge_queue', count: stack.merge_requests.queued.count), stack_merge_requests_path(stack) %>
|
|
28
31
|
</li>
|
|
29
32
|
<% end %>
|
|
30
33
|
|
|
@@ -64,7 +67,7 @@
|
|
|
64
67
|
</li>
|
|
65
68
|
<% end %>
|
|
66
69
|
<li class="nav__list__item">
|
|
67
|
-
<%= link_to t('stack.nav.view_on_github'),
|
|
70
|
+
<%= link_to t('stack.nav.view_on_github'), stack_github_url(stack) %>
|
|
68
71
|
</li>
|
|
69
72
|
<% if stack.deploy_url.present? %>
|
|
70
73
|
<li class="nav__list__item">
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<li class="search-item <%= stack.archived? ? 'archived' : '' %> <%= stack.undeployed_commits? ? 'undeployed' : '' %> <%= contributor_class(current_user.stacks_contributed_to, stack.id) %>" data-search="<%= stack.repo_name %> <%= stack.environment %> <%= stack.deploy_url %>" data-stack-id="<%= stack.id %>">
|
|
2
|
+
<%= link_to stack_path(stack), class: 'commits-path' do %>
|
|
3
|
+
<span class="col"><%= stack.repo_name %></span>
|
|
4
|
+
<small class="col"><%= stack.environment.capitalize %></small>
|
|
5
|
+
<small class="col"><%= stack.branch %></small>
|
|
6
|
+
<small class="col"><%= stack.deploy_url %></small>
|
|
7
|
+
<% end %>
|
|
8
|
+
</li>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
<h1><%= Shipit.app_name %></h1>
|
|
3
3
|
<% end %>
|
|
4
4
|
<% content_for :primary_navigation do %>
|
|
5
|
+
<%= link_to 'Repositories', repositories_path, class: 'btn secondary' %>
|
|
5
6
|
<%= link_to 'Add a stack', new_stack_path, class: 'btn secondary' %>
|
|
6
7
|
<% end %>
|
|
7
8
|
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
<li class="stack search-item <%= stack.archived? ? 'archived' : '' %> <%= stack.undeployed_commits? ? 'undeployed' : '' %> <%= @user_stacks.include?(stack.id) ? 'contributor' : 'not-matching' %>" data-search="<%= stack.repo_name %> <%= stack.environment %> <%= stack.deploy_url %>" data-stack-id="<%= stack.id %>">
|
|
22
23
|
<%= link_to stack_path(stack), class: 'commits-path' do %>
|
|
23
24
|
<span class="col"><%= stack.repo_name %></span>
|
|
24
|
-
<small class="col"><%= stack.environment
|
|
25
|
+
<small class="col"><%= stack.environment %></small>
|
|
25
26
|
<small class="col"><%= stack.branch %></small>
|
|
26
27
|
<small class="col"><%= stack.deploy_url %></small>
|
|
27
28
|
<% end %>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</header>
|
|
8
8
|
|
|
9
9
|
<div class="setting-section">
|
|
10
|
-
<%=
|
|
10
|
+
<%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
|
|
11
11
|
<div class="field-wrapper">
|
|
12
12
|
<%= f.label :environment %>
|
|
13
13
|
<%= f.text_field :environment, placeholder: 'production' %>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
<div class="setting-section">
|
|
45
45
|
<h5>Lock deploys</h5>
|
|
46
|
-
<%=
|
|
46
|
+
<%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
|
|
47
47
|
<div class="field-wrapper">
|
|
48
48
|
<%= f.label :lock_reason, 'Reason for lock' %>
|
|
49
49
|
<%= f.text_area :lock_reason %>
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
<% end %>
|
|
56
56
|
<% end %>
|
|
57
57
|
<% if @stack.locked? %>
|
|
58
|
-
<%=
|
|
58
|
+
<%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
|
|
59
59
|
<%= f.hidden_field :lock_reason, value: nil %>
|
|
60
60
|
<%= f.submit class: "btn btn--primary", value: "Unlock" %>
|
|
61
61
|
<%- end -%>
|
|
@@ -85,14 +85,14 @@
|
|
|
85
85
|
<% if @stack.archived? %>
|
|
86
86
|
<h5>Restore Stack</h5>
|
|
87
87
|
<p>This action will de-archive the Stack, restoring it in the stack list and unlocking it.</p>
|
|
88
|
-
<%=
|
|
88
|
+
<%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
|
|
89
89
|
<%= f.hidden_field :archived, value: false %>
|
|
90
90
|
<%= f.submit class: "btn", value: "Restore" %>
|
|
91
91
|
<% end %>
|
|
92
92
|
<% else %>
|
|
93
93
|
<h5>Archive Stack</h5>
|
|
94
94
|
<p>This action will archive the Stack, hiding it from the stack list and locking it. It can still be found if you know the URL and de-archived.</p>
|
|
95
|
-
<%=
|
|
95
|
+
<%= form_with scope: :stack, url: stack_path(@stack), method: :patch do |f| %>
|
|
96
96
|
<%= f.hidden_field :archived, value: true %>
|
|
97
97
|
<%= f.submit class: "btn", value: "Archive" %>
|
|
98
98
|
<% end %>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
<% if params[:force] %>
|
|
13
13
|
<%= link_to t('emergency_mode.disable'), stack_path(@stack) %>
|
|
14
14
|
<% else %>
|
|
15
|
-
<%= link_to t('emergency_mode.enable'), stack_path(@stack, force: 1), title: t('emergency_mode.enable_description') %>
|
|
15
|
+
<%= link_to t('emergency_mode.enable'), stack_path(@stack, force: 1, noredirect: 1), title: t('emergency_mode.enable_description') %>
|
|
16
16
|
<% end %>
|
|
17
17
|
</div>
|
|
18
18
|
</header>
|
|
@@ -43,6 +43,6 @@
|
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
<div class="clusterize-scroll task-output-container task-output-container-main-page">
|
|
46
|
-
<pre class="nowrap" data-status="<%= task.status %>"><code class="clusterize-content" data-output="<%= task.chunk_output %>" data-next-chunks-url="<%= next_chunks_url(task) %>"></code></pre>
|
|
46
|
+
<pre class="nowrap" data-status="<%= task.status %>"><code class="clusterize-content" data-output="<%= task.chunk_output %>" data-next-chunks-url="<%= next_chunks_url(task, last_byte: task.chunk_output_size) %>"></code></pre>
|
|
47
47
|
</div>
|
|
48
48
|
</div>
|
data/config/routes.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
Shipit::Engine.routes.draw do
|
|
3
3
|
stack_id_format = %r{[^/]+/[^/]+/[^/]+}
|
|
4
|
+
repository_id_format = %r{[^/]+/[^/]+}
|
|
4
5
|
sha_format = /[\da-f]{6,40}/
|
|
5
6
|
root to: 'stacks#index'
|
|
6
7
|
|
|
@@ -32,7 +33,7 @@ Shipit::Engine.routes.draw do
|
|
|
32
33
|
end
|
|
33
34
|
resources :rollbacks, only: %i(create)
|
|
34
35
|
resources :commits, only: %i(index)
|
|
35
|
-
resources :
|
|
36
|
+
resources :merge_requests, only: %i(index show update destroy)
|
|
36
37
|
post '/task/:task_name' => 'tasks#trigger', as: :trigger_task
|
|
37
38
|
resources :hooks, only: %i(index create show update destroy)
|
|
38
39
|
end
|
|
@@ -46,12 +47,20 @@ Shipit::Engine.routes.draw do
|
|
|
46
47
|
|
|
47
48
|
# Browser extension
|
|
48
49
|
get '/merge_status', action: :show, controller: :merge_status, as: :merge_status
|
|
49
|
-
put '/merge_status/*stack_id/pull/:number', action: :enqueue, controller: :merge_status, id: stack_id_format, as: :
|
|
50
|
-
delete '/merge_status/*stack_id/pull/:number', action: :dequeue, controller: :merge_status, id: stack_id_format, as: :
|
|
50
|
+
put '/merge_status/*stack_id/pull/:number', action: :enqueue, controller: :merge_status, id: stack_id_format, as: :enqueue_merge_request
|
|
51
|
+
delete '/merge_status/*stack_id/pull/:number', action: :dequeue, controller: :merge_status, id: stack_id_format, as: :dequeue_merge_request
|
|
51
52
|
|
|
52
53
|
# Humans
|
|
53
54
|
resources :api_clients
|
|
54
|
-
|
|
55
|
+
|
|
56
|
+
resources :repositories, only: %i(new index create)
|
|
57
|
+
scope '/repositories/*id', id: repository_id_format, as: :repository do
|
|
58
|
+
get '/' => 'repositories#show'
|
|
59
|
+
patch '/' => 'repositories#update'
|
|
60
|
+
delete '/' => 'repositories#destroy'
|
|
61
|
+
get :settings, controller: :repositories
|
|
62
|
+
get 'stacks/new' => 'repositories#new_stack'
|
|
63
|
+
end
|
|
55
64
|
|
|
56
65
|
scope '/github/auth/github', as: :github_authentication, controller: :github_authentication do
|
|
57
66
|
get '/', action: :request
|
|
@@ -60,6 +69,7 @@ Shipit::Engine.routes.draw do
|
|
|
60
69
|
get :logout
|
|
61
70
|
end
|
|
62
71
|
|
|
72
|
+
resources :stacks, only: %i(new create index)
|
|
63
73
|
scope '/*id', id: stack_id_format, as: :stack do
|
|
64
74
|
get '/' => 'stacks#show'
|
|
65
75
|
patch '/' => 'stacks#update'
|
|
@@ -107,7 +117,7 @@ Shipit::Engine.routes.draw do
|
|
|
107
117
|
resources :release_statuses, only: %i(create)
|
|
108
118
|
end
|
|
109
119
|
|
|
110
|
-
resources :
|
|
120
|
+
resources :merge_requests, only: %i(index destroy create)
|
|
111
121
|
end
|
|
112
122
|
get '/stacks/:id' => 'stacks#lookup'
|
|
113
123
|
|