pact_broker 2.66.0 → 2.70.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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release_gem.yml +7 -1
  3. data/.github/workflows/test.yml +62 -0
  4. data/CHANGELOG.md +70 -0
  5. data/DEVELOPER_SETUP.md +6 -0
  6. data/Dockerfile +4 -3
  7. data/Gemfile +7 -1
  8. data/ISSUES.md +23 -0
  9. data/config/database.yml +14 -0
  10. data/db/ddl_statements/latest_verification_ids_for_consumer_and_provider.rb +25 -0
  11. data/db/migrations/20180524_create_latest_verifications_for_consumer_and_provider.rb +4 -11
  12. data/db/migrations/20180614_update_latest_verification_ids_for_consumer_and_provider.rb +6 -18
  13. data/db/migrations/20201006_add_wip_to_verification.rb +5 -0
  14. data/db/migrations/20201023_create_verification_number_sequence.rb +20 -0
  15. data/db/migrations/20201024_create_version_order_sequence.rb +20 -0
  16. data/db/migrations/20201026_update_latest_verification_ids_for_consumer_and_provider.rb +14 -0
  17. data/docker-compose-issue-repro.yml +22 -0
  18. data/issue-reproduction/Dockerfile-pact-broker +42 -0
  19. data/lib/db.rb +7 -1
  20. data/lib/pact/doc/interaction_view_model.rb +12 -0
  21. data/lib/pact/doc/markdown/interaction.erb +3 -3
  22. data/lib/pact/doc/markdown/interaction_renderer.rb +2 -1
  23. data/lib/pact_broker/api/decorators/pact_decorator.rb +8 -0
  24. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +4 -2
  25. data/lib/pact_broker/api/pact_broker_urls.rb +10 -6
  26. data/lib/pact_broker/api/paths.rb +4 -3
  27. data/lib/pact_broker/api/resources/can_i_deploy.rb +14 -0
  28. data/lib/pact_broker/api/resources/clean.rb +36 -0
  29. data/lib/pact_broker/api/resources/group.rb +5 -2
  30. data/lib/pact_broker/api/resources/label.rb +0 -1
  31. data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
  32. data/lib/pact_broker/api/resources/pact.rb +8 -0
  33. data/lib/pact_broker/api/resources/pact_content_diff.rb +1 -1
  34. data/lib/pact_broker/api/resources/pact_versions.rb +4 -0
  35. data/lib/pact_broker/api/resources/pact_webhooks.rb +1 -1
  36. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +1 -2
  37. data/lib/pact_broker/api/resources/tag.rb +0 -1
  38. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
  39. data/lib/pact_broker/api/resources/verification.rb +4 -0
  40. data/lib/pact_broker/api/resources/verifications.rb +14 -2
  41. data/lib/pact_broker/api/resources/webhooks.rb +1 -1
  42. data/lib/pact_broker/app.rb +2 -2
  43. data/lib/pact_broker/configuration.rb +3 -0
  44. data/lib/pact_broker/db/clean.rb +34 -11
  45. data/lib/pact_broker/db/clean_incremental.rb +78 -0
  46. data/lib/pact_broker/doc/views/integrations.markdown +5 -1
  47. data/lib/pact_broker/domain/tag.rb +69 -8
  48. data/lib/pact_broker/domain/verification.rb +6 -0
  49. data/lib/pact_broker/domain/version.rb +35 -1
  50. data/lib/pact_broker/domain/webhook_request.rb +2 -1
  51. data/lib/pact_broker/groups/service.rb +0 -3
  52. data/lib/pact_broker/locale/en.yml +1 -0
  53. data/lib/pact_broker/logging.rb +7 -0
  54. data/lib/pact_broker/matrix/aggregated_row.rb +1 -0
  55. data/lib/pact_broker/matrix/deployment_status_summary.rb +1 -1
  56. data/lib/pact_broker/matrix/query_results_with_deployment_status_summary.rb +1 -0
  57. data/lib/pact_broker/matrix/unresolved_selector.rb +12 -0
  58. data/lib/pact_broker/pacts/all_pact_publications.rb +2 -3
  59. data/lib/pact_broker/pacts/latest_pact_publications.rb +15 -0
  60. data/lib/pact_broker/pacts/metadata.rb +5 -1
  61. data/lib/pact_broker/pacts/pact_publication.rb +8 -1
  62. data/lib/pact_broker/pacts/repository.rb +5 -2
  63. data/lib/pact_broker/pacts/verifiable_pact_messages.rb +3 -1
  64. data/lib/pact_broker/tasks/clean_task.rb +34 -4
  65. data/lib/pact_broker/test/http_test_data_builder.rb +168 -0
  66. data/lib/pact_broker/test/test_data_builder.rb +1 -1
  67. data/lib/pact_broker/verifications/repository.rb +16 -9
  68. data/lib/pact_broker/verifications/sequence.rb +21 -16
  69. data/lib/pact_broker/verifications/service.rb +2 -1
  70. data/lib/pact_broker/version.rb +1 -1
  71. data/lib/pact_broker/versions/sequence.rb +21 -17
  72. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +1 -1
  73. data/lib/pact_broker/webhooks/triggered_webhook.rb +6 -0
  74. data/pact_broker.gemspec +1 -1
  75. data/script/docker/db-start.sh +1 -1
  76. data/script/reproduce-issue.rb +43 -0
  77. data/spec/features/create_webhook_spec.rb +18 -0
  78. data/spec/features/wip_pacts_spec.rb +258 -33
  79. data/spec/fixtures/approvals/modifiable_resources.approved.json +77 -0
  80. data/spec/lib/pact/doc/interaction_view_model_spec.rb +46 -0
  81. data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +11 -0
  82. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +0 -3
  83. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +7 -2
  84. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +7 -6
  85. data/spec/lib/pact_broker/api/resources/can_i_deploy_spec.rb +51 -0
  86. data/spec/lib/pact_broker/api/resources/default_base_resource_approval_spec.rb +59 -0
  87. data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +7 -2
  88. data/spec/lib/pact_broker/api/resources/group_spec.rb +9 -7
  89. data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +2 -2
  90. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +17 -3
  91. data/spec/lib/pact_broker/db/clean_incremental_spec.rb +93 -0
  92. data/spec/lib/pact_broker/db/clean_spec.rb +4 -8
  93. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +1 -1
  94. data/spec/lib/pact_broker/domain/tag_spec.rb +46 -0
  95. data/spec/lib/pact_broker/domain/verification_spec.rb +13 -0
  96. data/spec/lib/pact_broker/domain/version_spec.rb +23 -0
  97. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +1 -1
  98. data/spec/lib/pact_broker/matrix/integration_spec.rb +1 -1
  99. data/spec/lib/pact_broker/pacts/latest_tagged_pact_publications_spec.rb +1 -1
  100. data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +3 -1
  101. data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +38 -3
  102. data/spec/lib/pact_broker/verifications/sequence_spec.rb +48 -22
  103. data/spec/lib/pact_broker/verifications/service_spec.rb +4 -2
  104. data/spec/lib/pact_broker/webhooks/render_spec.rb +1 -1
  105. data/spec/spec_helper.rb +5 -0
  106. data/spec/support/markdown_pact_v3.json +44 -0
  107. data/tasks/database.rb +8 -0
  108. metadata +31 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ded381f9c89732b48d2d27f1f9dc7c26708a54c407c6a777a0f698c221d03b5
