pact_broker 2.71.0 → 2.75.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.
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