pact_broker 2.74.0 → 2.76.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +8 -2
  3. data/.optic/.gitignore +2 -0
  4. data/.optic/api/specification.json +1 -0
  5. data/.optic/ignore +14 -0
  6. data/CHANGELOG.md +51 -0
  7. data/DEVELOPER_SETUP.md +9 -0
  8. data/Dockerfile +1 -0
  9. data/ISSUES.md +11 -3
  10. data/README.md +2 -2
  11. data/config/database.yml +1 -1
  12. data/db/migrations/20210115_add_webhook_foreign_key_indexes.rb +49 -0
  13. data/db/migrations/20210116_add_context_to_triggered_webhook.rb +11 -0
  14. data/db/migrations/migration_helper.rb +8 -0
  15. data/docker-compose-issue-repro-with-pact-broker-docker-image.yml +44 -0
  16. data/docker-compose-test.yml +4 -4
  17. data/lib/pact_broker/api.rb +13 -2
  18. data/lib/pact_broker/api/decorators.rb +3 -7
  19. data/lib/pact_broker/api/decorators/configuration.rb +33 -0
  20. data/lib/pact_broker/api/decorators/decorator_context_creator.rb +13 -0
  21. data/lib/pact_broker/api/decorators/matrix_decorator.rb +5 -1
  22. data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +1 -0
  23. data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +2 -3
  24. data/lib/pact_broker/api/decorators/reason_decorator.rb +4 -2
  25. data/lib/pact_broker/api/paths.rb +5 -0
  26. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -2
  27. data/lib/pact_broker/api/resources/all_webhooks.rb +3 -3
  28. data/lib/pact_broker/api/resources/can_i_deploy_badge.rb +1 -1
  29. data/lib/pact_broker/api/resources/dashboard.rb +2 -2
  30. data/lib/pact_broker/api/resources/default_base_resource.rb +37 -12
  31. data/lib/pact_broker/api/resources/error_response_body_generator.rb +41 -0
  32. data/lib/pact_broker/api/resources/group.rb +1 -1
  33. data/lib/pact_broker/api/resources/integrations.rb +1 -1
  34. data/lib/pact_broker/api/resources/label.rb +1 -1
  35. data/lib/pact_broker/api/resources/latest_pact.rb +2 -2
  36. data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
  37. data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +2 -2
  38. data/lib/pact_broker/api/resources/matrix.rb +2 -2
  39. data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -1
  40. data/lib/pact_broker/api/resources/pact.rb +2 -2
  41. data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +1 -1
  42. data/lib/pact_broker/api/resources/pact_versions.rb +1 -1
  43. data/lib/pact_broker/api/resources/pact_webhooks.rb +3 -3
  44. data/lib/pact_broker/api/resources/pact_webhooks_status.rb +2 -2
  45. data/lib/pact_broker/api/resources/pacticipant.rb +1 -1
  46. data/lib/pact_broker/api/resources/pacticipants.rb +3 -3
  47. data/lib/pact_broker/api/resources/pacticipants_for_label.rb +1 -1
  48. data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +1 -1
  49. data/lib/pact_broker/api/resources/provider_pacts.rb +1 -7
  50. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +2 -2
  51. data/lib/pact_broker/api/resources/relationships.rb +1 -1
  52. data/lib/pact_broker/api/resources/tag.rb +1 -1
  53. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +1 -1
  54. data/lib/pact_broker/api/resources/verification.rb +2 -2
  55. data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +1 -1
  56. data/lib/pact_broker/api/resources/verifications.rb +6 -3
  57. data/lib/pact_broker/api/resources/version.rb +1 -1
  58. data/lib/pact_broker/api/resources/versions.rb +1 -1
  59. data/lib/pact_broker/api/resources/webhook.rb +2 -2
  60. data/lib/pact_broker/api/resources/webhook_execution.rb +5 -5
  61. data/lib/pact_broker/api/resources/webhook_execution_methods.rb +1 -3
  62. data/lib/pact_broker/api/resources/webhooks.rb +3 -3
  63. data/lib/pact_broker/app.rb +11 -3
  64. data/lib/pact_broker/application_context.rb +41 -0
  65. data/lib/pact_broker/doc/controllers/app.rb +3 -2
  66. data/lib/pact_broker/domain/webhook.rb +8 -8
  67. data/lib/pact_broker/domain/webhook_request.rb +1 -1
  68. data/lib/pact_broker/error.rb +0 -2
  69. data/lib/pact_broker/errors.rb +28 -0
  70. data/lib/pact_broker/errors/error_logger.rb +25 -0
  71. data/lib/pact_broker/hash_refinements.rb +4 -0
  72. data/lib/pact_broker/pacts/repository.rb +10 -1
  73. data/lib/pact_broker/pacts/service.rb +4 -2
  74. data/lib/pact_broker/pacts/verifiable_pact.rb +22 -0
  75. data/lib/pact_broker/pacts/verifiable_pact_messages.rb +1 -1
  76. data/lib/pact_broker/services.rb +106 -31
  77. data/lib/pact_broker/test/http_test_data_builder.rb +108 -23
  78. data/lib/pact_broker/test/test_data_builder.rb +3 -2
  79. data/lib/pact_broker/ui/app.rb +6 -0
  80. data/lib/pact_broker/ui/controllers/base_controller.rb +5 -1
  81. data/lib/pact_broker/ui/controllers/pacts.rb +18 -0
  82. data/lib/pact_broker/ui/views/index/_getting-started.haml +1 -1
  83. data/lib/pact_broker/ui/views/index/show-with-tags.haml +16 -16
  84. data/lib/pact_broker/ui/views/index/show.haml +6 -6
  85. data/lib/pact_broker/ui/views/layouts/main.haml +2 -2
  86. data/lib/pact_broker/ui/views/matrix/show.haml +32 -33
  87. data/lib/pact_broker/verifications/service.rb +2 -1
  88. data/lib/pact_broker/version.rb +1 -1
  89. data/lib/pact_broker/webhooks/execution_configuration.rb +4 -0
  90. data/lib/pact_broker/webhooks/execution_configuration_creator.rb +14 -0
  91. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +10 -3
  92. data/lib/pact_broker/webhooks/repository.rb +3 -2
  93. data/lib/pact_broker/webhooks/service.rb +8 -6
  94. data/lib/pact_broker/webhooks/trigger_service.rb +56 -23
  95. data/lib/pact_broker/webhooks/triggered_webhook.rb +4 -1
  96. data/lib/rack/pact_broker/set_base_url.rb +22 -0
  97. data/optic.yml +5 -0
  98. data/pact_broker.gemspec +1 -2
  99. data/public/css/bootstrap-grid.css +3719 -0
  100. data/public/css/bootstrap-grid.css.map +1 -0
  101. data/public/css/bootstrap-grid.min.css +7 -0
  102. data/public/css/bootstrap-grid.min.css.map +1 -0
  103. data/public/css/bootstrap-reboot.css +331 -0
  104. data/public/css/bootstrap-reboot.css.map +1 -0
  105. data/public/css/bootstrap-reboot.min.css +8 -0
  106. data/public/css/bootstrap-reboot.min.css.map +1 -0
  107. data/public/css/bootstrap.css +8885 -5604
  108. data/public/css/bootstrap.css.map +1 -1
  109. data/public/css/bootstrap.min.css +4 -3
  110. data/public/css/bootstrap.min.css.map +1 -1
  111. data/public/images/alert.svg +1 -0
  112. data/public/images/arrow-switch.svg +1 -0
  113. data/public/images/check.svg +1 -0
  114. data/public/images/clock.svg +1 -0
  115. data/public/images/copy.svg +1 -0
  116. data/public/images/kebab-horizontal.svg +1 -0
  117. data/public/javascripts/clipboard.js +3 -3
  118. data/public/javascripts/{jquery-3.3.1.js → jquery-3.5.1.js} +1150 -642
  119. data/public/javascripts/jquery-3.5.1.min.js +2 -0
  120. data/public/javascripts/jquery-3.5.1.min.map +1 -0
  121. data/public/javascripts/matrix.js +2 -2
  122. data/public/js/bootstrap.bundle.js +7013 -0
  123. data/public/js/bootstrap.bundle.js.map +1 -0
  124. data/public/js/bootstrap.bundle.min.js +7 -0
  125. data/public/js/bootstrap.bundle.min.js.map +1 -0
  126. data/public/js/bootstrap.js +3862 -1804
  127. data/public/js/bootstrap.js.map +1 -0
  128. data/public/js/bootstrap.min.js +6 -6
  129. data/public/js/bootstrap.min.js.map +1 -0
  130. data/public/stylesheets/index.css +56 -3
  131. data/public/stylesheets/matrix.css +55 -5
  132. data/public/stylesheets/pact.css +14 -0
  133. data/regression/.gitignore +1 -0
  134. data/regression/can_i_deploy_spec.rb +42 -0
  135. data/regression/regression_helper.rb +37 -0
  136. data/regression/script/approval-all.sh +6 -0
  137. data/script/exercise-api-for-optic.sh +3 -0
  138. data/script/reproduce-issue-starting-up.rb +13 -23
  139. data/script/reproduce-issue.rb +18 -14
  140. data/script/trigger-release.sh +1 -1
  141. data/script/webhook-server.ru +5 -5
  142. data/spec/integration/ui/index_spec.rb +4 -4
  143. data/spec/lib/pact_broker/api/decorators/reason_decorator_spec.rb +6 -6
  144. data/spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb +1 -1
  145. data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +59 -10
  146. data/spec/lib/pact_broker/api/resources/error_response_body_generator_spec.rb +69 -0
  147. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +2 -5
  148. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +3 -2
  149. data/spec/lib/pact_broker/db/log_quietener_spec.rb +1 -1
  150. data/spec/lib/pact_broker/doc/controllers/app_spec.rb +3 -5
  151. data/spec/lib/pact_broker/domain/webhook_spec.rb +6 -6
  152. data/spec/lib/pact_broker/errors/error_logger_spec.rb +62 -0
  153. data/spec/lib/pact_broker/errors_spec.rb +55 -0
  154. data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +26 -0
  155. data/spec/lib/pact_broker/pacts/service_spec.rb +7 -5
  156. data/spec/lib/pact_broker/verifications/service_spec.rb +4 -1
  157. data/spec/lib/pact_broker/webhooks/render_spec.rb +6 -5
  158. data/spec/lib/pact_broker/webhooks/repository_spec.rb +5 -2
  159. data/spec/lib/pact_broker/webhooks/service_spec.rb +14 -9
  160. data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +60 -18
  161. data/tasks/rspec.rake +6 -0
  162. metadata +57 -38
  163. data/docker-compose-issue-repro.yml +0 -22
  164. data/public/css/bootstrap-theme.css +0 -587
  165. data/public/css/bootstrap-theme.css.map +0 -1
  166. data/public/css/bootstrap-theme.min.css +0 -6
  167. data/public/css/bootstrap-theme.min.css.map +0 -1
  168. data/public/fonts/glyphicons-halflings-regular.svg +0 -288
  169. data/public/javascripts/jquery-3.3.1.min.js +0 -2
  170. data/public/javascripts/jquery-3.3.1.min.map +0 -1
  171. data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +0 -211
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a3779dfce4701e31c25e10a37154785df8745aa022869f70bcdd3c080066169
4
- data.tar.gz: d9c48a07a42949aea37a84ca43930a53d6403abe02a96d1c1de2d58a27d763bc
3
+ metadata.gz: cdc8ed42038e4b622005f53471a000d870efd99a6dbd6b773aa9e8a3f9a993cb
4
+ data.tar.gz: d2f42cd3e13007471cdd33fabbe515afa9c9ff4896566868accd9961f66f557f
5
5
  SHA512:
