pact_broker 2.65.0 → 2.69.0

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