pact_broker 2.59.0 → 2.61.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.
- checksums.yaml +4 -4
- data/.github/workflows/release_gem.yml +19 -6
- data/CHANGELOG.md +43 -0
- data/README.md +1 -1
- data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +10 -3
- data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +1 -0
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +5 -5
- data/lib/pact_broker/api/resources/all_webhooks.rb +1 -6
- data/lib/pact_broker/api/resources/can_i_deploy.rb +0 -4
- data/lib/pact_broker/api/resources/default_base_resource.rb +9 -0
- data/lib/pact_broker/api/resources/error_handler.rb +2 -4
- data/lib/pact_broker/api/resources/error_test.rb +4 -2
- data/lib/pact_broker/api/resources/group.rb +0 -4
- data/lib/pact_broker/api/resources/index.rb +11 -8
- data/lib/pact_broker/api/resources/integration.rb +0 -4
- data/lib/pact_broker/api/resources/integrations.rb +0 -4
- data/lib/pact_broker/api/resources/label.rb +0 -8
- data/lib/pact_broker/api/resources/latest_pact.rb +1 -5
- data/lib/pact_broker/api/resources/latest_pacts.rb +1 -5
- data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +0 -4
- data/lib/pact_broker/api/resources/matrix.rb +4 -0
- data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +4 -0
- data/lib/pact_broker/api/resources/metrics.rb +4 -0
- data/lib/pact_broker/api/resources/pact.rb +4 -8
- data/lib/pact_broker/api/resources/pact_content_diff.rb +4 -0
- data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +5 -1
- data/lib/pact_broker/api/resources/pact_versions.rb +5 -1
- data/lib/pact_broker/api/resources/pact_webhooks.rb +5 -1
- data/lib/pact_broker/api/resources/pact_webhooks_status.rb +5 -1
- data/lib/pact_broker/api/resources/pacticipant.rb +5 -9
- data/lib/pact_broker/api/resources/pacticipants.rb +0 -4
- data/lib/pact_broker/api/resources/pacticipants_for_label.rb +4 -0
- data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +4 -9
- data/lib/pact_broker/api/resources/provider_pacts.rb +1 -5
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +8 -6
- data/lib/pact_broker/api/resources/relationships.rb +4 -2
- data/lib/pact_broker/api/resources/tag.rb +5 -5
- data/lib/pact_broker/api/resources/tagged_pact_versions.rb +5 -2
- data/lib/pact_broker/api/resources/triggered_webhook_logs.rb +7 -5
- data/lib/pact_broker/api/resources/verification.rb +5 -5
- data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +6 -12
- data/lib/pact_broker/api/resources/verifications.rb +5 -5
- data/lib/pact_broker/api/resources/version.rb +5 -5
- data/lib/pact_broker/api/resources/versions.rb +5 -2
- data/lib/pact_broker/api/resources/webhook.rb +4 -0
- data/lib/pact_broker/api/resources/webhook_execution.rb +4 -0
- data/lib/pact_broker/api/resources/webhooks.rb +5 -1
- data/lib/pact_broker/app.rb +1 -1
- data/lib/pact_broker/badges/service.rb +1 -1
- data/lib/pact_broker/certificates/service.rb +2 -2
- data/lib/pact_broker/configuration.rb +10 -1
- data/lib/pact_broker/doc/views/provider-pacts-for-verification.markdown +78 -0
- data/lib/pact_broker/domain/pact.rb +9 -0
- data/lib/pact_broker/groups/service.rb +1 -1
- data/lib/pact_broker/index/service.rb +6 -0
- data/lib/pact_broker/matrix/deployment_status_summary.rb +1 -1
- data/lib/pact_broker/pacts/build_verifiable_pact_notices.rb +7 -4
- data/lib/pact_broker/pacts/content.rb +30 -5
- data/lib/pact_broker/pacts/repository.rb +25 -31
- data/lib/pact_broker/pacts/selector.rb +8 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/job.rb +8 -2
- data/lib/pact_broker/webhooks/service.rb +1 -1
- data/script/seed.rb +39 -17
- data/spec/features/get_provider_pacts_for_verification_spec.rb +8 -0
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +23 -4
- data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +10 -5
- data/spec/lib/pact_broker/api/resources/error_handler_spec.rb +18 -1
- data/spec/lib/pact_broker/api/resources/provider_pacts_for_verification_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/verification_triggered_webhooks_spec.rb +0 -1
- data/spec/lib/pact_broker/badges/service_spec.rb +1 -1
- data/spec/lib/pact_broker/certificates/service_spec.rb +3 -3
- data/spec/lib/pact_broker/pacts/content_spec.rb +90 -0
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +14 -0
- data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +62 -0
- data/spec/lib/pact_broker/webhooks/job_spec.rb +19 -1
- data/spec/lib/pact_broker/webhooks/service_spec.rb +2 -2
- data/spec/support/database_cleaner.rb +1 -5
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3495dd128672a4f4e614b7c60d93734cb3eee3799863af054963c503172d86f2
|
|
4
|
+
data.tar.gz: be415648babf90774ef011a0485835f386632768fb95b5a1f125ea9bddea2492
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aabedcd424d01dfa172424f99feac69d71ce2c55fe97f5c6b25dc1e29247168c14f0aa0d56c144c353a9444cd1cce99e14f7b677161f609ca829d00fdd2cf72c
|
|
7
|
+
data.tar.gz: a18db48c05cb2f3ae9ebc48b18673d45b4bafe19574633fef2d0ae6c21c2242a7b5cd80dab359eeccedb7044dcb1c2895b8290065fd4e7c7db5ba9c6686fefc4
|
|
@@ -24,9 +24,22 @@ jobs:
|
|
|
24
24
|
GEM_HOST_API_KEY: '${{ secrets.RUBYGEMS_API_KEY }}'
|
|
25
25
|
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
|
|
26
26
|
INCREMENT: '${{ github.event.client_payload.increment }}'
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
notify-gem-released:
|
|
28
|
+
needs: release
|
|
29
|
+
strategy:
|
|
30
|
+
matrix:
|
|
31
|
+
repository: [pact-foundation/pact-broker-docker, DiUS/pact_broker-docker]
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
steps:
|
|
34
|
+
- name: Notify ${{ matrix.repository }} of gem release
|
|
35
|
+
uses: peter-evans/repository-dispatch@v1
|
|
36
|
+
with:
|
|
37
|
+
token: ${{ secrets.GHTOKENNOTIFYPBRELEASED }}
|
|
38
|
+
repository: ${{ matrix.repository }}
|
|
39
|
+
event-type: gem-released
|
|
40
|
+
client-payload: |
|
|
41
|
+
{
|
|
42
|
+
"name": "${{ needs.release.outputs.gem_name }}",
|
|
43
|
+
"version": "${{ needs.release.outputs.version }}",
|
|
44
|
+
"increment": "${{ needs.release.outputs.increment }}"
|
|
45
|
+
}
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,46 @@
|
|
|
1
|
+
<a name="v2.61.0"></a>
|
|
2
|
+
### v2.61.0 (2020-09-12)
|
|
3
|
+
|
|
4
|
+
#### Features
|
|
5
|
+
|
|
6
|
+
* add back support for GET requests to the 'pacts for verification' API with a deprecation notice in the response ([8f45cc9f](/../../commit/8f45cc9f))
|
|
7
|
+
|
|
8
|
+
<a name="v2.60.1"></a>
|
|
9
|
+
### v2.60.1 (2020-09-10)
|
|
10
|
+
|
|
11
|
+
#### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* href for beta:provider-pacts-for-verification ([3949fdd1](/../../commit/3949fdd1))
|
|
14
|
+
|
|
15
|
+
<a name="v2.60.0"></a>
|
|
16
|
+
### v2.60.0 (2020-09-08)
|
|
17
|
+
|
|
18
|
+
#### Features
|
|
19
|
+
|
|
20
|
+
* **pacts for verification**
|
|
21
|
+
* add deprecation title to beta:provider-pacts-for-verification relation ([47a61f69](/../../commit/47a61f69))
|
|
22
|
+
* do not require environment variable feature toggle to enable feature ([7d0fe1ea](/../../commit/7d0fe1ea))
|
|
23
|
+
* allow consumer to be specified with fallback tags, and overall latest to be specified with or without a consumer ([2d52d173](/../../commit/2d52d173))
|
|
24
|
+
|
|
25
|
+
#### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* correctly handle new test results format when merging test results with pact contents ([b35ab71b](/../../commit/b35ab71b))
|
|
28
|
+
|
|
29
|
+
<a name="v2.59.2"></a>
|
|
30
|
+
### v2.59.2 (2020-08-06)
|
|
31
|
+
|
|
32
|
+
#### Bug Fixes
|
|
33
|
+
|
|
34
|
+
* gracefully handle contracts without interactions or messages in deployment status warnings ([6c223e69](/../../commit/6c223e69))
|
|
35
|
+
* add missing info level log for business level errors ([80a895bf](/../../commit/80a895bf))
|
|
36
|
+
|
|
37
|
+
<a name="v2.59.1"></a>
|
|
38
|
+
### v2.59.1 (2020-08-04)
|
|
39
|
+
|
|
40
|
+
#### Bug Fixes
|
|
41
|
+
|
|
42
|
+
* fix error rendering relationships diagram when the number of index items is greater than one page ([93a19982](/../../commit/93a19982))
|
|
43
|
+
|
|
1
44
|
<a name="v2.59.0"></a>
|
|
2
45
|
### v2.59.0 (2020-07-30)
|
|
3
46
|
|
data/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://codeclimate.com/github/pact-foundation/pact_broker)
|
|
7
7
|
[](https://codeclimate.com/github/pact-foundation/pact_broker/coverage)
|
|
8
8
|
|
|
9
|
-
The Pact Broker is an application for sharing
|
|
9
|
+
The Pact Broker is an application for sharing of consumer driven contracts and verification results. It is optimised for use with "pacts" (contracts created by the [Pact][pact-docs] framework), but can be used for any type of contract that can be serialized to JSON.
|
|
10
10
|
|
|
11
11
|
<br/>
|
|
12
12
|
<a href="https:/pactflow.io/?utm_source=github&utm_campaign=pact_broker_intro"><img src="docs/images/Pactflow logo - black small.png"></a>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'dry-validation'
|
|
2
2
|
require 'pact_broker/hash_refinements'
|
|
3
|
+
require 'pact_broker/string_refinements'
|
|
3
4
|
require 'pact_broker/api/contracts/dry_validation_workarounds'
|
|
4
5
|
require 'pact_broker/api/contracts/dry_validation_predicates'
|
|
5
6
|
|
|
@@ -9,6 +10,7 @@ module PactBroker
|
|
|
9
10
|
class VerifiablePactsJSONQuerySchema
|
|
10
11
|
extend DryValidationWorkarounds
|
|
11
12
|
using PactBroker::HashRefinements
|
|
13
|
+
using PactBroker::StringRefinements
|
|
12
14
|
|
|
13
15
|
SCHEMA = Dry::Validation.Schema do
|
|
14
16
|
configure do
|
|
@@ -24,7 +26,7 @@ module PactBroker
|
|
|
24
26
|
# end
|
|
25
27
|
# end
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
optional(:tag).filled(:str?)
|
|
28
30
|
optional(:latest).filled(included_in?: [true, false])
|
|
29
31
|
optional(:fallbackTag).filled(:str?)
|
|
30
32
|
optional(:consumer).filled(:str?, :not_blank?)
|
|
@@ -54,8 +56,9 @@ module PactBroker
|
|
|
54
56
|
errors << "fallbackTag can only be set if latest is true (at index #{index})"
|
|
55
57
|
end
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
|
|
60
|
+
if not_provided?(selector[:tag]) && selector[:latest] != true
|
|
61
|
+
errors << "latest must be true, or a tag must be provided (at index #{index})"
|
|
59
62
|
end
|
|
60
63
|
end
|
|
61
64
|
if errors.any?
|
|
@@ -64,6 +67,10 @@ module PactBroker
|
|
|
64
67
|
end
|
|
65
68
|
end
|
|
66
69
|
end
|
|
70
|
+
|
|
71
|
+
def self.not_provided?(value)
|
|
72
|
+
value.nil? || value.blank?
|
|
73
|
+
end
|
|
67
74
|
end
|
|
68
75
|
end
|
|
69
76
|
end
|
|
@@ -14,14 +14,14 @@ module PactBroker
|
|
|
14
14
|
|
|
15
15
|
property :pending,
|
|
16
16
|
if: ->(context) { context[:options][:user_options][:include_pending_status] }
|
|
17
|
-
property :wip,
|
|
18
|
-
|
|
19
|
-
property :notices,
|
|
20
|
-
|
|
17
|
+
property :wip,
|
|
18
|
+
if: -> (context) { context[:represented].wip }
|
|
19
|
+
property :notices,
|
|
20
|
+
getter: -> (context) { context[:decorator].notices(context[:options][:user_options]) }
|
|
21
21
|
|
|
22
22
|
def notices(user_options)
|
|
23
23
|
pact_url = pact_version_url(represented, user_options[:base_url])
|
|
24
|
-
PactBroker::Pacts::BuildVerifiablePactNotices.call(represented, pact_url,
|
|
24
|
+
PactBroker::Pacts::BuildVerifiablePactNotices.call(represented, pact_url, user_options)
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -202,6 +202,15 @@ module PactBroker
|
|
|
202
202
|
@pact ||= pact_service.find_pact(pact_params)
|
|
203
203
|
end
|
|
204
204
|
|
|
205
|
+
# Not necessarily an existing integration
|
|
206
|
+
def integration
|
|
207
|
+
if consumer_specified? && provider_specified?
|
|
208
|
+
OpenStruct.new(consumer: consumer, provider: provider)
|
|
209
|
+
else
|
|
210
|
+
nil
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
205
214
|
def database_connector
|
|
206
215
|
request.env["pactbroker.database_connector"]
|
|
207
216
|
end
|
|
@@ -5,11 +5,8 @@ module PactBroker
|
|
|
5
5
|
module Api
|
|
6
6
|
module Resources
|
|
7
7
|
class ErrorHandler
|
|
8
|
-
|
|
9
8
|
include PactBroker::Logging
|
|
10
9
|
|
|
11
|
-
WARNING_ERROR_CLASSES = [Sequel::ForeignKeyConstraintViolation]
|
|
12
|
-
|
|
13
10
|
def self.call e, request, response
|
|
14
11
|
error_reference = generate_error_reference
|
|
15
12
|
if log_as_warning?(e)
|
|
@@ -17,6 +14,7 @@ module PactBroker
|
|
|
17
14
|
elsif reportable?(e)
|
|
18
15
|
log_error(e, "Error reference #{error_reference}")
|
|
19
16
|
report(e, error_reference, request)
|
|
17
|
+
else
|
|
20
18
|
logger.info("Error reference #{error_reference}", e)
|
|
21
19
|
end
|
|
22
20
|
response.body = response_body_hash(e, error_reference).to_json
|
|
@@ -31,7 +29,7 @@ module PactBroker
|
|
|
31
29
|
end
|
|
32
30
|
|
|
33
31
|
def self.log_as_warning?(e)
|
|
34
|
-
|
|
32
|
+
PactBroker.configuration.warning_error_classes.any? { |clazz| e.is_a?(clazz) }
|
|
35
33
|
end
|
|
36
34
|
|
|
37
35
|
def self.display_message(e, error_reference)
|
|
@@ -4,9 +4,7 @@ require 'pact_broker/error'
|
|
|
4
4
|
module PactBroker
|
|
5
5
|
module Api
|
|
6
6
|
module Resources
|
|
7
|
-
|
|
8
7
|
class ErrorTest < BaseResource
|
|
9
|
-
|
|
10
8
|
def content_types_provided
|
|
11
9
|
[
|
|
12
10
|
["application/hal+json", :to_json]
|
|
@@ -24,6 +22,10 @@ module PactBroker
|
|
|
24
22
|
def process_post
|
|
25
23
|
raise PactBroker::TestError.new("Don't panic. This is a test API error.")
|
|
26
24
|
end
|
|
25
|
+
|
|
26
|
+
def policy_name
|
|
27
|
+
:'default'
|
|
28
|
+
end
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
end
|
|
@@ -121,6 +121,17 @@ module PactBroker
|
|
|
121
121
|
title: "Determine if an application can be safely deployed to an environment identified by the given tag",
|
|
122
122
|
templated: true
|
|
123
123
|
},
|
|
124
|
+
'pb:provider-pacts-for-verification' => {
|
|
125
|
+
href: base_url + '/pacts/provider/{provider}/for-verification',
|
|
126
|
+
title: 'Pact versions to be verified for the specified provider',
|
|
127
|
+
templated: true
|
|
128
|
+
},
|
|
129
|
+
'beta:provider-pacts-for-verification' => {
|
|
130
|
+
name: 'beta',
|
|
131
|
+
href: base_url + '/pacts/provider/{provider}/for-verification',
|
|
132
|
+
title: 'DEPRECATED - please use pb:provider-pacts-for-verification',
|
|
133
|
+
templated: true
|
|
134
|
+
},
|
|
124
135
|
'curies' =>
|
|
125
136
|
[{
|
|
126
137
|
name: 'pb',
|
|
@@ -133,14 +144,6 @@ module PactBroker
|
|
|
133
144
|
}]
|
|
134
145
|
}
|
|
135
146
|
|
|
136
|
-
if PactBroker.feature_enabled?(:pacts_for_verification)
|
|
137
|
-
links_hash['beta:provider-pacts-for-verification'] = {
|
|
138
|
-
href: base_url + '/pacts/provider/{provider}/for-verification',
|
|
139
|
-
title: 'Pact versions to be verified for the specified provider',
|
|
140
|
-
templated: true
|
|
141
|
-
}
|
|
142
|
-
end
|
|
143
|
-
|
|
144
147
|
links_hash
|
|
145
148
|
end
|
|
146
149
|
|
|
@@ -30,18 +30,10 @@ module PactBroker
|
|
|
30
30
|
!!label
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
def resource_object
|
|
34
|
-
label
|
|
35
|
-
end
|
|
36
|
-
|
|
37
33
|
def policy_name
|
|
38
34
|
:'labels::label'
|
|
39
35
|
end
|
|
40
36
|
|
|
41
|
-
def policy_record
|
|
42
|
-
label
|
|
43
|
-
end
|
|
44
|
-
|
|
45
37
|
def to_json
|
|
46
38
|
PactBroker::Api::Decorators::LabelDecorator.new(label).to_json(decorator_options)
|
|
47
39
|
end
|
|
@@ -53,14 +53,6 @@ module PactBroker
|
|
|
53
53
|
!!pact
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def resource_object
|
|
57
|
-
pact
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def policy_resource
|
|
61
|
-
pact
|
|
62
|
-
end
|
|
63
|
-
|
|
64
56
|
def from_json
|
|
65
57
|
response_code = pact ? 200 : 201
|
|
66
58
|
|
|
@@ -96,6 +88,10 @@ module PactBroker
|
|
|
96
88
|
true
|
|
97
89
|
end
|
|
98
90
|
|
|
91
|
+
def policy_name
|
|
92
|
+
:'pacts::pact'
|
|
93
|
+
end
|
|
94
|
+
|
|
99
95
|
private
|
|
100
96
|
|
|
101
97
|
def pact
|