pact_broker 2.65.0 → 2.69.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/release_gem.yml +7 -1
  3. data/CHANGELOG.md +68 -0
  4. data/Gemfile +3 -1
  5. data/db/ddl_statements/latest_triggered_webhooks.rb +66 -0
  6. data/db/ddl_statements/latest_verification_ids_for_consumer_and_provider.rb +25 -0
  7. data/db/migrations/20180119_update_latest_triggered_webhooks.rb +5 -39
  8. data/db/migrations/20180524_create_latest_verifications_for_consumer_and_provider.rb +4 -11
  9. data/db/migrations/20180614_update_latest_verification_ids_for_consumer_and_provider.rb +6 -18
  10. data/db/migrations/20200930_update_latest_triggered_webhooks.rb +15 -0
  11. data/db/migrations/20201006_add_wip_to_verification.rb +5 -0
  12. data/db/migrations/20201023_create_verification_number_sequence.rb +20 -0
  13. data/db/migrations/20201024_create_version_order_sequence.rb +20 -0
  14. data/db/migrations/20201026_update_latest_verification_ids_for_consumer_and_provider.rb +14 -0
  15. data/db/migrations/migration_helper.rb +10 -2
  16. data/docker-compose-issue-repro.yml +18 -0
  17. data/issue-reproduction/Dockerfile-pact-broker +42 -0
  18. data/lib/db.rb +7 -1
  19. data/lib/pact/doc/interaction_view_model.rb +12 -0
  20. data/lib/pact/doc/markdown/interaction.erb +3 -3
  21. data/lib/pact/doc/markdown/interaction_renderer.rb +2 -1
  22. data/lib/pact_broker/api/decorators/decorator_context.rb +2 -2
  23. data/lib/pact_broker/api/decorators/pact_decorator.rb +8 -0
  24. data/lib/pact_broker/api/decorators/pagination_links.rb +34 -0
  25. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +4 -2
  26. data/lib/pact_broker/api/decorators/versions_decorator.rb +5 -1
  27. data/lib/pact_broker/api/pact_broker_urls.rb +18 -6
  28. data/lib/pact_broker/api/paths.rb +4 -3
  29. data/lib/pact_broker/api/resources/can_i_deploy.rb +14 -0
  30. data/lib/pact_broker/api/resources/group.rb +0 -1
  31. data/lib/pact_broker/api/resources/index.rb +1 -1
  32. data/lib/pact_broker/api/resources/label.rb +0 -1
  33. data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
  34. data/lib/pact_broker/api/resources/pact.rb +8 -0
  35. data/lib/pact_broker/api/resources/pact_content_diff.rb +1 -1
  36. data/lib/pact_broker/api/resources/pact_versions.rb +4 -0
  37. data/lib/pact_broker/api/resources/pact_webhooks.rb +1 -1
  38. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +10 -1
  39. data/lib/pact_broker/api/resources/tag.rb +0 -1
  40. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
  41. data/lib/pact_broker/api/resources/verification.rb +4 -0
  42. data/lib/pact_broker/api/resources/verifications.rb +14 -2
  43. data/lib/pact_broker/api/resources/versions.rb +12 -1
  44. data/lib/pact_broker/api/resources/webhooks.rb +1 -1
  45. data/lib/pact_broker/app.rb +2 -2
  46. data/lib/pact_broker/configuration.rb +3 -0
  47. data/lib/pact_broker/db/clean.rb +120 -43
  48. data/lib/pact_broker/doc/views/integrations.markdown +5 -1
  49. data/lib/pact_broker/doc/views/pacticipant/versions.markdown +9 -0
  50. data/lib/pact_broker/domain/pacticipant.rb +4 -0
  51. data/lib/pact_broker/domain/tag.rb +2 -0
  52. data/lib/pact_broker/domain/version.rb +1 -0
  53. data/lib/pact_broker/domain/webhook_request.rb +2 -1
  54. data/lib/pact_broker/feature_toggle.rb +8 -4
  55. data/lib/pact_broker/groups/service.rb +0 -3
  56. data/lib/pact_broker/locale/en.yml +1 -0
  57. data/lib/pact_broker/matrix/aggregated_row.rb +1 -0
  58. data/lib/pact_broker/matrix/deployment_status_summary.rb +1 -1
  59. data/lib/pact_broker/matrix/query_results_with_deployment_status_summary.rb +1 -0
  60. data/lib/pact_broker/matrix/service.rb +3 -0
  61. data/lib/pact_broker/matrix/unresolved_selector.rb +4 -0
  62. data/lib/pact_broker/pacticipants/repository.rb +6 -5
  63. data/lib/pact_broker/pacticipants/service.rb +5 -18
  64. data/lib/pact_broker/pacts/all_pact_publications.rb +1 -0
  65. data/lib/pact_broker/pacts/latest_pact_publications.rb +15 -0
  66. data/lib/pact_broker/pacts/latest_tagged_pact_publications.rb +15 -1
  67. data/lib/pact_broker/pacts/metadata.rb +5 -1
  68. data/lib/pact_broker/pacts/pact_publication.rb +1 -0
  69. data/lib/pact_broker/pacts/repository.rb +1 -0
  70. data/lib/pact_broker/pacts/verifiable_pact_messages.rb +3 -1
  71. data/lib/pact_broker/tags/repository.rb +2 -5
  72. data/lib/pact_broker/tasks/clean_task.rb +17 -3
  73. data/lib/pact_broker/test/http_test_data_builder.rb +121 -0
  74. data/lib/pact_broker/test/test_data_builder.rb +23 -3
  75. data/lib/pact_broker/ui/views/matrix/show.haml +8 -0
  76. data/lib/pact_broker/verifications/repository.rb +16 -9
  77. data/lib/pact_broker/verifications/sequence.rb +21 -16
  78. data/lib/pact_broker/verifications/service.rb +2 -1
  79. data/lib/pact_broker/version.rb +1 -1
  80. data/lib/pact_broker/versions/sequence.rb +21 -17
  81. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +1 -1
  82. data/pact_broker.gemspec +1 -1
  83. data/script/reproduce-issue.rb +20 -0
  84. data/spec/features/create_webhook_spec.rb +18 -0
  85. data/spec/features/get_versions_spec.rb +8 -0
  86. data/spec/features/wip_pacts_spec.rb +258 -33
  87. data/spec/fixtures/approvals/modifiable_resources.approved.json +74 -0
  88. data/spec/lib/pact/doc/interaction_view_model_spec.rb +46 -0
  89. data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +11 -0
  90. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +0 -3
  91. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +7 -2
  92. data/spec/lib/pact_broker/api/decorators/versions_decorator_spec.rb +14 -9
  93. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +7 -6
  94. data/spec/lib/pact_broker/api/resources/can_i_deploy_spec.rb +51 -0
  95. data/spec/lib/pact_broker/api/resources/default_base_resource_approval_spec.rb +59 -0
  96. data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +17 -6
  97. data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +2 -2
  98. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +17 -3
  99. data/spec/lib/pact_broker/db/clean_spec.rb +68 -4
  100. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +1 -1
  101. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +1 -1
  102. data/spec/lib/pact_broker/feature_toggle_spec.rb +9 -1
  103. data/spec/lib/pact_broker/matrix/integration_spec.rb +1 -1
  104. data/spec/lib/pact_broker/pacticipants/repository_spec.rb +8 -1
  105. data/spec/lib/pact_broker/pacts/latest_tagged_pact_publications_spec.rb +99 -0
  106. data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +24 -2
  107. data/spec/lib/pact_broker/verifications/sequence_spec.rb +48 -22
  108. data/spec/lib/pact_broker/verifications/service_spec.rb +4 -2
  109. data/spec/lib/pact_broker/webhooks/render_spec.rb +1 -1
  110. data/spec/lib/pact_broker/webhooks/repository_spec.rb +20 -0
  111. data/spec/spec_helper.rb +5 -0
  112. data/spec/support/markdown_pact_v3.json +44 -0
  113. data/tasks/database.rb +8 -0
  114. metadata +29 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f74ca577601716567fbf1b435dba1a2d0c8b3cec8d3c9f77ca3930ce83e49bd
