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.
- checksums.yaml +4 -4
- data/README.md +41 -2
- data/Rakefile +4 -2
- data/app/assets/images/archive-solid.svg +1 -0
- data/app/assets/stylesheets/_pages/_stacks.scss +76 -3
- data/app/assets/stylesheets/_structure/_main.scss +2 -1
- data/app/assets/stylesheets/merge_status.scss +0 -3
- data/app/controllers/concerns/shipit/active_model_serializers_patch.rb +13 -0
- data/app/controllers/concerns/shipit/api/cacheable.rb +1 -0
- data/app/controllers/concerns/shipit/api/paginable.rb +3 -2
- data/app/controllers/concerns/shipit/api/rendering.rb +5 -4
- data/app/controllers/concerns/shipit/authentication.rb +3 -2
- data/app/controllers/concerns/shipit/pagination.rb +2 -1
- data/app/controllers/shipit/api/base_controller.rb +11 -6
- data/app/controllers/shipit/api/ccmenu_controller.rb +2 -1
- data/app/controllers/shipit/api/commits_controller.rb +2 -1
- data/app/controllers/shipit/api/deploys_controller.rb +4 -3
- data/app/controllers/shipit/api/hooks_controller.rb +6 -5
- data/app/controllers/shipit/api/locks_controller.rb +5 -4
- data/app/controllers/shipit/api/outputs_controller.rb +2 -1
- data/app/controllers/shipit/api/pull_requests_controller.rb +7 -6
- data/app/controllers/shipit/api/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/api/rollbacks_controller.rb +33 -0
- data/app/controllers/shipit/api/stacks_controller.rb +37 -5
- data/app/controllers/shipit/api/tasks_controller.rb +6 -5
- data/app/controllers/shipit/api_clients_controller.rb +50 -0
- data/app/controllers/shipit/ccmenu_url_controller.rb +4 -3
- data/app/controllers/shipit/commit_checks_controller.rb +2 -1
- data/app/controllers/shipit/commits_controller.rb +2 -1
- data/app/controllers/shipit/deploys_controller.rb +3 -2
- data/app/controllers/shipit/github_authentication_controller.rb +4 -3
- data/app/controllers/shipit/merge_status_controller.rb +19 -14
- data/app/controllers/shipit/pull_requests_controller.rb +3 -2
- data/app/controllers/shipit/release_statuses_controller.rb +3 -2
- data/app/controllers/shipit/rollbacks_controller.rb +3 -2
- data/app/controllers/shipit/shipit_controller.rb +2 -1
- data/app/controllers/shipit/stacks_controller.rb +78 -14
- data/app/controllers/shipit/status_controller.rb +2 -1
- data/app/controllers/shipit/tasks_controller.rb +6 -5
- data/app/controllers/shipit/webhooks_controller.rb +5 -132
- data/app/helpers/shipit/chunks_helper.rb +1 -0
- data/app/helpers/shipit/deploys_helper.rb +4 -3
- data/app/helpers/shipit/github_url_helper.rb +1 -0
- data/app/helpers/shipit/merge_status_helper.rb +1 -0
- data/app/helpers/shipit/shipit_helper.rb +1 -0
- data/app/helpers/shipit/stacks_helper.rb +5 -0
- data/app/helpers/shipit/tasks_helper.rb +1 -0
- data/app/jobs/shipit/background_job.rb +4 -0
- data/app/jobs/shipit/background_job/unique.rb +4 -1
- data/app/jobs/shipit/cache_deploy_spec_job.rb +1 -0
- data/app/jobs/shipit/chunk_rollup_job.rb +4 -0
- data/app/jobs/shipit/clear_git_cache_job.rb +1 -0
- data/app/jobs/shipit/continuous_delivery_job.rb +3 -1
- data/app/jobs/shipit/create_on_github_job.rb +6 -1
- data/app/jobs/shipit/create_release_statuses_job.rb +1 -0
- data/app/jobs/shipit/deferred_touch_job.rb +4 -0
- data/app/jobs/shipit/deliver_hook_job.rb +1 -0
- data/app/jobs/shipit/destroy_job.rb +1 -0
- data/app/jobs/shipit/destroy_stack_job.rb +3 -2
- data/app/jobs/shipit/emit_event_job.rb +2 -1
- data/app/jobs/shipit/fetch_commit_stats_job.rb +1 -0
- data/app/jobs/shipit/fetch_deployed_revision_job.rb +2 -1
- data/app/jobs/shipit/github_sync_job.rb +3 -2
- data/app/jobs/shipit/{mark_deploy_healty_job.rb → mark_deploy_healthy_job.rb} +1 -0
- data/app/jobs/shipit/merge_pull_requests_job.rb +1 -0
- data/app/jobs/shipit/perform_commit_checks_job.rb +1 -0
- data/app/jobs/shipit/perform_task_job.rb +14 -5
- data/app/jobs/shipit/purge_old_deliveries_job.rb +1 -0
- data/app/jobs/shipit/reap_dead_tasks_job.rb +21 -0
- data/app/jobs/shipit/refresh_check_runs_job.rb +1 -0
- data/app/jobs/shipit/refresh_github_user_job.rb +1 -0
- data/app/jobs/shipit/refresh_pull_request_job.rb +1 -0
- data/app/jobs/shipit/refresh_statuses_job.rb +1 -0
- data/app/jobs/shipit/setup_github_hook_job.rb +1 -0
- data/app/jobs/shipit/update_estimated_deploy_duration_job.rb +1 -0
- data/app/jobs/shipit/update_github_last_deployed_ref_job.rb +6 -3
- data/app/models/concerns/shipit/deferred_touch.rb +4 -3
- data/app/models/shipit/anonymous_user.rb +5 -0
- data/app/models/shipit/api_client.rb +3 -2
- data/app/models/shipit/application_record.rb +2 -1
- data/app/models/shipit/check_run.rb +4 -3
- data/app/models/shipit/command_line_user.rb +1 -0
- data/app/models/shipit/commit.rb +31 -12
- data/app/models/shipit/commit_checks.rb +1 -0
- data/app/models/shipit/commit_deployment.rb +17 -12
- data/app/models/shipit/commit_deployment_status.rb +8 -3
- data/app/models/shipit/commit_message.rb +1 -0
- data/app/models/shipit/delivery.rb +4 -3
- data/app/models/shipit/deploy.rb +40 -10
- data/app/models/shipit/deploy_spec.rb +22 -3
- data/app/models/shipit/deploy_spec/bundler_discovery.rb +2 -1
- data/app/models/shipit/deploy_spec/capistrano_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/file_system.rb +10 -3
- data/app/models/shipit/deploy_spec/kubernetes_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/lerna_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/npm_discovery.rb +5 -4
- data/app/models/shipit/deploy_spec/pypi_discovery.rb +1 -0
- data/app/models/shipit/deploy_spec/rubygems_discovery.rb +1 -0
- data/app/models/shipit/deploy_stats.rb +58 -0
- data/app/models/shipit/duration.rb +3 -2
- data/app/models/shipit/ephemeral_commit_checks.rb +1 -0
- data/app/models/shipit/github_hook.rb +2 -1
- data/app/models/shipit/github_status.rb +3 -2
- data/app/models/shipit/hook.rb +6 -5
- data/app/models/shipit/membership.rb +3 -2
- data/app/models/shipit/output_chunk.rb +7 -2
- data/app/models/shipit/pull_request.rb +13 -7
- data/app/models/shipit/record.rb +18 -0
- data/app/models/shipit/release_status.rb +3 -2
- data/app/models/shipit/repository.rb +43 -0
- data/app/models/shipit/rollback.rb +1 -0
- data/app/models/shipit/stack.rb +109 -50
- data/app/models/shipit/status.rb +3 -2
- data/app/models/shipit/status/common.rb +7 -6
- data/app/models/shipit/status/group.rb +1 -0
- data/app/models/shipit/status/missing.rb +2 -1
- data/app/models/shipit/status/unknown.rb +2 -1
- data/app/models/shipit/task.rb +64 -9
- data/app/models/shipit/task_definition.rb +1 -0
- data/app/models/shipit/team.rb +2 -1
- data/app/models/shipit/undeployed_commit.rb +1 -0
- data/app/models/shipit/unlimited_api_client.rb +1 -0
- data/app/models/shipit/user.rb +29 -5
- data/app/models/shipit/variable_definition.rb +1 -0
- data/app/models/shipit/webhooks.rb +33 -0
- data/app/models/shipit/webhooks/handlers/check_suite_handler.rb +20 -0
- data/app/models/shipit/webhooks/handlers/handler.rb +41 -0
- data/app/models/shipit/webhooks/handlers/membership_handler.rb +46 -0
- data/app/models/shipit/webhooks/handlers/push_handler.rb +21 -0
- data/app/models/shipit/webhooks/handlers/status_handler.rb +27 -0
- data/app/serializers/concerns/shipit/conditional_attributes.rb +1 -0
- data/app/serializers/shipit/anonymous_user_serializer.rb +1 -0
- data/app/serializers/shipit/command_line_user_serializer.rb +1 -0
- data/app/serializers/shipit/commit_serializer.rb +1 -0
- data/app/serializers/shipit/deploy_serializer.rb +2 -1
- data/app/serializers/shipit/hook_serializer.rb +1 -0
- data/app/serializers/shipit/pull_request_serializer.rb +1 -0
- data/app/serializers/shipit/rollback_serializer.rb +1 -0
- data/app/serializers/shipit/short_commit_serializer.rb +1 -0
- data/app/serializers/shipit/stack_serializer.rb +7 -1
- data/app/serializers/shipit/tail_task_serializer.rb +1 -0
- data/app/serializers/shipit/task_serializer.rb +2 -17
- data/app/serializers/shipit/user_serializer.rb +6 -1
- data/app/validators/ascii_only_validator.rb +4 -3
- data/app/validators/subset_validator.rb +1 -0
- data/app/views/layouts/_head.html.erb +0 -0
- data/app/views/layouts/shipit.html.erb +6 -4
- data/app/views/shipit/_variables.html.erb +1 -1
- data/app/views/shipit/api_clients/index.html.erb +36 -0
- data/app/views/shipit/api_clients/new.html.erb +33 -0
- data/app/views/shipit/api_clients/show.html.erb +35 -0
- data/app/views/shipit/ccmenu/project.xml.builder +2 -1
- data/app/views/shipit/deploys/new.html.erb +17 -12
- data/app/views/shipit/deploys/show.html.erb +2 -2
- data/app/views/shipit/merge_status/logged_out.erb +1 -1
- data/app/views/shipit/stacks/_header.html.erb +27 -12
- data/app/views/shipit/stacks/_links.html.erb +1 -0
- data/app/views/shipit/stacks/all_tasks.html.erb +28 -0
- data/app/views/shipit/stacks/index.html.erb +7 -2
- data/app/views/shipit/stacks/settings.html.erb +19 -0
- data/app/views/shipit/stacks/statistics.html.erb +82 -0
- data/app/views/shipit/tasks/show.html.erb +1 -1
- data/config/initializers/inflections.rb +2 -1
- data/config/locales/en.yml +18 -5
- data/config/routes.rb +14 -2
- data/db/migrate/20191209231045_create_shipit_repositories.rb +12 -0
- data/db/migrate/20191209231307_add_repository_reference_to_stacks.rb +15 -0
- data/db/migrate/20191216162728_backfill_repository_data.rb +22 -0
- data/db/migrate/20191216163010_remove_repository_information_from_stacks.rb +20 -0
- data/db/migrate/20191219205202_add_archived_since_to_stacks.rb +6 -0
- data/db/migrate/20200102175621_optional_task_commits.rb +6 -0
- data/db/migrate/20200109132519_add_sha_to_commit_deployments.rb +5 -0
- data/db/migrate/20200226211925_add_index_to_tasks_status.rb +5 -0
- data/db/migrate/20200427135152_add_pull_request_head_sha_to_commit.rb +5 -0
- data/db/migrate/20200615181558_add_rollback_once_aborted_to.rb +5 -0
- data/lib/shipit.rb +18 -20
- data/lib/shipit/cast_value.rb +1 -0
- data/lib/shipit/command.rb +14 -18
- data/lib/shipit/commands.rb +5 -4
- data/lib/shipit/csv_serializer.rb +1 -0
- data/lib/shipit/deploy_commands.rb +1 -0
- data/lib/shipit/engine.rb +11 -2
- data/lib/shipit/environment_variables.rb +11 -1
- data/lib/shipit/first_parent_commits_iterator.rb +1 -0
- data/lib/shipit/flock.rb +1 -0
- data/lib/shipit/github_app.rb +60 -6
- data/lib/shipit/github_http_cache_middleware.rb +57 -0
- data/lib/shipit/null_serializer.rb +1 -0
- data/lib/shipit/octokit_check_runs.rb +3 -2
- data/lib/shipit/octokit_iterator.rb +3 -2
- data/lib/shipit/paginator.rb +3 -2
- data/lib/shipit/rollback_commands.rb +1 -0
- data/lib/shipit/same_site_cookie_middleware.rb +29 -0
- data/lib/shipit/simple_message_verifier.rb +1 -0
- data/lib/shipit/stack_commands.rb +6 -3
- data/lib/shipit/stat.rb +1 -0
- data/lib/shipit/task_commands.rb +22 -14
- data/lib/shipit/version.rb +2 -1
- data/lib/snippets/release-gem +5 -1
- data/lib/tasks/cron.rake +2 -0
- data/lib/tasks/dev.rake +3 -2
- data/lib/tasks/shipit.rake +16 -17
- data/lib/tasks/teams.rake +1 -0
- data/test/controllers/api/base_controller_test.rb +3 -2
- data/test/controllers/api/ccmenu_controller_test.rb +9 -8
- data/test/controllers/api/commits_controller_test.rb +3 -2
- data/test/controllers/api/deploys_controller_test.rb +15 -14
- data/test/controllers/api/hooks_controller_test.rb +8 -7
- data/test/controllers/api/locks_controller_test.rb +7 -6
- data/test/controllers/api/outputs_controller_test.rb +3 -2
- data/test/controllers/api/pull_requests_controller_test.rb +8 -7
- data/test/controllers/api/release_statuses_controller_test.rb +2 -1
- data/test/controllers/api/rollback_controller_test.rb +113 -0
- data/test/controllers/api/stacks_controller_test.rb +44 -15
- data/test/controllers/api/tasks_controller_test.rb +13 -12
- data/test/controllers/api_clients_controller_test.rb +104 -0
- data/test/controllers/ccmenu_controller_test.rb +4 -3
- data/test/controllers/commit_checks_controller_test.rb +4 -3
- data/test/controllers/commits_controller_test.rb +3 -2
- data/test/controllers/deploys_controller_test.rb +33 -22
- data/test/controllers/github_authentication_controller_test.rb +1 -0
- data/test/controllers/merge_status_controller_test.rb +27 -9
- data/test/controllers/pull_requests_controller_test.rb +4 -3
- data/test/controllers/release_statuses_controller_test.rb +3 -2
- data/test/controllers/rollbacks_controller_test.rb +9 -8
- data/test/controllers/stacks_controller_test.rb +64 -15
- data/test/controllers/status_controller_test.rb +1 -0
- data/test/controllers/tasks_controller_test.rb +20 -19
- data/test/controllers/webhooks_controller_test.rb +36 -9
- data/test/dummy/config/application.rb +1 -1
- data/test/dummy/config/environments/development.rb +24 -4
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/db/schema.rb +25 -11
- data/test/dummy/db/seeds.rb +34 -17
- data/test/fixtures/shipit/commit_deployment_statuses.yml +4 -4
- data/test/fixtures/shipit/commit_deployments.yml +8 -8
- data/test/fixtures/shipit/commits.yml +38 -0
- data/test/fixtures/shipit/repositories.yml +27 -0
- data/test/fixtures/shipit/stacks.yml +190 -30
- data/test/fixtures/shipit/tasks.yml +66 -3
- data/test/fixtures/timeout +2 -1
- data/test/helpers/api_helper.rb +1 -0
- data/test/helpers/fixture_aliases_helper.rb +1 -0
- data/test/helpers/hooks_helper.rb +2 -1
- data/test/helpers/json_helper.rb +15 -11
- data/test/helpers/links_helper.rb +4 -3
- data/test/helpers/payloads_helper.rb +1 -0
- data/test/helpers/queries_helper.rb +3 -2
- data/test/jobs/cache_deploy_spec_job_test.rb +2 -1
- data/test/jobs/chunk_rollup_job_test.rb +1 -0
- data/test/jobs/deliver_hook_job_test.rb +2 -1
- data/test/jobs/destroy_stack_job_test.rb +10 -0
- data/test/jobs/emit_event_job_test.rb +2 -1
- data/test/jobs/fetch_commit_stats_job_test.rb +1 -0
- data/test/jobs/fetch_deployed_revision_job_test.rb +1 -0
- data/test/jobs/github_sync_job_test.rb +1 -0
- data/test/jobs/mark_deploy_healthy_job_test.rb +1 -0
- data/test/jobs/merge_pull_requests_job_test.rb +5 -4
- data/test/jobs/perform_task_job_test.rb +4 -3
- data/test/jobs/purge_old_deliveries_job_test.rb +1 -0
- data/test/jobs/reap_dead_tasks_job_test.rb +68 -0
- data/test/jobs/refresh_github_user_job_test.rb +1 -0
- data/test/jobs/refresh_status_job_test.rb +1 -0
- data/test/jobs/unique_job_test.rb +1 -0
- data/test/jobs/update_github_last_deployed_ref_job_test.rb +13 -11
- data/test/middleware/same_site_cookie_middleware_test.rb +52 -0
- data/test/models/api_client_test.rb +1 -0
- data/test/models/commit_checks_test.rb +1 -0
- data/test/models/commit_deployment_status_test.rb +34 -4
- data/test/models/commit_deployment_test.rb +9 -11
- data/test/models/commits_test.rb +99 -7
- data/test/models/delivery_test.rb +3 -2
- data/test/models/deploy_spec_test.rb +47 -42
- data/test/models/deploy_stats_test.rb +113 -0
- data/test/models/deploys_test.rb +60 -13
- data/test/models/duration_test.rb +1 -0
- data/test/models/github_hook_test.rb +1 -0
- data/test/models/hook_test.rb +20 -16
- data/test/models/membership_test.rb +1 -0
- data/test/models/output_chunk_test.rb +1 -0
- data/test/models/pull_request_test.rb +18 -11
- data/test/models/release_statuses_test.rb +1 -0
- data/test/models/rollbacks_test.rb +1 -0
- data/test/models/shipit/check_run_test.rb +1 -0
- data/test/models/shipit/repository_test.rb +77 -0
- data/test/models/shipit/wehbooks/handlers_test.rb +27 -0
- data/test/models/stacks_test.rb +110 -56
- data/test/models/status/group_test.rb +1 -0
- data/test/models/status/missing_test.rb +1 -0
- data/test/models/status_test.rb +1 -0
- data/test/models/task_definitions_test.rb +9 -8
- data/test/models/tasks_test.rb +18 -1
- data/test/models/team_test.rb +4 -2
- data/test/models/undeployed_commits_test.rb +14 -0
- data/test/models/users_test.rb +109 -1
- data/test/test_command_integration.rb +3 -2
- data/test/test_helper.rb +38 -34
- data/test/unit/anonymous_user_serializer_test.rb +14 -0
- data/test/unit/command_test.rb +12 -7
- data/test/unit/commands_test.rb +1 -0
- data/test/unit/commit_serializer_test.rb +16 -0
- data/test/unit/csv_serializer_test.rb +3 -2
- data/test/unit/deploy_commands_test.rb +14 -4
- data/test/unit/deploy_serializer_test.rb +17 -0
- data/test/unit/environment_variables_test.rb +5 -4
- data/test/unit/github_app_test.rb +165 -0
- data/test/unit/github_url_helper_test.rb +1 -0
- data/test/unit/rollback_commands_test.rb +2 -1
- data/test/unit/shipit_helper_test.rb +17 -0
- data/test/unit/shipit_test.rb +1 -0
- data/test/unit/user_serializer_test.rb +14 -0
- data/test/unit/variable_definition_test.rb +1 -0
- metadata +215 -157
- data/lib/shipit/strip_cache_control.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98113cef0ad013fa29cb11fea22f09547c191310a601eb788a53fdc5fb3c7e40
|
4
|
+
data.tar.gz: 39c68de0e6356e1daab40942a817af86258ea8219726c1e4276a42bba5d79315
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29504e17c71d378485e8610edea95e25e215f5c391478244e609a95a847e3022b508bda95713db97e1f1de22f67c8eed310a562f82cf737e1425803e958341ce
|
7
|
+
data.tar.gz: a7ea41b8ddcf21803a1279cd74d53231c9e030165c06b2ff835f31db55b0cf2240ca802626fba50abaec6b0e5c09e1439900de22c9d3b7719f53b6e2fe524da8
|
data/README.md
CHANGED
@@ -35,7 +35,11 @@ This guide aims to help you [set up](#installation-and-setup), [use](#using-ship
|
|
35
35
|
* [Configuring providers](#configuring-providers)
|
36
36
|
* [Free samples](/examples/shipit.yml)
|
37
37
|
|
38
|
-
**IV.
|
38
|
+
**IV. INTEGRATING**
|
39
|
+
|
40
|
+
* [Registering webhooks](#integrating-webhooks)
|
41
|
+
|
42
|
+
**V. CONTRIBUTING**
|
39
43
|
|
40
44
|
* [Instructions](#contributing-instructions)
|
41
45
|
* [Local development](#contributing-local-dev)
|
@@ -126,6 +130,8 @@ Also, if your repository is deployed different ways depending on the environment
|
|
126
130
|
|
127
131
|
For example for a stack like: `my-org/my-repo/staging`, `shipit.staging.yml` will have priority over `shipit.yml`.
|
128
132
|
|
133
|
+
Lastly, if you override the `app_name` configuration in your Shipit deployment, `yourapp.yml` and `yourapp.staging.yml` will work.
|
134
|
+
|
129
135
|
* * *
|
130
136
|
|
131
137
|
<h3 id="installing-dependencies">Installing dependencies</h3>
|
@@ -607,6 +613,8 @@ Your deploy scripts have access to the following environment variables:
|
|
607
613
|
* `SHIPIT`: Set to `1` to allow your script to know it's executed by Shipit
|
608
614
|
* `SHIPIT_LINK`: URL to the task output, useful to broadcast it in an IRC channel
|
609
615
|
* `SHIPIT_USER`: Full name of the user that triggered the deploy/task
|
616
|
+
* `GITHUB_REPO_NAME`: Name of the GitHub repository being used for the current deploy/task.
|
617
|
+
* `GITHUB_REPO_OWNER`: The GitHub username of the repository owner for the current deploy/task.
|
610
618
|
* `EMAIL`: Email of the user that triggered the deploy/task (if available)
|
611
619
|
* `ENVIRONMENT`: The stack environment (e.g `production` / `staging`)
|
612
620
|
* `BRANCH`: The stack branch (e.g `master`)
|
@@ -634,7 +642,36 @@ For Kubernetes, you have to provision Shipit environment with the following tool
|
|
634
642
|
* `kubectl`
|
635
643
|
* `kubernetes-deploy` [gem](https://github.com/Shopify/kubernetes-deploy)
|
636
644
|
|
637
|
-
<h2 id="
|
645
|
+
<h2 id="integrating">IV. INTEGRATING</h2>
|
646
|
+
|
647
|
+
<h3 id="integrating-webhooks">Registering webhooks</h3>
|
648
|
+
|
649
|
+
Shipit handles several webhook types by default, listed in `Shipit::Wehbooks::DEFAULT_HANDLERS`, in order to implement default behaviours. Extra handler blocks can be registered via `Shipit::Webhooks.register_handler`. Valid handlers need only implement the `call` method - meaning any object which implements `call` - blocks, procs, or lambdas are valid. The webhooks controller will pass a `params` argument to the handler. Some examples:
|
650
|
+
|
651
|
+
|
652
|
+
<h4>Registering a Plain old Ruby Object as a handler</h4>
|
653
|
+
|
654
|
+
```ruby
|
655
|
+
class PullRequestHandler
|
656
|
+
def call(params)
|
657
|
+
# do something with pull request webhook events
|
658
|
+
end
|
659
|
+
end
|
660
|
+
|
661
|
+
Shipit::Webhooks.register_handler('pull_request', PullRequestHandler)
|
662
|
+
```
|
663
|
+
|
664
|
+
<h4>Registering a Block as a handler</h4>
|
665
|
+
|
666
|
+
```ruby
|
667
|
+
Shipit::Webhooks.register_handler('pull_request') do |params|
|
668
|
+
# do something with pull request webhook events
|
669
|
+
end
|
670
|
+
```
|
671
|
+
|
672
|
+
Multiple handler blocks can be registered. If any raise errors, execution will be halted and the request will be reported failed to github.
|
673
|
+
|
674
|
+
<h2 id="contributing">V. CONTRIBUTING</h2>
|
638
675
|
|
639
676
|
<h3 id="contributing-instructions">Instructions</h3>
|
640
677
|
|
@@ -657,3 +694,5 @@ Run `./bin/bootstrap` in order to bootstrap the dummy application. The bootstrap
|
|
657
694
|
Run `./test/dummy/bin/rails server` to run the rails dummy application.
|
658
695
|
|
659
696
|
Set the environment variable `SHIPIT_DISABLE_AUTH=1` in order to disable authentication.
|
697
|
+
|
698
|
+
If you need to test caching behaviour in the dummy application, use `bin/rails dev:cache`.
|
data/Rakefile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
3
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
4
|
|
@@ -8,7 +9,7 @@ rescue LoadError
|
|
8
9
|
end
|
9
10
|
|
10
11
|
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__)
|
11
|
-
load
|
12
|
+
load('rails/tasks/engine.rake')
|
12
13
|
|
13
14
|
Bundler::GemHelper.install_tasks
|
14
15
|
|
@@ -19,6 +20,7 @@ Rake::TestTask.new(:test) do |t|
|
|
19
20
|
t.libs << 'test'
|
20
21
|
t.test_files = FileList.new('test/**/*_test.rb').exclude('test/dummy/**/*')
|
21
22
|
t.verbose = false
|
23
|
+
t.warning = false
|
22
24
|
end
|
23
25
|
|
24
|
-
task
|
26
|
+
task(default: :test)
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="archive" class="svg-inline--fa fa-archive fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"></path></svg>
|
@@ -49,6 +49,15 @@
|
|
49
49
|
padding-left: 30px;
|
50
50
|
margin-left: -30px;
|
51
51
|
}
|
52
|
+
.archived {
|
53
|
+
// From FontAwesome, license @ https://fontawesome.com/license/free
|
54
|
+
background-image: asset-data-url('archive-solid.svg');
|
55
|
+
background-repeat: no-repeat;
|
56
|
+
background-size: 22px 22px;
|
57
|
+
background-position: 0px center;
|
58
|
+
padding-left: 30px;
|
59
|
+
margin-left: -30px;
|
60
|
+
}
|
52
61
|
}
|
53
62
|
|
54
63
|
.stack-lst:empty:before {
|
@@ -84,9 +93,6 @@
|
|
84
93
|
|
85
94
|
.commits-path {
|
86
95
|
font-size: 18px;
|
87
|
-
span {
|
88
|
-
text-transform: capitalize;
|
89
|
-
}
|
90
96
|
small {
|
91
97
|
font-size: 18px;
|
92
98
|
color: #8D9EB0;
|
@@ -161,3 +167,70 @@
|
|
161
167
|
.pagination {
|
162
168
|
text-align: center;
|
163
169
|
}
|
170
|
+
|
171
|
+
.box {
|
172
|
+
border-radius: 5px;
|
173
|
+
width: 32%;
|
174
|
+
float: left;
|
175
|
+
padding: 5px;
|
176
|
+
}
|
177
|
+
|
178
|
+
.box__header {
|
179
|
+
padding: 15px 25px;
|
180
|
+
position: relative;
|
181
|
+
}
|
182
|
+
|
183
|
+
.box__header-title {
|
184
|
+
color: #333;
|
185
|
+
font-size: 18px;
|
186
|
+
}
|
187
|
+
|
188
|
+
.box__body {
|
189
|
+
padding: 0 25px;
|
190
|
+
}
|
191
|
+
|
192
|
+
.row {
|
193
|
+
@include clearfix;
|
194
|
+
}
|
195
|
+
|
196
|
+
/* STATS */
|
197
|
+
|
198
|
+
.stats {
|
199
|
+
color: #333;
|
200
|
+
position: relative;
|
201
|
+
padding-bottom: 25px;
|
202
|
+
}
|
203
|
+
|
204
|
+
.stats__amount {
|
205
|
+
font-size: 54px;
|
206
|
+
line-height: 1.2;
|
207
|
+
}
|
208
|
+
|
209
|
+
.stats__caption {
|
210
|
+
font-size: 18px;
|
211
|
+
|
212
|
+
}
|
213
|
+
|
214
|
+
.stats__change {
|
215
|
+
position: absolute;
|
216
|
+
top: 10px;
|
217
|
+
right: 0;
|
218
|
+
text-align: right;
|
219
|
+
color: #B1B7C8;
|
220
|
+
}
|
221
|
+
|
222
|
+
.stats__value {
|
223
|
+
font-size: 18px;
|
224
|
+
}
|
225
|
+
|
226
|
+
.stats__period {
|
227
|
+
font-size: 14px;
|
228
|
+
}
|
229
|
+
|
230
|
+
.stats__value--positive {
|
231
|
+
color: #AEDC6F;
|
232
|
+
}
|
233
|
+
|
234
|
+
.stats__value--negative {
|
235
|
+
color: #FB5055;
|
236
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Shipit
|
3
|
+
module ActiveModelSerializersPatch
|
4
|
+
private
|
5
|
+
|
6
|
+
def namespace_for_serializer
|
7
|
+
# TODO: This is a monkey patch for active_model_serializers 0.9.7.
|
8
|
+
# It's really outdated and newer versions aren't really a suitable replacement.
|
9
|
+
# We should look into simply getting rid of it.
|
10
|
+
@namespace_for_serializer ||= self.class.module_parent unless self.class.module_parent == Object
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
module Paginable
|
4
5
|
extend ActiveSupport::Concern
|
5
6
|
|
6
|
-
LINK = 'Link'
|
7
|
+
LINK = 'Link'
|
7
8
|
|
8
9
|
included do
|
9
10
|
class_attribute :max_page_size
|
@@ -12,7 +13,7 @@ module Shipit
|
|
12
13
|
|
13
14
|
self.max_page_size = 100
|
14
15
|
self.default_page_size = 30
|
15
|
-
self.default_order = {id: :desc}.freeze
|
16
|
+
self.default_order = { id: :desc }.freeze
|
16
17
|
end
|
17
18
|
|
18
19
|
private
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
module Rendering
|
@@ -5,16 +6,16 @@ module Shipit
|
|
5
6
|
|
6
7
|
def render_resources(resources, options = {})
|
7
8
|
options[:json] = resources
|
8
|
-
render
|
9
|
+
render(options)
|
9
10
|
end
|
10
11
|
|
11
12
|
def render_resource(resource, options = {})
|
12
13
|
if resource.destroyed?
|
13
|
-
head
|
14
|
+
head(:no_content, options.reverse_merge(content_type: 'application/json'))
|
14
15
|
elsif resource.errors.any?
|
15
|
-
render
|
16
|
+
render(options.reverse_merge(status: :unprocessable_entity, json: { errors: resource.errors }))
|
16
17
|
else
|
17
|
-
render
|
18
|
+
render(options.reverse_merge(json: resource))
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Authentication
|
3
4
|
extend ActiveSupport::Concern
|
@@ -20,10 +21,10 @@ module Shipit
|
|
20
21
|
unless current_user.authorized?
|
21
22
|
team_handles = Shipit.github_teams.map(&:handle)
|
22
23
|
team_list = team_handles.to_sentence(two_words_connector: ' or ', last_word_connector: ', or ')
|
23
|
-
render
|
24
|
+
render(plain: "You must be a member of #{team_list} to access this application.", status: :forbidden)
|
24
25
|
end
|
25
26
|
else
|
26
|
-
redirect_to
|
27
|
+
redirect_to(Shipit::Engine.routes.url_helpers.github_authentication_path(origin: request.original_url))
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Pagination
|
3
4
|
extend ActiveSupport::Concern
|
@@ -9,7 +10,7 @@ module Shipit
|
|
9
10
|
|
10
11
|
self.max_page_size = 100
|
11
12
|
self.default_page_size = 30
|
12
|
-
self.default_order = {id: :desc}.freeze
|
13
|
+
self.default_order = { id: :desc }.freeze
|
13
14
|
end
|
14
15
|
|
15
16
|
private
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
class BaseController < ActionController::Base
|
@@ -22,11 +23,15 @@ module Shipit
|
|
22
23
|
before_action :authenticate_api_client
|
23
24
|
|
24
25
|
def index
|
25
|
-
render
|
26
|
+
render(json: { stacks_url: api_stacks_url })
|
26
27
|
end
|
27
28
|
|
28
29
|
private
|
29
30
|
|
31
|
+
def namespace_for_serializer
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
30
35
|
def authenticate_api_client
|
31
36
|
@current_api_client = if Shipit.disable_api_authentication
|
32
37
|
UnlimitedApiClient.new
|
@@ -38,7 +43,7 @@ module Shipit
|
|
38
43
|
end
|
39
44
|
return if @current_api_client
|
40
45
|
headers['WWW-Authenticate'] = 'Basic realm="Authentication token"'
|
41
|
-
render
|
46
|
+
render(status: :unauthorized, json: { message: 'Bad credentials' })
|
42
47
|
end
|
43
48
|
|
44
49
|
attr_reader :current_api_client
|
@@ -65,19 +70,19 @@ module Shipit
|
|
65
70
|
end
|
66
71
|
|
67
72
|
def insufficient_permission(error)
|
68
|
-
render
|
73
|
+
render(status: :forbidden, json: { message: error.message })
|
69
74
|
end
|
70
75
|
|
71
76
|
def validation_error(error)
|
72
|
-
render
|
77
|
+
render(status: :unprocessable_entity, json: { message: error.message })
|
73
78
|
end
|
74
79
|
|
75
80
|
def not_found(_error)
|
76
|
-
render
|
81
|
+
render(status: :not_found, json: { status: '404', error: 'Not Found' })
|
77
82
|
end
|
78
83
|
|
79
84
|
def conflict(_error)
|
80
|
-
render
|
85
|
+
render(status: :conflict, json: { status: '409', error: 'Conflict' })
|
81
86
|
end
|
82
87
|
end
|
83
88
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
class CCMenuController < BaseController
|
@@ -19,7 +20,7 @@ module Shipit
|
|
19
20
|
|
20
21
|
def show
|
21
22
|
latest_deploy = stack.deploys_and_rollbacks.last || NoDeploy.new
|
22
|
-
render
|
23
|
+
render('shipit/ccmenu/project.xml.builder', formats: [:xml], locals: { stack: stack, deploy: latest_deploy })
|
23
24
|
end
|
24
25
|
|
25
26
|
private
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
class CommitsController < BaseController
|
@@ -9,7 +10,7 @@ module Shipit
|
|
9
10
|
commits = commits.newer_than(stack.last_deployed_commit)
|
10
11
|
end
|
11
12
|
|
12
|
-
render_resources
|
13
|
+
render_resources(commits)
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
@@ -1,14 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
class DeploysController < BaseController
|
4
5
|
require_permission :deploy, :stack
|
5
6
|
|
6
7
|
def index
|
7
|
-
render_resources
|
8
|
+
render_resources(stack.deploys_and_rollbacks)
|
8
9
|
end
|
9
10
|
|
10
11
|
params do
|
11
|
-
requires :sha, String, length: {in: 6..40}
|
12
|
+
requires :sha, String, length: { in: 6..40 }
|
12
13
|
accepts :force, Boolean, default: false
|
13
14
|
accepts :env, Hash, default: {}
|
14
15
|
end
|
@@ -16,7 +17,7 @@ module Shipit
|
|
16
17
|
commit = stack.commits.by_sha(params.sha) || param_error!(:sha, 'Unknown revision')
|
17
18
|
param_error!(:force, "Can't deploy a locked stack") if !params.force && stack.locked?
|
18
19
|
deploy = stack.trigger_deploy(commit, current_user, env: params.env, force: params.force)
|
19
|
-
render_resource
|
20
|
+
render_resource(deploy, status: :accepted)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Shipit
|
2
3
|
module Api
|
3
4
|
class HooksController < BaseController
|
@@ -5,11 +6,11 @@ module Shipit
|
|
5
6
|
require_permission :write, :hook, only: %i(create update destroy)
|
6
7
|
|
7
8
|
def index
|
8
|
-
render_resources
|
9
|
+
render_resources(hooks)
|
9
10
|
end
|
10
11
|
|
11
12
|
def show
|
12
|
-
render
|
13
|
+
render(json: hook)
|
13
14
|
end
|
14
15
|
|
15
16
|
params do
|
@@ -18,7 +19,7 @@ module Shipit
|
|
18
19
|
accepts :content_type, String
|
19
20
|
end
|
20
21
|
def create
|
21
|
-
render_resource
|
22
|
+
render_resource(hooks.create(params))
|
22
23
|
end
|
23
24
|
|
24
25
|
params do
|
@@ -28,11 +29,11 @@ module Shipit
|
|
28
29
|
end
|
29
30
|
def update
|
30
31
|
hook.update(params)
|
31
|
-
render_resource
|
32
|
+
render_resource(hook)
|
32
33
|
end
|
33
34
|
|
34
35
|
def destroy
|
35
|
-
render_resource
|
36
|
+
render_resource(hook.destroy)
|
36
37
|
end
|
37
38
|
|
38
39
|
private
|