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.
- checksums.yaml +4 -4
- data/.github/workflows/release_gem.yml +7 -1
- data/CHANGELOG.md +68 -0
- data/Gemfile +3 -1
- data/db/ddl_statements/latest_triggered_webhooks.rb +66 -0
- data/db/ddl_statements/latest_verification_ids_for_consumer_and_provider.rb +25 -0
- data/db/migrations/20180119_update_latest_triggered_webhooks.rb +5 -39
- data/db/migrations/20180524_create_latest_verifications_for_consumer_and_provider.rb +4 -11
- data/db/migrations/20180614_update_latest_verification_ids_for_consumer_and_provider.rb +6 -18
- data/db/migrations/20200930_update_latest_triggered_webhooks.rb +15 -0
- data/db/migrations/20201006_add_wip_to_verification.rb +5 -0
- data/db/migrations/20201023_create_verification_number_sequence.rb +20 -0
- data/db/migrations/20201024_create_version_order_sequence.rb +20 -0
- data/db/migrations/20201026_update_latest_verification_ids_for_consumer_and_provider.rb +14 -0
- data/db/migrations/migration_helper.rb +10 -2
- data/docker-compose-issue-repro.yml +18 -0
- data/issue-reproduction/Dockerfile-pact-broker +42 -0
- data/lib/db.rb +7 -1
- data/lib/pact/doc/interaction_view_model.rb +12 -0
- data/lib/pact/doc/markdown/interaction.erb +3 -3
- data/lib/pact/doc/markdown/interaction_renderer.rb +2 -1
- data/lib/pact_broker/api/decorators/decorator_context.rb +2 -2
- data/lib/pact_broker/api/decorators/pact_decorator.rb +8 -0
- data/lib/pact_broker/api/decorators/pagination_links.rb +34 -0
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +4 -2
- data/lib/pact_broker/api/decorators/versions_decorator.rb +5 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +18 -6
- data/lib/pact_broker/api/paths.rb +4 -3
- data/lib/pact_broker/api/resources/can_i_deploy.rb +14 -0
- data/lib/pact_broker/api/resources/group.rb +0 -1
- data/lib/pact_broker/api/resources/index.rb +1 -1
- data/lib/pact_broker/api/resources/label.rb +0 -1
- data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
- data/lib/pact_broker/api/resources/pact.rb +8 -0
- data/lib/pact_broker/api/resources/pact_content_diff.rb +1 -1
- data/lib/pact_broker/api/resources/pact_versions.rb +4 -0
- data/lib/pact_broker/api/resources/pact_webhooks.rb +1 -1
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +10 -1
- data/lib/pact_broker/api/resources/tag.rb +0 -1
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
- data/lib/pact_broker/api/resources/verification.rb +4 -0
- data/lib/pact_broker/api/resources/verifications.rb +14 -2
- data/lib/pact_broker/api/resources/versions.rb +12 -1
- data/lib/pact_broker/api/resources/webhooks.rb +1 -1
- data/lib/pact_broker/app.rb +2 -2
- data/lib/pact_broker/configuration.rb +3 -0
- data/lib/pact_broker/db/clean.rb +120 -43
- data/lib/pact_broker/doc/views/integrations.markdown +5 -1
- data/lib/pact_broker/doc/views/pacticipant/versions.markdown +9 -0
- data/lib/pact_broker/domain/pacticipant.rb +4 -0
- data/lib/pact_broker/domain/tag.rb +2 -0
- data/lib/pact_broker/domain/version.rb +1 -0
- data/lib/pact_broker/domain/webhook_request.rb +2 -1
- data/lib/pact_broker/feature_toggle.rb +8 -4
- data/lib/pact_broker/groups/service.rb +0 -3
- data/lib/pact_broker/locale/en.yml +1 -0
- data/lib/pact_broker/matrix/aggregated_row.rb +1 -0
- data/lib/pact_broker/matrix/deployment_status_summary.rb +1 -1
- data/lib/pact_broker/matrix/query_results_with_deployment_status_summary.rb +1 -0
- data/lib/pact_broker/matrix/service.rb +3 -0
- data/lib/pact_broker/matrix/unresolved_selector.rb +4 -0
- data/lib/pact_broker/pacticipants/repository.rb +6 -5
- data/lib/pact_broker/pacticipants/service.rb +5 -18
- data/lib/pact_broker/pacts/all_pact_publications.rb +1 -0
- data/lib/pact_broker/pacts/latest_pact_publications.rb +15 -0
- data/lib/pact_broker/pacts/latest_tagged_pact_publications.rb +15 -1
- data/lib/pact_broker/pacts/metadata.rb +5 -1
- data/lib/pact_broker/pacts/pact_publication.rb +1 -0
- data/lib/pact_broker/pacts/repository.rb +1 -0
- data/lib/pact_broker/pacts/verifiable_pact_messages.rb +3 -1
- data/lib/pact_broker/tags/repository.rb +2 -5
- data/lib/pact_broker/tasks/clean_task.rb +17 -3
- data/lib/pact_broker/test/http_test_data_builder.rb +121 -0
- data/lib/pact_broker/test/test_data_builder.rb +23 -3
- data/lib/pact_broker/ui/views/matrix/show.haml +8 -0
- data/lib/pact_broker/verifications/repository.rb +16 -9
- data/lib/pact_broker/verifications/sequence.rb +21 -16
- data/lib/pact_broker/verifications/service.rb +2 -1
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/versions/sequence.rb +21 -17
- data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +1 -1
- data/pact_broker.gemspec +1 -1
- data/script/reproduce-issue.rb +20 -0
- data/spec/features/create_webhook_spec.rb +18 -0
- data/spec/features/get_versions_spec.rb +8 -0
- data/spec/features/wip_pacts_spec.rb +258 -33
- data/spec/fixtures/approvals/modifiable_resources.approved.json +74 -0
- data/spec/lib/pact/doc/interaction_view_model_spec.rb +46 -0
- data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +11 -0
- data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +0 -3
- data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +7 -2
- data/spec/lib/pact_broker/api/decorators/versions_decorator_spec.rb +14 -9
- data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +7 -6
- data/spec/lib/pact_broker/api/resources/can_i_deploy_spec.rb +51 -0
- data/spec/lib/pact_broker/api/resources/default_base_resource_approval_spec.rb +59 -0
- data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +17 -6
- data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +2 -2
- data/spec/lib/pact_broker/api/resources/verifications_spec.rb +17 -3
- data/spec/lib/pact_broker/db/clean_spec.rb +68 -4
- data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +1 -1
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +1 -1
- data/spec/lib/pact_broker/feature_toggle_spec.rb +9 -1
- data/spec/lib/pact_broker/matrix/integration_spec.rb +1 -1
- data/spec/lib/pact_broker/pacticipants/repository_spec.rb +8 -1
- data/spec/lib/pact_broker/pacts/latest_tagged_pact_publications_spec.rb +99 -0
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +24 -2
- data/spec/lib/pact_broker/verifications/sequence_spec.rb +48 -22
- data/spec/lib/pact_broker/verifications/service_spec.rb +4 -2
- data/spec/lib/pact_broker/webhooks/render_spec.rb +1 -1
- data/spec/lib/pact_broker/webhooks/repository_spec.rb +20 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/support/markdown_pact_v3.json +44 -0
- data/tasks/database.rb +8 -0
- metadata +29 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03c656c61487fd81baf9eb94f73fa12ab27bdf5cea1bd2d670af63199123b6ef
|
4
|
+
data.tar.gz: '04022874b3eeb6681e79163431ce63c8d6760741dc7ec8db30cc87b8f9257a94'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
-
|
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:
|
data/CHANGELOG.md
CHANGED
@@ -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', '~>
|
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
|
-
|
4
|
-
|
5
|
-
|
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
|
5
|
+
# The latest verification id for each consumer/provider
|
4
6
|
create_view(:latest_verification_ids_for_consumer_and_provider,
|
5
|
-
|
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
|
5
|
+
# The latest verification id for each consumer/provider
|
4
6
|
create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
|
5
|
-
|
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
|
11
|
+
# The latest verification id for each consumer/provider
|
15
12
|
create_or_replace_view(:latest_verification_ids_for_consumer_and_provider,
|
16
|
-
|
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,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
|
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
|
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
|