4
- data.tar.gz: 9ac73a1fde0c35b5cc5870e8006556bcc74a5c3765d86ba373b9a91040657b14
3
+ metadata.gz: b57a2f04694ce119675cd5b4fb647e1c2faff71b890958391ca30846ef0d7fab
4
+ data.tar.gz: 8b6484329b0821600417fc17ad564a14de06edf2edc21939423c34ea2795cee1
5
5
  SHA512:
6
- metadata.gz: 15667e1349e7ff6a2484016659d1eee0a26d95471ea6f0f959135f72b2fcf68714a550421a1ff239efa089514ef0064a07602cd84c22f60fedfc82b30a2337a0
7
- data.tar.gz: e1c836e2cc3b82096ee5d03c9fe215e5010a7b0eef2aad43781a8713e5e8f8b987fbc86c19d5b5c95c819831a6d07f953a3b8b552d6104b3daddc5a1e62680d0
6
+ metadata.gz: e4d1c82adbbb041f38d64200ccb0f1fc8d4672f3a9e445db0dcf428b25c8353c5922a3fb579b74560114df476886fb8aee93d2b793643ae9bbbbd8f786fec443
7
+ data.tar.gz: dc130a9cea4a62c741c401290b385f807c4597073a1ae467d3b334bd058267eca2179ebb6be60d53c2f6cf7046c7b567edf473738a2642e122d1c6e40938301a
@@ -19,11 +19,17 @@ jobs:
19
19
  # checkInterval: 15
