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.
Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -22
  3. data/.optic/.gitignore +2 -0
  4. data/.optic/api/specification.json +1 -0
  5. data/.optic/ignore +14 -0
  6. data/CHANGELOG.md +69 -0
  7. data/DEVELOPER_SETUP.md +9 -0
  8. data/Dockerfile +6 -1
  9. data/README.md +1 -1
  10. data/config/database.yml +1 -1
  11. data/db/migrations/20210115_add_webhook_foreign_key_indexes.rb +49 -0
  12. data/db/migrations/20210116_add_context_to_triggered_webhook.rb +11 -0
  13. data/db/migrations/migration_helper.rb +8 -0
  14. data/docker-compose-ci-mysql.yml +37 -0
  15. data/docker-compose-test.yml +4 -4
  16. data/lib/db.rb +1 -0
  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/extended_pact_decorator.rb +9 -1
  22. data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +8 -0
  23. data/lib/pact_broker/api/decorators/matrix_decorator.rb +9 -4
  24. data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +1 -0
  25. data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +2 -3
  26. data/lib/pact_broker/api/decorators/reason_decorator.rb +2 -0
  27. data/lib/pact_broker/api/decorators/tag_decorator.rb +0 -3
  28. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +3 -1
  29. data/lib/pact_broker/api/pact_broker_urls.rb +9 -5
  30. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -2
  31. data/lib/pact_broker/api/resources/all_webhooks.rb +3 -3
  32. data/lib/pact_broker/api/resources/can_i_deploy_badge.rb +1 -1
  33. data/lib/pact_broker/api/resources/dashboard.rb +2 -2
  34. data/lib/pact_broker/api/resources/default_base_resource.rb +37 -12
  35. data/lib/pact_broker/api/resources/error_handler.rb +1 -1
  36. data/lib/pact_broker/api/resources/error_response_body_generator.rb +41 -0
  37. data/lib/pact_broker/api/resources/group.rb +1 -1
  38. data/lib/pact_broker/api/resources/integrations.rb +1 -1
  39. data/lib/pact_broker/api/resources/label.rb +1 -1
  40. data/lib/pact_broker/api/resources/latest_pact.rb +2 -2
  41. data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
  42. data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +2 -2
  43. data/lib/pact_broker/api/resources/matrix.rb +2 -2
  44. data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -1
  45. data/lib/pact_broker/api/resources/metadata_resource_methods.rb +24 -0
  46. data/lib/pact_broker/api/resources/pact.rb +4 -15
  47. data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
  48. data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +1 -1
  49. data/lib/pact_broker/api/resources/pact_version.rb +3 -0
  50. data/lib/pact_broker/api/resources/pact_versions.rb +1 -1
  51. data/lib/pact_broker/api/resources/pact_webhooks.rb +3 -3
  52. data/lib/pact_broker/api/resources/pact_webhooks_status.rb +2 -2
  53. data/lib/pact_broker/api/resources/pacticipant.rb +1 -1
  54. data/lib/pact_broker/api/resources/pacticipants.rb +3 -3
  55. data/lib/pact_broker/api/resources/pacticipants_for_label.rb +1 -1
  56. data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +1 -1
  57. data/lib/pact_broker/api/resources/provider_pacts.rb +1 -7
  58. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +2 -2
  59. data/lib/pact_broker/api/resources/relationships.rb +1 -1
  60. data/lib/pact_broker/api/resources/tag.rb +1 -1
  61. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +5 -1
  62. data/lib/pact_broker/api/resources/verification.rb +2 -2
  63. data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +1 -1
  64. data/lib/pact_broker/api/resources/verifications.rb +3 -5
  65. data/lib/pact_broker/api/resources/version.rb +1 -1
  66. data/lib/pact_broker/api/resources/versions.rb +1 -1
  67. data/lib/pact_broker/api/resources/webhook.rb +2 -2
  68. data/lib/pact_broker/api/resources/webhook_execution.rb +4 -4
  69. data/lib/pact_broker/api/resources/webhook_execution_methods.rb +1 -3
  70. data/lib/pact_broker/api/resources/webhooks.rb +3 -3
  71. data/lib/pact_broker/app.rb +9 -3
  72. data/lib/pact_broker/application_context.rb +41 -0
  73. data/lib/pact_broker/configuration.rb +12 -4
  74. data/lib/pact_broker/db/clean_incremental.rb +132 -22
  75. data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
  76. data/lib/pact_broker/doc/controllers/app.rb +3 -2
  77. data/lib/pact_broker/domain/tag.rb +42 -0
  78. data/lib/pact_broker/domain/verification.rb +87 -0
  79. data/lib/pact_broker/domain/version.rb +13 -6
  80. data/lib/pact_broker/domain/webhook_request.rb +1 -1
  81. data/lib/pact_broker/error.rb +0 -2
  82. data/lib/pact_broker/errors.rb +28 -0
  83. data/lib/pact_broker/errors/error_logger.rb +25 -0
  84. data/lib/pact_broker/metrics/service.rb +17 -4
  85. data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
  86. data/lib/pact_broker/pacts/metadata.rb +53 -8
  87. data/lib/pact_broker/pacts/repository.rb +45 -28
  88. data/lib/pact_broker/pacts/selector.rb +22 -0
  89. data/lib/pact_broker/pacts/selectors.rb +4 -0
  90. data/lib/pact_broker/services.rb +106 -31
  91. data/lib/pact_broker/tags/tag_with_latest_flag.rb +2 -0
  92. data/lib/pact_broker/tasks/clean_task.rb +9 -3
  93. data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
  94. data/lib/pact_broker/test/http_test_data_builder.rb +81 -19
  95. data/lib/pact_broker/test/test_data_builder.rb +27 -2
  96. data/lib/pact_broker/ui/views/index/_getting-started.haml +1 -1
  97. data/lib/pact_broker/ui/views/index/show-with-tags.haml +16 -16
  98. data/lib/pact_broker/ui/views/index/show.haml +6 -6
  99. data/lib/pact_broker/ui/views/layouts/main.haml +2 -2
  100. data/lib/pact_broker/ui/views/matrix/show.haml +32 -33
  101. data/lib/pact_broker/version.rb +1 -1
  102. data/lib/pact_broker/webhooks/execution_configuration.rb +4 -0
  103. data/lib/pact_broker/webhooks/execution_configuration_creator.rb +14 -0
  104. data/lib/pact_broker/webhooks/repository.rb +3 -2
  105. data/lib/pact_broker/webhooks/service.rb +2 -1
  106. data/lib/pact_broker/webhooks/triggered_webhook.rb +1 -0
  107. data/lib/sequel/extensions/statement_timeout.rb +22 -0
  108. data/optic.yml +5 -0
  109. data/pact_broker.gemspec +1 -1
  110. data/public/css/bootstrap-grid.css +3719 -0
  111. data/public/css/bootstrap-grid.css.map +1 -0
  112. data/public/css/bootstrap-grid.min.css +7 -0
  113. data/public/css/bootstrap-grid.min.css.map +1 -0
  114. data/public/css/bootstrap-reboot.css +331 -0
  115. data/public/css/bootstrap-reboot.css.map +1 -0
  116. data/public/css/bootstrap-reboot.min.css +8 -0
  117. data/public/css/bootstrap-reboot.min.css.map +1 -0
  118. data/public/css/bootstrap.css +8885 -5604
  119. data/public/css/bootstrap.css.map +1 -1
  120. data/public/css/bootstrap.min.css +4 -3
  121. data/public/css/bootstrap.min.css.map +1 -1
  122. data/public/images/alert.svg +1 -0
  123. data/public/images/arrow-switch.svg +1 -0
  124. data/public/images/check.svg +1 -0
  125. data/public/images/clock.svg +1 -0
  126. data/public/images/copy.svg +1 -0
  127. data/public/images/kebab-horizontal.svg +1 -0
  128. data/public/javascripts/clipboard.js +3 -3
  129. data/public/javascripts/{jquery-3.3.1.js → jquery-3.5.1.js} +1150 -642
  130. data/public/javascripts/jquery-3.5.1.min.js +2 -0
  131. data/public/javascripts/jquery-3.5.1.min.map +1 -0
  132. data/public/javascripts/matrix.js +2 -2
  133. data/public/js/bootstrap.bundle.js +7013 -0
  134. data/public/js/bootstrap.bundle.js.map +1 -0
  135. data/public/js/bootstrap.bundle.min.js +7 -0
  136. data/public/js/bootstrap.bundle.min.js.map +1 -0
  137. data/public/js/bootstrap.js +3862 -1804
  138. data/public/js/bootstrap.js.map +1 -0
  139. data/public/js/bootstrap.min.js +6 -6
  140. data/public/js/bootstrap.min.js.map +1 -0
  141. data/public/stylesheets/index.css +56 -3
  142. data/public/stylesheets/matrix.css +55 -5
  143. data/public/stylesheets/pact.css +14 -0
  144. data/regression/.gitignore +1 -0
  145. data/regression/can_i_deploy_spec.rb +42 -0
  146. data/regression/regression_helper.rb +37 -0
  147. data/regression/script/approval-all.sh +6 -0
  148. data/script/docker-container/test.sh +3 -0
  149. data/script/docker/db-psql.sh +3 -0
  150. data/script/docker/db-reload.sh +11 -0
  151. data/script/exercise-api-for-optic.sh +3 -0
  152. data/script/pry.rb +25 -0
  153. data/script/reproduce-issue-starting-up.rb +43 -0
  154. data/script/reproduce-issue.rb +8 -23
  155. data/script/seed.rb +1 -0
  156. data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
  157. data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
  158. data/spec/features/get_pact_spec.rb +2 -2
  159. data/spec/features/get_pact_version.rb +26 -3
  160. data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
  161. data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +1 -0
  162. data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +20 -8
  163. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +5 -7
  164. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +16 -6
  165. data/spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb +1 -1
  166. data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +65 -5
  167. data/spec/lib/pact_broker/api/resources/error_response_body_generator_spec.rb +69 -0
  168. data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
  169. data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
  170. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
  171. data/spec/lib/pact_broker/db/clean_incremental_spec.rb +9 -1
  172. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
  173. data/spec/lib/pact_broker/db/log_quietener_spec.rb +1 -1
  174. data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
  175. data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
  176. data/spec/lib/pact_broker/errors/error_logger_spec.rb +62 -0
  177. data/spec/lib/pact_broker/errors_spec.rb +55 -0
  178. data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
  179. data/spec/lib/pact_broker/pacts/metadata_spec.rb +73 -0
  180. data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +2 -2
  181. data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +33 -13
  182. data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
  183. data/spec/lib/pact_broker/pacts/selected_pact_spec.rb +23 -0
  184. data/spec/lib/pact_broker/webhooks/repository_spec.rb +5 -2
  185. data/spec/lib/pact_broker/webhooks/service_spec.rb +2 -1
  186. data/spec/migrations/change_migration_strategy_spec.rb +1 -1
  187. data/tasks/rspec.rake +6 -0
  188. metadata +70 -17
  189. data/public/css/bootstrap-theme.css +0 -587
  190. data/public/css/bootstrap-theme.css.map +0 -1
  191. data/public/css/bootstrap-theme.min.css +0 -6
  192. data/public/css/bootstrap-theme.min.css.map +0 -1
  193. data/public/fonts/glyphicons-halflings-regular.svg +0 -288
  194. data/public/javascripts/jquery-3.3.1.min.js +0 -2
  195. data/public/javascripts/jquery-3.3.1.min.map +0 -1
  196. 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: a7fe157577be6cdfb603e4607b174224781db0b9b2ee7ccb1325cdda50ce129d