4
- data.tar.gz: 3920435e5b898db13b39808b43a0f40de770674ecf99ce84e3587b4658a1b0a5
3
+ metadata.gz: 03c656c61487fd81baf9eb94f73fa12ab27bdf5cea1bd2d670af63199123b6ef
4
+ data.tar.gz: '04022874b3eeb6681e79163431ce63c8d6760741dc7ec8db30cc87b8f9257a94'
5
5
  SHA512:
6
- metadata.gz: 72e1efd36d6f4ccce34a9e7088ee0232678721606710a5d2a91f74d72ddb0b1d4642645ab26083af05683343f928818132ec37eab0b76e54efc0077fe4d474ea
7
- data.tar.gz: 0dee5c2f282ca4a21e25502a4ea2c3d11dae57931e196297f4d3fcda46f6bfec82c155899e69975f72f79c16bc34813ce38b6bd9171c4d4d45238564f0d21255
6
+ metadata.gz: ce0f9fb3186ab25c419b61665245977abfbaa8d245437699c44de54783bde86d8281b950172532d02a31f6aa33f36046dde7a0636075fabe75f3f074c33016c2
7
+ data.tar.gz: f6b8baa8a66b80b50df9223086f8e67dd9233106897b15f5cfa16328e954805de786d4fbe672f3cee5ba831001edd78f5c0a977dfc5d767d4c79aa46a61b1010
@@ -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:
@@ -1,3 +1,71 @@
1
+ <a name="v2.69.0"></a>
2
+ ### v2.69.0 (2020-11-24)
3
+
4
+ #### Features
5
+
6
+ * **wip**
7
+ * keep pacts as WIP when verified via the pactUrl passed though the webhook template parameters - experimental. ([a9b3fef0](/../../commit/a9b3fef0))
8
+
9
+ * add link to the pact content version ([8eefba5f](/../../commit/8eefba5f))
10
+ * display V3 provider states in HTML (#357) ([8e06a7f2](/../../commit/8e06a7f2))
11
+ * optimise query for determining latest verification for consumer and provider ([7889b051](/../../commit/7889b051))
12
+
13
+ #### Bug Fixes
14
+
15
+ * return a 404 when the base pact for a pact diff doesn't exist ([74d3644d](/../../commit/74d3644d))
16
+ * Add consumer name to inclusion reason log (#358) ([82901891](/../../commit/82901891))
17
+
18
+ <a name="v2.68.1"></a>
19
+ ### v2.68.1 (2020-10-24)
20
+
21
+ #### Bug Fixes
22
+
23
+ * set default User-Agent header in webhook requests ([caa71f9b](/../../commit/caa71f9b))
24
+
25
+ <a name="v2.68.0"></a>
26
+ ### v2.68.0 (2020-10-23)
27
+
28
+ #### Features
29
+
30
+ * use a sequence for the version order on postgres ([da497a76](/../../commit/da497a76))
31
+ * only cascade apps for 404s (not 405s) ([4e1b3083](/../../commit/4e1b3083))
32
+ * use a sequence for the verification number on postgres ([b8f029ee](/../../commit/b8f029ee))
33
+ * optimise query to find latest verification for pact ([db17ef5a](/../../commit/db17ef5a))
34
+
35
+ <a name="v2.67.0"></a>
36
+ ### v2.67.0 (2020-10-16)
37
+
38
+ #### Features
39
+
40
+ * **wip pacts**
41
+ * if a pact was successfully verified because it was included as a WIP pact, keep it as WIP ([16cae55d](/../../commit/16cae55d))
42
+ * add 'wip' column to verification results ([34f98592](/../../commit/34f98592))
43
+
44
+ #### Bug Fixes
45
+
46
+ * typo when rendering created webhook for old webhooks path ([1e6a06a0](/../../commit/1e6a06a0))
47
+ * include can-i-deploy badge in is_badge_path? logic ([31ea5f34](/../../commit/31ea5f34))
48
+
49
+ * **pacts for verification**
50
+ * gracefully log empty request body ([0e48d13a](/../../commit/0e48d13a))
51
+
52
+ * **can-i-deploy**
53
+ * gracefully handle pacticipant not found ([f6903b23](/../../commit/f6903b23))
54
+
55
+ <a name="v2.66.0"></a>
56
+ ### v2.66.0 (2020-10-01)
57
+
58
+ #### Features
59
+
60
+ * paginate pacticipant versions ([f489ba7b](/../../commit/f489ba7b))
61
+
62
+ * **webhooks**
63
+ * add event name to group by clause when selecting latest triggered webhooks ([134f12c8](/../../commit/134f12c8))
64
+
65
+ #### Bug Fixes
66
+
67
+ * maintain latest and tag params when submitting page after following link from can-i-deploy debug logs ([6e2f1a85](/../../commit/6e2f1a85))
68
+
1
69
  <a name="v2.65.0"></a>
2
70
  ### v2.65.0 (2020-09-25)
3
71
 
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"
@@ -0,0 +1,66 @@
1
+ # These views find the latest triggered webhook for each webhook/consumer/provider
2
+ # by finding the latest execution date for each webhook
3
+ # then taking the row with the max ID in case there there are two
4
+ # triggered webhooks for the same UUID and same creation date
5
+ # Not sure if this is strictly necessary to do the extra step, but better to be
6
+ # safe than sorry.
7
+ # I probably could just take the max ID for each webhook/consumer/provider, but
8
+ # something in my head says that
9
+ # relying on the primary key for order is not a good idea, even though
10
+ # according to the SQL it should be fine.
11
+ def latest_triggered_webhook_creation_dates_v2
12
+ "select webhook_uuid, consumer_id, provider_id, max(created_at) as latest_triggered_webhook_created_at
13
+ from triggered_webhooks
14
+ group by webhook_uuid, consumer_id, provider_id"
15
+ end
16
+
17
+ # Ignore ltwcd.latest_triggered_webhook_created_at, it's there because postgres doesn't allow you to modify
18
+ # the names and types of columns in a view
19
+ def latest_triggered_webhook_ids_v2
20
+ "select tw.webhook_uuid, tw.consumer_id, tw.provider_id, ltwcd.latest_triggered_webhook_created_at, max(tw.id) as latest_triggered_webhook_id
21
+ from latest_triggered_webhook_creation_dates ltwcd
22
+ inner join triggered_webhooks tw
23
+ on tw.consumer_id = ltwcd.consumer_id
24
+ and tw.provider_id = ltwcd.provider_id
25
+ and tw.webhook_uuid = ltwcd.webhook_uuid
26
+ and tw.created_at = ltwcd.latest_triggered_webhook_created_at
27
+ group by tw.webhook_uuid, tw.consumer_id, tw.provider_id, ltwcd.latest_triggered_webhook_created_at"
28
+ end
29
+
30
+ def latest_triggered_webhooks_v2
31
+ "select tw.*
32
+ from triggered_webhooks tw
33
+ inner join latest_triggered_webhook_ids ltwi
34
+ on tw.consumer_id = ltwi.consumer_id
35
+ and tw.provider_id = ltwi.provider_id
36
+ and tw.webhook_uuid = ltwi.webhook_uuid
37
+ and tw.id = ltwi.latest_triggered_webhook_id"
38
+ end
39
+
40
+ # use explicit columns - can't drop event_name in 20200922_add_event_to_triggered_webhook.rb
41
+ # if tw.* is used because you can't remove columns from a view in postgres
42
+ def latest_triggered_webhooks_v3_rollback(is_postgres)
43
+ if is_postgres
44
+ "select tw.id, tw.trigger_uuid, tw.trigger_type, tw.pact_publication_id, tw.webhook_id, tw.webhook_uuid, tw.consumer_id, tw.provider_id, tw.status, tw.created_at, tw.updated_at, tw.verification_id, ''::text as event_name
45
+ from triggered_webhooks tw
46
+ inner join latest_triggered_webhook_ids ltwi
47
+ on tw.consumer_id = ltwi.consumer_id
48
+ and tw.provider_id = ltwi.provider_id
49
+ and tw.webhook_uuid = ltwi.webhook_uuid
50
+ and tw.id = ltwi.latest_triggered_webhook_id"
51
+ else
52
+ latest_triggered_webhooks_v2
53
+ end
54
+ end
55
+
56
+ ##### v3
57
+
58
+ # screw dates, just use IDs.
59
+ def latest_triggered_webhooks_v3
60
+ "select tw.id, tw.trigger_uuid, tw.trigger_type, tw.pact_publication_id, tw.webhook_id, tw.webhook_uuid, tw.consumer_id, tw.provider_id, tw.status, tw.created_at, tw.updated_at, tw.verification_id, tw.event_name
61
+ from triggered_webhooks tw
62
+ inner join (select max(id) as max_id
63
+ from triggered_webhooks
64
+ group by webhook_uuid, consumer_id, provider_id, event_name) latest_ids
65
+ on latest_ids.max_id = tw.id"
66
+ end
@@ -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,44 +1,10 @@
1
+ require_relative '../ddl_statements/latest_triggered_webhooks'
2
+
1
3
  Sequel.migration do
2
4
  up do
3
- # These views find the latest triggered webhook for each webhook/consumer/provider
4
- # by finding the latest execution date for each webhook
5
- # then taking the row with the max ID in case there there are two
6
- # triggered webhooks for the same UUID and same creation date
7
- # Not sure if this is strictly necessary to do the extra step, but better to be
8
- # safe than sorry.
9
- # I probably could just take the max ID for each webhook/consumer/provider, but
10
- # something in my head says that
11
- # relying on the primary key for order is not a good idea, even though
12
- # according to the SQL it should be fine.
13
-
14
- create_or_replace_view(:latest_triggered_webhook_creation_dates,
15
- "select webhook_uuid, consumer_id, provider_id, max(created_at) as latest_triggered_webhook_created_at
16
- from triggered_webhooks
17
- group by webhook_uuid, consumer_id, provider_id"
18
- )
19
-
20
- # Ignore ltwcd.latest_triggered_webhook_created_at, it's there because postgres doesn't allow you to modify
21
- # the names and types of columns in a view
22
- create_or_replace_view(:latest_triggered_webhook_ids,
23
- "select tw.webhook_uuid, tw.consumer_id, tw.provider_id, ltwcd.latest_triggered_webhook_created_at, max(tw.id) as latest_triggered_webhook_id
24
- from latest_triggered_webhook_creation_dates ltwcd
25
- inner join triggered_webhooks tw
26
- on tw.consumer_id = ltwcd.consumer_id
27
- and tw.provider_id = ltwcd.provider_id
28
- and tw.webhook_uuid = ltwcd.webhook_uuid
29
- and tw.created_at = ltwcd.latest_triggered_webhook_created_at
30
- group by tw.webhook_uuid, tw.consumer_id, tw.provider_id, ltwcd.latest_triggered_webhook_created_at"
31
- )
32
-
33
- create_or_replace_view(:latest_triggered_webhooks,
34
- "select tw.*
35
- from triggered_webhooks tw
36
- inner join latest_triggered_webhook_ids ltwi
37
- on tw.consumer_id = ltwi.consumer_id
38
- and tw.provider_id = ltwi.provider_id
39
- and tw.webhook_uuid = ltwi.webhook_uuid
40
- and tw.id = ltwi.latest_triggered_webhook_id"
41
- )
5
+ create_or_replace_view(:latest_triggered_webhook_creation_dates, latest_triggered_webhook_creation_dates_v2)
6
+ create_or_replace_view(:latest_triggered_webhook_ids, latest_triggered_webhook_ids_v2)
7
+ create_or_replace_view(:latest_triggered_webhooks, latest_triggered_webhooks_v2)
42
8
  end
43
9
 
44
10
  down do
@@ -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,15 @@
1
+ require_relative '../ddl_statements/latest_triggered_webhooks'
2
+ require_relative 'migration_helper'
3
+
4
+ Sequel.migration do
5
+ up do
6
+ # TODO
7
+ # drop_view(:latest_triggered_webhook_ids)
8
+ # drop_view(:latest_triggered_webhook_creation_dates)
9
+ create_or_replace_view(:latest_triggered_webhooks, latest_triggered_webhooks_v3)
10
+ end
11
+
12
+ down do
13
+ create_or_replace_view(:latest_triggered_webhooks, latest_triggered_webhooks_v3_rollback(PactBroker::MigrationHelper.postgres?))
14
+ end
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
@@ -4,7 +4,7 @@ module PactBroker
4
4
  extend self
5
5
 
6
6
  def large_text_type
7
- if adapter == 'postgres'
7
+ if postgres?
8
8
  :text
9
9
  else
10
10
  # Assume mysql
@@ -13,11 +13,19 @@ module PactBroker
13
13
  end
14
14
 
15
15
  def with_mysql
16
- if adapter =~ /mysql/
16
+ if mysql?
17
17
  yield
18
18
  end
19
19
  end
20
20
 
21
+ def mysql?
22
+ adapter =~ /mysql/
23
+ end
24
+
25
+ def postgres?
26
+ adapter == 'postgres'
27
+ end
28
+
21
29
  def adapter
22
30
  Sequel::Model.db.adapter_scheme.to_s
23
31
  end
@@ -0,0 +1,18 @@
1
+ version: "3"
2
+
3
+ services:
4
+ pact-broker:
5
+ build:
6
+ context: .
7
+ dockerfile: issue-reproduction/Dockerfile-pact-broker
8
+ ports:
9
+ - "9292:9292"
10
+ command: bundle exec rackup -p 9292 -o 0.0.0.0
11
+
12
+ repro-issue:
13
+ build:
14
+ context: .
15
+ dockerfile: issue-reproduction/Dockerfile-pact-broker
16
+ depends_on:
17
+ - pact-broker
18
+ command: dockerize -wait http://pact-broker:9292 -timeout 30s /home/script/reproduce-issue.rb