20
20
  # env:
21
21
  # GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
22
- - uses: pact-foundation/release-gem@v0.0.11
22
+ - id: release-gem
23
+ uses: pact-foundation/release-gem@v0.0.11
23
24
  env:
24
25
  GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_API_KEY }}'
25
26
  GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
26
27
  INCREMENT: '${{ github.event.client_payload.increment }}'
28
+ outputs:
29
+ gem_name: "${{ steps.release-gem.outputs.gem_name }}"
30
+ version: "${{ steps.release-gem.outputs.version }}"
31
+ increment: "${{ steps.release-gem.outputs.increment }}"
32
+
27
33
  notify-gem-released:
28
34
  needs: release
29
35
  strategy:
@@ -0,0 +1,62 @@
1
+ name: Test
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ postgres:
7
+ runs-on: "ubuntu-latest"
8
+ strategy:
9
+ matrix:
10
+ ruby_version: ["2.5", "2.7"]
11
+ services:
12
+ postgres:
13
+ image: postgres
14
+ env:
15
+ POSTGRES_PASSWORD: postgres
16
+ options: >-
17
+ --health-cmd pg_isready
18
+ --health-interval 10s
19
+ --health-timeout 5s
20
+ --health-retries 5
21
+ ports:
22
+ - 5432:5432
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ - uses: actions/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby_version }}
28
+ - run: "bundle install"
29
+ env:
30
+ INSTALL_PG: "true"
31
+ - run: "bundle exec rake"
32
+ env:
33
+ DATABASE_ADAPTER: github_actions_postgres
34
+ INSTALL_PG: "true"
35
+ mysql:
36
+ runs-on: "ubuntu-latest"
37
+ strategy:
38
+ matrix:
39
+ ruby_version: ["2.5", "2.7"]
40
+ steps:
41
+ - uses: actions/checkout@v2
42
+ - uses: actions/setup-ruby@v1
43
+ with:
44
+ ruby-version: ${{ matrix.ruby_version }}
45
+ - uses: mirromutth/mysql-action@v1.1
46
+ with:
47
+ host port: 3306 # Optional, default value is 3306. The port of host
48
+ #container port: 3307 # Optional, default value is 3306. The port of container
49
+ character set server: 'utf8' # Optional, default value is 'utf8mb4'. The '--character-set-server' option for mysqld
50
+ collation server: 'utf8_general_ci' # Optional, default value is 'utf8mb4_general_ci'. The '--collation-server' option for mysqld
51
+ mysql version: '8.0' # Optional, default value is "latest". The version of the MySQL
52
+ mysql database: 'pact_broker' # Optional, default value is "test". The specified database which will be create
53
+ mysql root password: 'pact_broker' # Required if "mysql user" is empty, default is empty. The root superuser password
54
+ mysql user: 'pact_broker' # Required if "mysql root password" is empty, default is empty. The superuser for the specified database. Can use secrets, too
55
+ mysql password: 'pact_broker' # Required if "mysql user" exists. The password for the "mysql user"
56
+ - run: "bundle install"
57
+ env:
58
+ INSTALL_MYSQL: "true"
59
+ - run: "bundle exec rake"
60
+ env:
61
+ DATABASE_ADAPTER: github_actions_mysql
62
+ INSTALL_MYSQL: "true"
@@ -1,3 +1,73 @@
1
+ <a name="v2.70.0"></a>
2
+ ### v2.70.0 (2020-11-28)
3
+
4
+ #### Features
5
+
6
+ * allow limit to be applied to clean task ([d29e5c62](/../../commit/d29e5c62))
7
+ * optimise the query to load the tags with latest flags ([bc47613f](/../../commit/bc47613f))
8
+ * optimise query to find head tags for a pact ([67309e37](/../../commit/67309e37))
9
+
10
+ * **wip pacts**
11
+ * experimental feature - if no provider versions exist, consider all head pacts wip ([a635cc53](/../../commit/a635cc53))
12
+
13
+ #### Bug Fixes
14
+
15
+ * return empty body when group csv is requested for a pacticipant that does not have any integrations ([fb4e28ce](/../../commit/fb4e28ce))
16
+
17
+ <a name="v2.69.0"></a>
18
+ ### v2.69.0 (2020-11-24)
19
+
20
+ #### Features
21
+
22
+ * **wip**
23
+ * keep pacts as WIP when verified via the pactUrl passed though the webhook template parameters - experimental. ([a9b3fef0](/../../commit/a9b3fef0))
24
+
25
+ * add link to the pact content version ([8eefba5f](/../../commit/8eefba5f))
26
+ * display V3 provider states in HTML (#357) ([8e06a7f2](/../../commit/8e06a7f2))
27
+ * optimise query for determining latest verification for consumer and provider ([7889b051](/../../commit/7889b051))
28
+
29
+ #### Bug Fixes
30
+
31
+ * return a 404 when the base pact for a pact diff doesn't exist ([74d3644d](/../../commit/74d3644d))
32
+ * Add consumer name to inclusion reason log (#358) ([82901891](/../../commit/82901891))
33
+
34
+ <a name="v2.68.1"></a>
35
+ ### v2.68.1 (2020-10-24)
36
+
37
+ #### Bug Fixes
38
+
39
+ * set default User-Agent header in webhook requests ([caa71f9b](/../../commit/caa71f9b))
40
+
41
+ <a name="v2.68.0"></a>
42
+ ### v2.68.0 (2020-10-23)
43
+
44
+ #### Features
45
+
46
+ * use a sequence for the version order on postgres ([da497a76](/../../commit/da497a76))
47
+ * only cascade apps for 404s (not 405s) ([4e1b3083](/../../commit/4e1b3083))
48
+ * use a sequence for the verification number on postgres ([b8f029ee](/../../commit/b8f029ee))
49
+ * optimise query to find latest verification for pact ([db17ef5a](/../../commit/db17ef5a))
50
+
51
+ <a name="v2.67.0"></a>
52
+ ### v2.67.0 (2020-10-16)
53
+
54
+ #### Features
55
+
56
+ * **wip pacts**
57
+ * if a pact was successfully verified because it was included as a WIP pact, keep it as WIP ([16cae55d](/../../commit/16cae55d))
58
+ * add 'wip' column to verification results ([34f98592](/../../commit/34f98592))
59
+
60
+ #### Bug Fixes
61
+
62
+ * typo when rendering created webhook for old webhooks path ([1e6a06a0](/../../commit/1e6a06a0))
63
+ * include can-i-deploy badge in is_badge_path? logic ([31ea5f34](/../../commit/31ea5f34))
64
+
65
+ * **pacts for verification**
66
+ * gracefully log empty request body ([0e48d13a](/../../commit/0e48d13a))
67
+
68
+ * **can-i-deploy**
69
+ * gracefully handle pacticipant not found ([f6903b23](/../../commit/f6903b23))
70
+
1
71
  <a name="v2.66.0"></a>
2
72
  ### v2.66.0 (2020-10-01)
3
73
 
@@ -28,6 +28,12 @@ This allows you to open a shell to a development environment where you can run t
28
28
 
29
29
  Remember to rebuild the image if you change any of the gems or gem versions.
30
30
 
31
+ * Run the server on the docker image
32
+
33
+ ```sh
34
+ docker run --rm -v $(PWD):/home -w /home --entrypoint /bin/sh -p 9292:9292 -it pact_broker:dev /usr/local/bin/start
35
+ ```
36
+
31
37
  ### With native install
32
38
 
33
39
  * You will need to install Ruby 2.5, and preferably a ruby version manager. I recommend using [chruby][chruby] and [ruby-install][ruby-install].
data/Dockerfile CHANGED
@@ -26,6 +26,7 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSI
26
26
 
27
27
 
28
28
  COPY Gemfile /home/Gemfile
29
+ COPY Gemfile.lock /home/Gemfile.lock
29
30
  COPY pact_broker.gemspec /home/pact_broker.gemspec
30
31
  COPY lib/pact_broker/version.rb /home/lib/pact_broker/version.rb
31
32
  COPY .gitignore /home/.gitignore
@@ -33,9 +34,9 @@ COPY .gitignore /home/.gitignore
33
34
  RUN gem install bundler -v '~>2.0.0' \
34
35
  && bundle install --jobs 3 --retry 3
35
36
 
36
- RUN echo '#!/bin/sh' >> /home/start.sh
37
- RUN echo 'bundle exec rackup -o 0.0.0.0 -p 9292' >> /home/start.sh
38
- RUN chmod +x /home/start.sh
37
+ RUN echo '#!/bin/sh' >> /usr/local/bin/start
38
+ RUN echo 'bundle exec rackup -o 0.0.0.0 -p 9292' >> /usr/local/bin/start
39
+ RUN chmod +x /usr/local/bin/start
39
40
 
40
41
  RUN echo '#!/bin/sh' >> /home/init-db.sh
41
42
  RUN echo 'bundle exec rake db:prepare:test' >> /home/init-db.sh
data/Gemfile CHANGED
@@ -18,13 +18,15 @@ group :test do
18
18
  gem 'rspec-pact-matchers', '~>0.1'
19
19
  gem 'bundler-audit', '~>0.4'
20
20
  gem 'fakefs', '~>0.4'
21
- gem 'webmock', '~>2.3'
21
+ gem 'webmock', '~>3.9'
22
22
  gem 'rspec', '~>3.0'
23
23
  gem 'rspec-its', '~>1.2'
24
24
  gem 'database_cleaner', '~>1.8', '>= 1.8.1'
25
25
  gem 'timecop', '~> 0.9'
26
26
  gem 'faraday', '~>0.15'
27
+ gem 'faraday_middleware', '~> 0.14'
27
28
  gem 'docker-api', '~>1.34'
29
+ gem 'approvals', '>=0.0.1', '<1.0.0'
28
30
  end
29
31
 
30
32
  if ENV['INSTALL_MYSQL'] == "true"
@@ -34,3 +36,7 @@ end
34
36
  if ENV['INSTALL_PG'] == 'true'
35
37
  gem 'pg', '~>1.2'
36
38
  end
39
+
40
+ if ENV['X_PACT_DEVELOPMENT'] == 'true'
41
+ gem 'pact-support', path: '../pact-support'
42
+ end
@@ -0,0 +1,23 @@
1
+ # Issues
2
+
3
+ ## Reproducing an issue
4
+
5
+ In [script/reproduce-issue.rb](script/reproduce-issue.rb) you will find a fluent API that allows you to simulate client libraries interacting with the Pact Broker.
6
+
7
+ You can use it to easily reproduce issues.
8
+
9
+ To use it:
10
+
11
+ * Run the Pact Broker using the latest development code:
12
+
13
+ ```
14
+ docker-compose -f docker-compose-issue-repro.yml up --build pact-broker
15
+ ```
16
+
17
+ * Run the reproduction script.
18
+
19
+ ```
20
+ docker-compose -f docker-compose-issue-repro.yml up repro-issue
21
+ ```
22
+
23
+ You can modify `script/reproduce-issue.rb` and then re-run it with the change applied.
@@ -36,6 +36,20 @@ test:
36
36
  <<: *default
37
37
  adapter: mysql2
38
38
  host: "192.168.0.9"
39
+ github_actions_postgres:
40
+ adapter: postgres
41
+ database: postgres
42
+ username: postgres
43
+ password: postgres
44
+ host: localhost
45
+ port: "5432"
46
+ github_actions_mysql:
47
+ adapter: mysql2
48
+ database: pact_broker
49
+ username: pact_broker
50
+ password: pact_broker
51
+ host: localhost
52
+ port: 3306
39
53
 
40
54
  development:
41
55
  default:
@@ -0,0 +1,25 @@
1
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V1 = "select
2
+ pv.pacticipant_id as provider_id,
3
+ lpp.consumer_id,
4
+ max(v.id) as latest_verification_id
5
+ from verifications v
6
+ join latest_pact_publications_by_consumer_versions lpp
7
+ on v.pact_version_id = lpp.pact_version_id
8
+ join versions pv
9
+ on v.provider_version_id = pv.id
10
+ group by pv.pacticipant_id, lpp.consumer_id"
11
+
12
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V2 = "select
13
+ provider_id,
14
+ consumer_id,
15
+ max(id) as latest_verification_id
16
+ from verifications v
17
+ group by provider_id, consumer_id"
18
+
19
+
20
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V3 = "select
21
+ provider_id,
22
+ consumer_id,
23
+ max(verification_id) as latest_verification_id
24
+ from latest_verification_id_for_pact_version_and_provider_version v
25
+ group by provider_id, consumer_id"
@@ -1,17 +1,10 @@
1
+ require_relative '../ddl_statements/latest_verification_ids_for_consumer_and_provider'
2
+
1
3
  Sequel.migration do
2
4
  up do
3
- # The latest verification id for each consumer version tag
5
+ # The latest verification id for each consumer/provider
4
6
  create_view(:latest_verification_ids_for_consumer_and_provider,
5
- "select
6
- pv.pacticipant_id as provider_id,
7
- lpp.consumer_id,
8
- max(v.id) as latest_verification_id
9
- from verifications v
10
- join latest_pact_publications_by_consumer_versions lpp
11
- on v.pact_version_id = lpp.pact_version_id
12
- join versions pv
13
- on v.provider_version_id = pv.id
14
- group by pv.pacticipant_id, lpp.consumer_id")
7
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V1)
15
8
 
16
9
  # The most recent verification for each consumer/consumer version tag/provider
17
10
  latest_verifications = from(:verifications)
@@ -1,27 +1,15 @@
1
+ require_relative '../ddl_statements/latest_verification_ids_for_consumer_and_provider'
2
+
1
3
  Sequel.migration do
2
4
  up do
3
- # The latest verification id for each consumer version tag
5
+ # The latest verification id for each consumer/provider
4
6
  create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
5
- "select
6
- provider_id,
7
- consumer_id,
8
- max(id) as latest_verification_id
9
- from verifications v
10
- group by provider_id, consumer_id")
7
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V2)
11
8
  end
12
9
 
13
10
  down do
14
- # The latest verification id for each consumer version tag
11
+ # The latest verification id for each consumer/provider
15
12
  create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
16
- "select
17
- pv.pacticipant_id as provider_id,
18
- lpp.consumer_id,
19
- max(v.id) as latest_verification_id
20
- from verifications v
21
- join latest_pact_publications_by_consumer_versions lpp
22
- on v.pact_version_id = lpp.pact_version_id
23
- join versions pv
24
- on v.provider_version_id = pv.id
25
- group by pv.pacticipant_id, lpp.consumer_id")
13
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V1)
26
14
  end