4
- data.tar.gz: 9e28ef38f281ac6d6dbf1879d3794a8f915cb78bb8a82c464c7273ac9f8522dc
3
+ metadata.gz: fe978e58a9f4c7e3e190b8fd5b48ce70212bac2dcc4c0ea795565a00db6127e3
4
+ data.tar.gz: 551b0f07b25b75db367cb4a6d16ce114ab64b2541f1a452ab686145d3b5610ec
5
5
  SHA512:
6
- metadata.gz: 3e5d4d249f691a3e03725e3b827f4044eb2fde360cd0dd9128fce61a4442288083f825f654473cf1a3220745460675036951242cc801211eda258369e38eeb09
7
- data.tar.gz: f8b9f3bdbfe42ca21291b41588ae4b3be15ca53efaec275e5356d8363dfa181e592942cb5e13bbd492fadb61d231cee68aaed009fef559c0645bc4debc4137c1
6
+ metadata.gz: 87c8c396ed8dd5aaabd184a7a65a24c7ba641d11a257bfb17d3cf497e4cc9e3e33a2a761143f3c59d511e0d42c3440ea3117f186ee179aff095d917c228dd820
7
+ data.tar.gz: 5d4b9dfc5bab8f3f3671dc10011a11c925bbf2ff2edc8b3a8196c204c6bdace6bc09d8c004e3bbed438a111c202b99b01937163708da591375f8828ef02e81a4
@@ -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
- - uses: actions/setup-ruby@v1
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
@@ -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,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
 
@@ -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
- [![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)
@@ -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,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
@@ -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: .
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?
@@ -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