pact_broker 2.66.0 → 2.70.0

Sign up to get free protection for your applications and to get access to all the features.
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