pact_broker 2.71.0 → 2.75.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +2 -22
- data/.optic/.gitignore +2 -0
- data/.optic/api/specification.json +1 -0
- data/.optic/ignore +14 -0
- data/CHANGELOG.md +69 -0
- data/DEVELOPER_SETUP.md +9 -0
- data/Dockerfile +6 -1
- data/README.md +1 -1
- data/config/database.yml +1 -1
- data/db/migrations/20210115_add_webhook_foreign_key_indexes.rb +49 -0
- data/db/migrations/20210116_add_context_to_triggered_webhook.rb +11 -0
- data/db/migrations/migration_helper.rb +8 -0
- data/docker-compose-ci-mysql.yml +37 -0
- data/docker-compose-test.yml +4 -4
- data/lib/db.rb +1 -0
- data/lib/pact_broker/api.rb +13 -2
- data/lib/pact_broker/api/decorators.rb +3 -7
- data/lib/pact_broker/api/decorators/configuration.rb +33 -0
- data/lib/pact_broker/api/decorators/decorator_context_creator.rb +13 -0
- data/lib/pact_broker/api/decorators/extended_pact_decorator.rb +9 -1
- data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +9 -4
- data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +1 -0
- data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +2 -3
- data/lib/pact_broker/api/decorators/reason_decorator.rb +2 -0
- data/lib/pact_broker/api/decorators/tag_decorator.rb +0 -3
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +3 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +9 -5
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -2
- data/lib/pact_broker/api/resources/all_webhooks.rb +3 -3
- data/lib/pact_broker/api/resources/can_i_deploy_badge.rb +1 -1
- data/lib/pact_broker/api/resources/dashboard.rb +2 -2
- data/lib/pact_broker/api/resources/default_base_resource.rb +37 -12
- data/lib/pact_broker/api/resources/error_handler.rb +1 -1
- data/lib/pact_broker/api/resources/error_response_body_generator.rb +41 -0
- data/lib/pact_broker/api/resources/group.rb +1 -1
- data/lib/pact_broker/api/resources/integrations.rb +1 -1
- data/lib/pact_broker/api/resources/label.rb +1 -1
- data/lib/pact_broker/api/resources/latest_pact.rb +2 -2
- data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +2 -2
- data/lib/pact_broker/api/resources/matrix.rb +2 -2
- data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -1
- data/lib/pact_broker/api/resources/metadata_resource_methods.rb +24 -0
- data/lib/pact_broker/api/resources/pact.rb +4 -15
- data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
- data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +1 -1
- data/lib/pact_broker/api/resources/pact_version.rb +3 -0
- data/lib/pact_broker/api/resources/pact_versions.rb +1 -1
- data/lib/pact_broker/api/resources/pact_webhooks.rb +3 -3
- data/lib/pact_broker/api/resources/pact_webhooks_status.rb +2 -2
- data/lib/pact_broker/api/resources/pacticipant.rb +1 -1
- data/lib/pact_broker/api/resources/pacticipants.rb +3 -3
- data/lib/pact_broker/api/resources/pacticipants_for_label.rb +1 -1
- data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +1 -1
- data/lib/pact_broker/api/resources/provider_pacts.rb +1 -7
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +2 -2
- data/lib/pact_broker/api/resources/relationships.rb +1 -1
- data/lib/pact_broker/api/resources/tag.rb +1 -1
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +5 -1
- data/lib/pact_broker/api/resources/verification.rb +2 -2
- data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +1 -1
- data/lib/pact_broker/api/resources/verifications.rb +3 -5
- data/lib/pact_broker/api/resources/version.rb +1 -1
- data/lib/pact_broker/api/resources/versions.rb +1 -1
- data/lib/pact_broker/api/resources/webhook.rb +2 -2
- data/lib/pact_broker/api/resources/webhook_execution.rb +4 -4
- data/lib/pact_broker/api/resources/webhook_execution_methods.rb +1 -3
- data/lib/pact_broker/api/resources/webhooks.rb +3 -3
- data/lib/pact_broker/app.rb +9 -3
- data/lib/pact_broker/application_context.rb +41 -0
- data/lib/pact_broker/configuration.rb +12 -4
- data/lib/pact_broker/db/clean_incremental.rb +132 -22
- data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
- data/lib/pact_broker/doc/controllers/app.rb +3 -2
- data/lib/pact_broker/domain/tag.rb +42 -0
- data/lib/pact_broker/domain/verification.rb +87 -0
- data/lib/pact_broker/domain/version.rb +13 -6
- data/lib/pact_broker/domain/webhook_request.rb +1 -1
- data/lib/pact_broker/error.rb +0 -2
- data/lib/pact_broker/errors.rb +28 -0
- data/lib/pact_broker/errors/error_logger.rb +25 -0
- data/lib/pact_broker/metrics/service.rb +17 -4
- data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
- data/lib/pact_broker/pacts/metadata.rb +53 -8
- data/lib/pact_broker/pacts/repository.rb +45 -28
- data/lib/pact_broker/pacts/selector.rb +22 -0
- data/lib/pact_broker/pacts/selectors.rb +4 -0
- data/lib/pact_broker/services.rb +106 -31
- data/lib/pact_broker/tags/tag_with_latest_flag.rb +2 -0
- data/lib/pact_broker/tasks/clean_task.rb +9 -3
- data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
- data/lib/pact_broker/test/http_test_data_builder.rb +81 -19
- data/lib/pact_broker/test/test_data_builder.rb +27 -2
- data/lib/pact_broker/ui/views/index/_getting-started.haml +1 -1
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +16 -16
- data/lib/pact_broker/ui/views/index/show.haml +6 -6
- data/lib/pact_broker/ui/views/layouts/main.haml +2 -2
- data/lib/pact_broker/ui/views/matrix/show.haml +32 -33
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/execution_configuration.rb +4 -0
- data/lib/pact_broker/webhooks/execution_configuration_creator.rb +14 -0
- data/lib/pact_broker/webhooks/repository.rb +3 -2
- data/lib/pact_broker/webhooks/service.rb +2 -1
- data/lib/pact_broker/webhooks/triggered_webhook.rb +1 -0
- data/lib/sequel/extensions/statement_timeout.rb +22 -0
- data/optic.yml +5 -0
- data/pact_broker.gemspec +1 -1
- data/public/css/bootstrap-grid.css +3719 -0
- data/public/css/bootstrap-grid.css.map +1 -0
- data/public/css/bootstrap-grid.min.css +7 -0
- data/public/css/bootstrap-grid.min.css.map +1 -0
- data/public/css/bootstrap-reboot.css +331 -0
- data/public/css/bootstrap-reboot.css.map +1 -0
- data/public/css/bootstrap-reboot.min.css +8 -0
- data/public/css/bootstrap-reboot.min.css.map +1 -0
- data/public/css/bootstrap.css +8885 -5604
- data/public/css/bootstrap.css.map +1 -1
- data/public/css/bootstrap.min.css +4 -3
- data/public/css/bootstrap.min.css.map +1 -1
- data/public/images/alert.svg +1 -0
- data/public/images/arrow-switch.svg +1 -0
- data/public/images/check.svg +1 -0
- data/public/images/clock.svg +1 -0
- data/public/images/copy.svg +1 -0
- data/public/images/kebab-horizontal.svg +1 -0
- data/public/javascripts/clipboard.js +3 -3
- data/public/javascripts/{jquery-3.3.1.js → jquery-3.5.1.js} +1150 -642
- data/public/javascripts/jquery-3.5.1.min.js +2 -0
- data/public/javascripts/jquery-3.5.1.min.map +1 -0
- data/public/javascripts/matrix.js +2 -2
- data/public/js/bootstrap.bundle.js +7013 -0
- data/public/js/bootstrap.bundle.js.map +1 -0
- data/public/js/bootstrap.bundle.min.js +7 -0
- data/public/js/bootstrap.bundle.min.js.map +1 -0
- data/public/js/bootstrap.js +3862 -1804
- data/public/js/bootstrap.js.map +1 -0
- data/public/js/bootstrap.min.js +6 -6
- data/public/js/bootstrap.min.js.map +1 -0
- data/public/stylesheets/index.css +56 -3
- data/public/stylesheets/matrix.css +55 -5
- data/public/stylesheets/pact.css +14 -0
- data/regression/.gitignore +1 -0
- data/regression/can_i_deploy_spec.rb +42 -0
- data/regression/regression_helper.rb +37 -0
- data/regression/script/approval-all.sh +6 -0
- data/script/docker-container/test.sh +3 -0
- data/script/docker/db-psql.sh +3 -0
- data/script/docker/db-reload.sh +11 -0
- data/script/exercise-api-for-optic.sh +3 -0
- data/script/pry.rb +25 -0
- data/script/reproduce-issue-starting-up.rb +43 -0
- data/script/reproduce-issue.rb +8 -23
- data/script/seed.rb +1 -0
- data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
- data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
- data/spec/features/get_pact_spec.rb +2 -2
- data/spec/features/get_pact_version.rb +26 -3
- data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
- data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +1 -0
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +20 -8
- data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +5 -7
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +16 -6
- data/spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +65 -5
- data/spec/lib/pact_broker/api/resources/error_response_body_generator_spec.rb +69 -0
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
- data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
- data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
- data/spec/lib/pact_broker/db/clean_incremental_spec.rb +9 -1
- data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
- data/spec/lib/pact_broker/db/log_quietener_spec.rb +1 -1
- data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
- data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
- data/spec/lib/pact_broker/errors/error_logger_spec.rb +62 -0
- data/spec/lib/pact_broker/errors_spec.rb +55 -0
- data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
- data/spec/lib/pact_broker/pacts/metadata_spec.rb +73 -0
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +33 -13
- data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
- data/spec/lib/pact_broker/pacts/selected_pact_spec.rb +23 -0
- data/spec/lib/pact_broker/webhooks/repository_spec.rb +5 -2
- data/spec/lib/pact_broker/webhooks/service_spec.rb +2 -1
- data/spec/migrations/change_migration_strategy_spec.rb +1 -1
- data/tasks/rspec.rake +6 -0
- metadata +70 -17
- data/public/css/bootstrap-theme.css +0 -587
- data/public/css/bootstrap-theme.css.map +0 -1
- data/public/css/bootstrap-theme.min.css +0 -6
- data/public/css/bootstrap-theme.min.css.map +0 -1
- data/public/fonts/glyphicons-halflings-regular.svg +0 -288
- data/public/javascripts/jquery-3.3.1.min.js +0 -2
- data/public/javascripts/jquery-3.3.1.min.map +0 -1
- data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +0 -195
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe978e58a9f4c7e3e190b8fd5b48ce70212bac2dcc4c0ea795565a00db6127e3
|
4
|
+
data.tar.gz: 551b0f07b25b75db367cb4a6d16ce114ab64b2541f1a452ab686145d3b5610ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87c8c396ed8dd5aaabd184a7a65a24c7ba641d11a257bfb17d3cf497e4cc9e3e33a2a761143f3c59d511e0d42c3440ea3117f186ee179aff095d917c228dd820
|
7
|
+
data.tar.gz: 5d4b9dfc5bab8f3f3671dc10011a11c925bbf2ff2edc8b3a8196c204c6bdace6bc09d8c004e3bbed438a111c202b99b01937163708da591375f8828ef02e81a4
|
data/.github/workflows/test.yml
CHANGED
@@ -37,7 +37,7 @@ jobs:
|
|
37
37
|
- uses: actions/setup-ruby@v1
|
38
38
|
with:
|
39
39
|
ruby-version: ${{ matrix.ruby_version }}
|
40
|
-
- run: "bundle install"
|
40
|
+
- run: "gem install bundler && bundle install"
|
41
41
|
env:
|
42
42
|
INSTALL_PG: "true"
|
43
43
|
- run: "bundle exec rake"
|
@@ -51,24 +51,4 @@ jobs:
|
|
51
51
|
ruby_version: ["2.7"]
|
52
52
|
steps:
|
53
53
|
- uses: actions/checkout@v2
|
54
|
-
-
|
55
|
-
with:
|
56
|
-
ruby-version: ${{ matrix.ruby_version }}
|
57
|
-
- uses: mirromutth/mysql-action@v1.1
|
58
|
-
with:
|
59
|
-
host port: 3306 # Optional, default value is 3306. The port of host
|
60
|
-
#container port: 3307 # Optional, default value is 3306. The port of container
|
61
|
-
character set server: 'utf8' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
|
62
|
-
collation server: 'utf8_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
|
63
|
-
mysql version: '8.0' # Optional, default value is "latest". The version of the MySQL
|
64
|
-
mysql database: 'pact_broker' # Optional, default value is "test". The specified database which will be create
|
65
|
-
mysql root password: 'pact_broker' # Required if "mysql user" is empty, default is empty. The root superuser password
|
66
|
-
mysql user: 'pact_broker' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
|
67
|
-
mysql password: 'pact_broker' # Required if "mysql user" exists. The password for the "mysql user"
|
68
|
-
- run: "bundle install"
|
69
|
-
env:
|
70
|
-
INSTALL_MYSQL: "true"
|
71
|
-
- run: "bundle exec rake"
|
72
|
-
env:
|
73
|
-
DATABASE_ADAPTER: github_actions_mysql
|
74
|
-
INSTALL_MYSQL: "true"
|
54
|
+
- run: script/test/run-rake-on-docker-compose-mysql.sh
|
data/.optic/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
[]
|
data/.optic/ignore
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Default Ignore Rules
|
2
|
+
# Learn to configure your own at https://useoptic.com/docs
|
3
|
+
OPTIONS *
|
4
|
+
HEAD *
|
5
|
+
GET (.*).htm
|
6
|
+
GET (.*).html
|
7
|
+
GET (.*).css
|
8
|
+
GET (.*).js
|
9
|
+
GET (.*).woff
|
10
|
+
GET (.*).png
|
11
|
+
GET (.*).jpg
|
12
|
+
GET (.*).jpeg
|
13
|
+
GET (.*).svg
|
14
|
+
GET (.*).gif
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,72 @@
|
|
1
|
+
<a name="v2.75.0"></a>
|
2
|
+
### v2.75.0 (2021-01-18)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* upgrade bootstrap (#370) ([a457c337](/../../commit/a457c337))
|
7
|
+
* add indexes to webhook_executions and triggered_webhooks tables ([b05e7dbe](/../../commit/b05e7dbe))
|
8
|
+
|
9
|
+
* **webhook**
|
10
|
+
* set read and open timeouts ([8b502c44](/../../commit/8b502c44))
|
11
|
+
|
12
|
+
#### Bug Fixes
|
13
|
+
|
14
|
+
* **ui**
|
15
|
+
* upgrade to jquery-3.5.1 to address vulnerabilities in jquery-3.3.1 ([de41b231](/../../commit/de41b231))
|
16
|
+
|
17
|
+
* **deps**
|
18
|
+
* upgrade redcarpet for CVE-2020-26298 ([b57aad32](/../../commit/b57aad32))
|
19
|
+
|
20
|
+
<a name="v2.74.1"></a>
|
21
|
+
### v2.74.1 (2021-01-05)
|
22
|
+
|
23
|
+
#### Bug Fixes
|
24
|
+
|
25
|
+
* **deps**
|
26
|
+
* remove manual specification for nokogiri now the fix for CVE-2020-26247 has been released in 1.11 ([771378a9](/../../commit/771378a9))
|
27
|
+
|
28
|
+
<a name="v2.74.0"></a>
|
29
|
+
### v2.74.0 (2021-01-04)
|
30
|
+
|
31
|
+
#### Features
|
32
|
+
|
33
|
+
* include the consumer version selectors in the metadata of the 'pact for verification' URL ([32bbe1c3](/../../commit/32bbe1c3))
|
34
|
+
|
35
|
+
#### Bug Fixes
|
36
|
+
|
37
|
+
* **deps**
|
38
|
+
* update nokogiri for CVE-2020-26247 ([336ec897](/../../commit/336ec897))
|
39
|
+
|
40
|
+
<a name="v2.73.0"></a>
|
41
|
+
### v2.73.0 (2020-12-16)
|
42
|
+
|
43
|
+
#### Features
|
44
|
+
|
45
|
+
* **wip**
|
46
|
+
* permenently enable feature that keeps pacts as WIP when verified via the URL from a webhook triggered by pact publication ([70071373](/../../commit/70071373))
|
47
|
+
|
48
|
+
* allow error causes to be configured to log at warning level ([3a7bf5ea](/../../commit/3a7bf5ea))
|
49
|
+
* add self relations for tags in matrix resource ([727cee99](/../../commit/727cee99))
|
50
|
+
* add self relation to tags in extended pact and verification resources ([a560ce6d](/../../commit/a560ce6d))
|
51
|
+
|
52
|
+
* **metrics**
|
53
|
+
* timeout matrix count ([43091b57](/../../commit/43091b57))
|
54
|
+
|
55
|
+
#### Bug Fixes
|
56
|
+
|
57
|
+
* url encode tag name in tag URL ([80df832d](/../../commit/80df832d))
|
58
|
+
|
59
|
+
<a name="v2.72.0"></a>
|
60
|
+
### v2.72.0 (2020-12-02)
|
61
|
+
|
62
|
+
#### Features
|
63
|
+
|
64
|
+
* allow overwritten data deletion to be configured with extra options ([fd809737](/../../commit/fd809737))
|
65
|
+
* use the consumer version number in the metadata to select the correct consumer version for a pact version resource ([422c87fc](/../../commit/422c87fc))
|
66
|
+
* return link to latest pact if more pacts exist when deleting pacts by tag ([b87ea704](/../../commit/b87ea704))
|
67
|
+
* update output for clean dry run ([681a5ddd](/../../commit/681a5ddd))
|
68
|
+
* update metrics output ([0617e9df](/../../commit/0617e9df))
|
69
|
+
|
1
70
|
<a name="v2.71.0"></a>
|
2
71
|
### v2.71.0 (2020-11-28)
|
3
72
|
|
data/DEVELOPER_SETUP.md
CHANGED
@@ -68,6 +68,13 @@ bundle exec rake
|
|
68
68
|
# if you don't want to run the whole rake test suite, init the db first
|
69
69
|
/home/init-db.sh
|
70
70
|
```
|
71
|
+
|
72
|
+
Running a mysql client in the mysql-tests container:
|
73
|
+
|
74
|
+
```
|
75
|
+
mysql -hmysql -upact_broker -ppact_broker
|
76
|
+
```
|
77
|
+
|
71
78
|
## Running the tests
|
72
79
|
|
73
80
|
* To run everything (specs, pact verifications, vulnerability scan...):
|
@@ -87,5 +94,7 @@ bundle exec rake
|
|
87
94
|
bundle exec rspec path_to_your_spec.rb
|
88
95
|
```
|
89
96
|
|
97
|
+
NOTE: the spec tasks requires the `db:prepare:test` task to be executed at least once prior to running.
|
98
|
+
|
90
99
|
[chruby]: https://github.com/postmodern/chruby
|
91
100
|
[ruby-install]: https://github.com/postmodern/ruby-install
|
data/Dockerfile
CHANGED
@@ -15,6 +15,7 @@ RUN apk update \
|
|
15
15
|
"sqlite>=3.28" \
|
16
16
|
"tzdata>=2019" \
|
17
17
|
"mariadb-dev>=10.3" \
|
18
|
+
"mysql-client>=10.3.25" \
|
18
19
|
&& rm -rf /var/cache/apk/*
|
19
20
|
|
20
21
|
RUN apk add --no-cache openssl less
|
@@ -26,7 +27,7 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSI
|
|
26
27
|
|
27
28
|
|
28
29
|
COPY Gemfile /home/Gemfile
|
29
|
-
COPY Gemfile.lock /home/Gemfile.lock
|
30
|
+
# COPY Gemfile.lock /home/Gemfile.lock # lock file does not exist on CI
|
30
31
|
COPY pact_broker.gemspec /home/pact_broker.gemspec
|
31
32
|
COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
|
32
33
|
COPY .gitignore /home/.gitignore
|
@@ -38,6 +39,10 @@ RUN echo '#!/bin/sh' >> /usr/local/bin/start
|
|
38
39
|
RUN echo 'bundle exec rackup -o 0.0.0.0 -p 9292' >> /usr/local/bin/start
|
39
40
|
RUN chmod +x /usr/local/bin/start
|
40
41
|
|
42
|
+
RUN echo '#!/bin/sh' >> /usr/local/bin/test
|
43
|
+
RUN echo 'bundle exec rake' >> /usr/local/bin/test
|
44
|
+
RUN chmod +x /usr/local/bin/test
|
45
|
+
|
41
46
|
RUN echo '#!/bin/sh' >> /home/init-db.sh
|
42
47
|
RUN echo 'bundle exec rake db:prepare:test' >> /home/init-db.sh
|
43
48
|
RUN chmod +x /home/init-db.sh
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Pact Broker
|
2
2
|
[![Gem Version](https://badge.fury.io/rb/pact_broker.svg)](http://badge.fury.io/rb/pact_broker)
|
3
|
-
|
3
|
+
![Build status](https://github.com/pact-foundation/pact_broker/workflows/Test/badge.svg)
|
4
4
|
[![Join the chat at https://pact-foundation.slack.com/](https://img.shields.io/badge/chat-on%20slack-blue.svg?logo=slack)](https://slack.pact.io)
|
5
5
|
[![security](https://hakiri.io/github/pact-foundation/pact_broker/master.svg)](https://hakiri.io/github/pact-foundation/pact_broker/master)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/pact-foundation/pact_broker/badges/gpa.svg)](https://codeclimate.com/github/pact-foundation/pact_broker)
|
data/config/database.yml
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative 'migration_helper'
|
2
|
+
|
3
|
+
include PactBroker::MigrationHelper
|
4
|
+
|
5
|
+
Sequel.migration do
|
6
|
+
up do
|
7
|
+
if !mysql?
|
8
|
+
alter_table(:webhook_executions) do
|
9
|
+
add_index([:triggered_webhook_id], name: "webhook_executions_triggered_webhook_id_index")
|
10
|
+
end
|
11
|
+
# MySQL automatically creates indexes for foreign keys then complains if you
|
12
|
+
# re-create it with a different name and try to drop it.
|
13
|
+
|
14
|
+
# https://stackoverflow.com/a/52274628/832671 - "When there is only one index that can be used
|
15
|
+
# for the foreign key, it can't be dropped. If you really wan't to drop it, you either have to drop
|
16
|
+
# the foreign key constraint or to create another index for it first."
|
17
|
+
|
18
|
+
alter_table(:triggered_webhooks) do
|
19
|
+
add_index([:webhook_id], name: "triggered_webhooks_webhook_id_index")
|
20
|
+
add_index([:consumer_id], name: "triggered_webhooks_consumer_id_index")
|
21
|
+
add_index([:provider_id], name: "triggered_webhooks_provider_id_index")
|
22
|
+
add_index([:verification_id], name: "triggered_webhooks_verification_id_index")
|
23
|
+
add_index([:pact_publication_id], name: "triggered_webhooks_pact_publication_id_index")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
down do
|
29
|
+
if !mysql?
|
30
|
+
alter_table(:webhook_executions) do
|
31
|
+
drop_index([:triggered_webhook_id], name: "webhook_executions_triggered_webhook_id_index")
|
32
|
+
end
|
33
|
+
# MySQL automatically creates indexes for foreign keys then complains if you
|
34
|
+
# re-create it with a different name and try to drop it.
|
35
|
+
|
36
|
+
# https://stackoverflow.com/a/52274628/832671 - "When there is only one index that can be used
|
37
|
+
# for the foreign key, it can't be dropped. If you really wan't to drop it, you either have to drop
|
38
|
+
# the foreign key constraint or to create another index for it first."
|
39
|
+
|
40
|
+
alter_table(:triggered_webhooks) do
|
41
|
+
drop_index([:webhook_id], name: "triggered_webhooks_webhook_id_index")
|
42
|
+
drop_index([:consumer_id], name: "triggered_webhooks_consumer_id_index")
|
43
|
+
drop_index([:provider_id], name: "triggered_webhooks_provider_id_index")
|
44
|
+
drop_index([:verification_id], name: "triggered_webhooks_verification_id_index")
|
45
|
+
drop_index([:pact_publication_id], name: "triggered_webhooks_pact_publication_id_index")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -30,6 +30,14 @@ module PactBroker
|
|
30
30
|
Sequel::Model.db.adapter_scheme.to_s
|
31
31
|
end
|
32
32
|
|
33
|
+
def with_type_hash_if_postgres(options)
|
34
|
+
if postgres?
|
35
|
+
options.merge(type: "hash")
|
36
|
+
else
|
37
|
+
options
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
33
41
|
def sqlite_safe string
|
34
42
|
if adapter == 'sqlite'
|
35
43
|
string.gsub(/(?:\b|")order(?:"|\b)/, '`order`')
|
@@ -0,0 +1,37 @@
|
|
1
|
+
version: "3"
|
2
|
+
|
3
|
+
services:
|
4
|
+
mysql:
|
5
|
+
image: mysql:5.7.28
|
6
|
+
command: --default-authentication-plugin=mysql_native_password
|
7
|
+
environment:
|
8
|
+
MYSQL_ROOT_PASSWORD: pact_broker
|
9
|
+
MYSQL_DATABASE: pact_broker
|
10
|
+
MYSQL_USER: pact_broker
|
11
|
+
MYSQL_PASSWORD: pact_broker
|
12
|
+
ports:
|
13
|
+
- "3306:3306"
|
14
|
+
|
15
|
+
tests:
|
16
|
+
build: .
|
17
|
+
depends_on:
|
18
|
+
- mysql
|
19
|
+
environment:
|
20
|
+
DATABASE_ADAPTER: docker_compose_mysql
|
21
|
+
PACT_BROKER_HIDE_PACTFLOW_MESSAGES: 'true'
|
22
|
+
INSTALL_MYSQL: 'true'
|
23
|
+
volumes:
|
24
|
+
- ./lib:/home/lib
|
25
|
+
- ./spec:/home/spec
|
26
|
+
- ./db:/home/db
|
27
|
+
- ./config.ru:/home/config.ru
|
28
|
+
- ./tasks:/home/tasks
|
29
|
+
- ./Rakefile:/home/Rakefile
|
30
|
+
- ./config:/home/config
|
31
|
+
- ./.rspec:/home/.rspec
|
32
|
+
- ./.rubocop:/home/.rubocop
|
33
|
+
- ./.gitignore:/home/.gitignore
|
34
|
+
- ./public:/home/public
|
35
|
+
- ./script/docker-container/test.sh:/usr/local/bin/test
|
36
|
+
entrypoint: dockerize
|
37
|
+
command: --wait tcp://mysql:3306 -timeout 60s test
|
data/docker-compose-test.yml
CHANGED
@@ -6,8 +6,8 @@ services:
|
|
6
6
|
image: postgres
|
7
7
|
healthcheck:
|
8
8
|
test: psql postgres --command "select 1" -U postgres
|
9
|
-
ports:
|
10
|
-
|
9
|
+
# ports:
|
10
|
+
# - "5432:5432"
|
11
11
|
environment:
|
12
12
|
POSTGRES_USER: postgres
|
13
13
|
POSTGRES_PASSWORD: postgres
|
@@ -58,8 +58,8 @@ services:
|
|
58
58
|
MYSQL_DATABASE: pact_broker
|
59
59
|
MYSQL_USER: pact_broker
|
60
60
|
MYSQL_PASSWORD: pact_broker
|
61
|
-
ports:
|
62
|
-
|
61
|
+
# ports:
|
62
|
+
# - "3306:3306"
|
63
63
|
|
64
64
|
init-mysql:
|
65
65
|
build: .
|
data/lib/db.rb
CHANGED
@@ -33,6 +33,7 @@ module DB
|
|
33
33
|
con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
|
34
34
|
con.extension(:connection_validator)
|
35
35
|
con.extension(:pagination)
|
36
|
+
con.extension(:statement_timeout)
|
36
37
|
con.extend_datasets do
|
37
38
|
def any?
|
38
39
|
!empty?
|
data/lib/pact_broker/api.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'webmachine/adapters/rack_mapped'
|
2
2
|
require 'webmachine/rack_adapter_monkey_patch'
|
3
3
|
require 'pact_broker/api/resources'
|
4
|
+
require 'pact_broker/api/decorators'
|
5
|
+
require 'pact_broker/application_context'
|
4
6
|
require 'pact_broker/feature_toggle'
|
5
7
|
|
6
8
|
module Webmachine
|
@@ -12,8 +14,7 @@ module Webmachine
|
|
12
14
|
end
|
13
15
|
|
14
16
|
module PactBroker
|
15
|
-
|
16
|
-
API ||= begin
|
17
|
+
def self.build_api(application_context = PactBroker::ApplicationContext.default_application_context)
|
17
18
|
pact_api = Webmachine::Application.new do |app|
|
18
19
|
app.routes do
|
19
20
|
add(['trace', :*], Webmachine::Trace::TraceResource) unless ENV['RACK_ENV'] == 'production'
|
@@ -111,10 +112,20 @@ module PactBroker
|
|
111
112
|
end
|
112
113
|
end
|
113
114
|
|
115
|
+
# naughty, but better than setting each route manually
|
116
|
+
pact_api.routes.each do | route |
|
117
|
+
route.instance_variable_get(:@bindings)[:application_context] = application_context
|
118
|
+
end
|
119
|
+
|
114
120
|
pact_api.configure do |config|
|
115
121
|
config.adapter = :RackMapped
|
116
122
|
end
|
117
123
|
|
118
124
|
pact_api.adapter
|
119
125
|
end
|
126
|
+
|
127
|
+
|
128
|
+
API ||= begin
|
129
|
+
build_api
|
130
|
+
end
|
120
131
|
end
|
@@ -1,7 +1,3 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
|
4
|
-
require 'pact_broker/api/decorators/pact_collection_decorator'
|
5
|
-
require 'pact_broker/api/decorators/pact_pacticipant_decorator'
|
6
|
-
require 'pact_broker/api/decorators/pact_details_decorator'
|
7
|
-
require 'pact_broker/api/decorators/tag_decorator'
|
1
|
+
Dir.glob(File.expand_path(File.join(__FILE__, "..", "decorators", "*.rb"))).sort.each do | path |
|
2
|
+
require path
|
3
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'pact_broker/string_refinements'
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Decorators
|
6
|
+
class Configuration
|
7
|
+
using PactBroker::StringRefinements
|
8
|
+
|
9
|
+
def initialize(overrides = {})
|
10
|
+
@overrides = overrides
|
11
|
+
end
|
12
|
+
|
13
|
+
def class_for(name)
|
14
|
+
if overrides[name].is_a?(String)
|
15
|
+
Object.const_get(overrides[name])
|
16
|
+
elsif overrides[name].is_a?(Class)
|
17
|
+
overrides[name]
|
18
|
+
else
|
19
|
+
Object.const_get("PactBroker::Api::Decorators::#{name.to_s.camelcase(true)}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.default_configuration
|
24
|
+
Configuration.new
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :overrides
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|