6
- metadata.gz: 2a4a61fe0838766004ab06723b406d51149d748ec449c81139ada966a223b5491d4728fa0cdd52d6e369081af490eb03b4b7036c12c6f2a6b014bf20608c9d68
7
- data.tar.gz: 569774601622663f53d824d40b0013afd6728f0c603fb9f2f8d66f759603daf7d361d6481003dc83a2a844415d93eae78694a076be1172eb45728d678cd672a2
6
+ metadata.gz: a250f5f452356d3a9eb87659933cc47d0e947b7ce10a8c984d7cd296a28bc9be7dcfe82bd37fba29919f570a949b9b4a46b1622d6d242b92698268e54018aadf
7
+ data.tar.gz: c136cbe836ed813de2819480cf3347de86248f00258e0f8e89ec33375cf0c929186a65c51ef620995c11d2c596d496bec858c430894f80bacd6f647877f4af3e
@@ -5,12 +5,18 @@ on: push
5
5
  jobs:
6
6
  sqlite:
7
7
  runs-on: "ubuntu-latest"
8
+ continue-on-error: ${{ matrix.experimental }}
8
9
  strategy:
10
+ fail-fast: false
9
11
  matrix:
10
12
  ruby_version: ["2.7"]
13
+ experimental: [false]
14
+ include:
15
+ - ruby_version: "3.0"
16
+ experimental: true
11
17
  steps:
12
18
  - uses: actions/checkout@v2
13
- - uses: actions/setup-ruby@v1
19
+ - uses: ruby/setup-ruby@v1
14
20
  with:
15
21
  ruby-version: ${{ matrix.ruby_version }}
16
22
  - run: "bundle install"
@@ -34,7 +40,7 @@ jobs:
34
40
  - 5432:5432
35
41
  steps:
36
42
  - uses: actions/checkout@v2
37
- - uses: actions/setup-ruby@v1
43
+ - uses: ruby/setup-ruby@v1
38
44
  with:
39
45
  ruby-version: ${{ matrix.ruby_version }}
40
46
  - run: "gem install bundler && bundle install"
@@ -0,0 +1,2 @@
1
+
2
+ captures/
@@ -0,0 +1 @@
1
+ []
@@ -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
@@ -1,3 +1,54 @@
1
+ <a name="v2.76.2"></a>
2
+ ### v2.76.2 (2021-01-29)
3
+
4
+ #### Bug Fixes
5
+
6
+ * trigger one webhook for each pact publication that the verified content belongs to when using the 'pacts for verification' API (#378) ([114ccad0](/../../commit/114ccad0))
7
+
8
+ <a name="v2.76.1"></a>
9
+ ### v2.76.1 (2021-01-28)
10
+
11
+ #### Bug Fixes
12
+
13
+ * deduplicate wip pacts by content ([0af90776](/../../commit/0af90776))
14
+ * message when pending pact is verified successfully for the first time (#376) ([4fc69190](/../../commit/4fc69190))
15
+ * use base URL from rack env in UI ([5bf21324](/../../commit/5bf21324))
16
+
17
+ <a name="v2.76.0"></a>
18
+ ### v2.76.0 (2021-01-21)
19
+
20
+ #### Features
21
+
22
+ * **verification results**
23
+ * redirect requests for verification results to the HAL browser if requested in a web browser ([0f948de5](/../../commit/0f948de5))
24
+
25
+ <a name="v2.75.0"></a>
26
+ ### v2.75.0 (2021-01-18)
27
+
28
+ #### Features
29
+
30
+ * upgrade bootstrap (#370) ([a457c337](/../../commit/a457c337))
31
+ * add indexes to webhook_executions and triggered_webhooks tables ([b05e7dbe](/../../commit/b05e7dbe))
32
+
33
+ * **webhook**
34
+ * set read and open timeouts ([8b502c44](/../../commit/8b502c44))
35
+
36
+ #### Bug Fixes
37
+
38
+ * **ui**
39
+ * upgrade to jquery-3.5.1 to address vulnerabilities in jquery-3.3.1 ([de41b231](/../../commit/de41b231))
40
+
41
+ * **deps**
42
+ * upgrade redcarpet for CVE-2020-26298 ([b57aad32](/../../commit/b57aad32))
43
+
44
+ <a name="v2.74.1"></a>
45
+ ### v2.74.1 (2021-01-05)
46
+
47
+ #### Bug Fixes
48
+
49
+ * **deps**
50
+ * remove manual specification for nokogiri now the fix for CVE-2020-26247 has been released in 1.11 ([771378a9](/../../commit/771378a9))
51
+
1
52
  <a name="v2.74.0"></a>
2
53
  ### v2.74.0 (2021-01-04)
3
54
 
@@ -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
data/ISSUES.md CHANGED
@@ -8,16 +8,24 @@ You can use it to easily reproduce issues.
8
8
 
9
9
  To use it:
10
10
 
11
- * Run the Pact Broker using the latest development code:
11
+ * Run the Pact Broker using a specific Pact Broker Docker image by setting the required tag for the pact-broker service in the docker-compose-issue-repro-with-pact-broker-docker-image.yml file.
12
12
 
13
13
  ```
14
- docker-compose -f docker-compose-issue-repro.yml up --build pact-broker
14
+ # might need to try twice if it doesn't connect to postgres
15
+ docker-compose -f docker-compose-issue-repro-with-pact-broker-docker-image.yml up pact-broker
16
+
17
+ # if needing webhooks - new window
18
+ docker-compose -f docker-compose-issue-repro-with-pact-broker-docker-image.yml up webhook-server
19
+
20
+ # new window
21
+ docker-compose -f docker-compose-issue-repro-with-pact-broker-docker-image.yml run repro-issue
22
+
15
23
  ```
16
24
 
17
25
  * Run the reproduction script.
18
26
 
19
27
  ```
20
- docker-compose -f docker-compose-issue-repro.yml up repro-issue
28
+ docker-compose -f docker-compose-issue-repro-with-pact-broker-docker-image.yml run repro-issue
21
29
  ```
22
30
 
23
31
  You can modify `script/reproduce-issue.rb` and then re-run it with the change applied.
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
- [![Build Status](https://travis-ci.org/pact-foundation/pact_broker.svg?branch=master)](https://travis-ci.org/pact-foundation/pact_broker)
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)
@@ -116,7 +116,7 @@ Use the HAL browser to view documentation as you browse.
116
116
 
117
117
  ### To have a play around on your local machine
118
118
 
119
- * Install ruby 2.2.0 or later and bundler >= 1.12.0
119
+ * Install Ruby and Bundler (check the automated tests to find the most recent version of Ruby and Bundler that are supported)
120
120
  * Windows users: get a Rails/Ruby installer from [RailsInstaller](http://railsinstaller.org/) and run it
121
121
  * unix users just use your package manager
122
122
  * Run `git clone git@github.com:pact-foundation/pact_broker.git && cd pact_broker/example`
@@ -17,7 +17,7 @@ test:
17
17
  username: postgres
18
18
  password: postgres
19
19
  host: localhost
20
- port: "5433"
20
+ port: "5432"
21
21
  docker_compose_postgres:
22
22
  adapter: postgres
23
23
  database: postgres
@@ -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
@@ -0,0 +1,11 @@
1
+ require_relative 'migration_helper'
2
+
3
+ include PactBroker::MigrationHelper
4
+
5
+ Sequel.migration do
6
+ change do
7
+ alter_table(:triggered_webhooks) do
8
+ add_column(:event_context, String)
9
+ end
10
+ end
11
+ 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,44 @@
1
+ version: "3"
2
+
3
+ services:
4
+ postgres:
5
+ image: postgres
6
+ healthcheck:
7
+ test: psql postgres --command "select 1" -U postgres
8
+ environment:
9
+ POSTGRES_USER: postgres
10
+ POSTGRES_PASSWORD: password
11
+ POSTGRES_DB: postgres
12
+
13
+ pact-broker:
14
+ image: pactfoundation/pact-broker:2.76.0.0
15
+ ports:
16
+ - "9292:9292"
17
+ # depends_on:
18
+ # - postgres
19
+ environment:
20
+ PACT_BROKER_PORT: '9292'
21
+ #PACT_BROKER_DATABASE_URL: "postgres://postgres:password@postgres/postgres"
22
+ PACT_BROKER_DATABASE_URL: "sqlite:////tmp/pact_broker.sqlite3"
23
+ PACT_BROKER_LOG_LEVEL: INFO
24
+ PACT_BROKER_SQL_LOG_LEVEL: DEBUG
25
+ PACT_BROKER_WEBHOOK_SCHEME_WHITELIST: "http https"
26
+ PACT_BROKER_WEBHOOK_HOST_WHITELIST: "/.*/"
27
+
28
+ repro-issue:
29
+ build: .
30
+ depends_on:
31
+ - pact-broker
32
+ command: -wait http://pact-broker:9292 -timeout 30s /home/script/reproduce-issue.rb
33
+ entrypoint: dockerize
34
+ environment:
35
+ - PACT_BROKER_BASE_URL=http://pact-broker:9292
36
+ volumes:
37
+ - $PWD:/home
38
+ working_dir: /home
39
+
40
+ webhook-server:
41
+ build: .
42
+ entrypoint: ["/bin/sh", "-c", "bundle exec rackup -p 9393 -o 0.0.0.0 /home/script/webhook-server.ru"]
43
+ volumes:
44
+ - ./script/webhook-server.ru:/home/script/webhook-server.ru
@@ -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
- - "5432:5432"
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
- - "3306:3306"
61
+ # ports:
62
+ # - "3306:3306"
63
63
 
64
64
  init-mysql:
65
65
  build: .
@@ -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
- require 'pact_broker/api/decorators/pacticipant_decorator'
2
- require 'pact_broker/api/decorators/pacticipant_collection_decorator'
3
- require 'pact_broker/api/decorators/embedded_version_decorator'
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
@@ -0,0 +1,13 @@
1
+ require 'pact_broker/api/decorators/decorator_context'
2
+
3
+ module PactBroker
4
+ module Api
5
+ module Decorators
6
+ class DecoratorContextCreator
7
+ def self.call(resource, options)
8
+ Decorators::DecoratorContext.new(resource.base_url, resource.resource_url, resource.request.env, options)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end