27
15
  end
@@ -0,0 +1,5 @@
1
+ Sequel.migration do
2
+ change do
3
+ add_column(:verifications, :wip, TrueClass, default: false, null: false)
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'migration_helper'
2
+
3
+ Sequel.migration do
4
+ up do
5
+ if PactBroker::MigrationHelper.postgres?
6
+ row = from(:verification_sequence_number).select(:value).limit(1).first
7
+ start = row ? row[:value] + 100 : 1
8
+ run("CREATE SEQUENCE verification_number_sequence START WITH #{start}")
9
+ end
10
+ end
11
+
12
+ down do
13
+ if PactBroker::MigrationHelper.postgres?
14
+ nextval = execute("SELECT nextval('verification_number_sequence') as val") { |v| v.first["val"].to_i }
15
+ # Add a safety margin!
16
+ from(:verification_sequence_number).update(value: nextval + 100)
17
+ run("DROP SEQUENCE verification_number_sequence")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'migration_helper'
2
+
3
+ Sequel.migration do
4
+ up do
5
+ if PactBroker::MigrationHelper.postgres?
6
+ row = from(:version_sequence_number).select(:value).limit(1).first
7
+ start = row ? row[:value] + 100 : 1
8
+ run("CREATE SEQUENCE version_order_sequence START WITH #{start}")
9
+ end
10
+ end
11
+
12
+ down do
13
+ if PactBroker::MigrationHelper.postgres?
14
+ nextval = execute("SELECT nextval('version_order_sequence') as val") { |v| v.first["val"].to_i }
15
+ # Add a safety margin!
16
+ from(:version_sequence_number).update(value: nextval + 100)
17
+ run("DROP SEQUENCE version_order_sequence")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'migration_helper'
2
+ require_relative '../ddl_statements/latest_verification_ids_for_consumer_and_provider'
3
+
4
+ Sequel.migration do
5
+ up do
6
+ create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
7
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V3)
8
+ end
9
+
10
+ down do
11
+ create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
12
+ LATEST_VERIFICATION_IDS_FOR_CONSUMER_AND_PROVIDER_V2)
13
+ end
14
+ end
@@ -0,0 +1,22 @@
1
+ version: "3"
2
+
3
+ services:
4
+ pact-broker:
5
+ build: .
6
+ ports:
7
+ - "9292:9292"
8
+ entrypoint: /usr/local/bin/start
9
+ environment:
10
+ - RACK_ENV=production
11
+ volumes:
12
+ - $PWD:/home
13
+
14
+ repro-issue:
15
+ build: .
16
+ depends_on:
17
+ - pact-broker
18
+ command: dockerize -wait http://pact-broker:9292 -timeout 30s /home/script/reproduce-issue.rb
19
+ environment:
20
+ - PACT_BROKER_BASE_URL=http://pact-broker:9292
21
+ volumes:
22
+ - $PWD:/home