pact_broker 2.84.0 → 2.85.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/db/migrations/20210913_add_pending_to_verifications.rb +7 -0
- data/lib/pact/doc/markdown/consumer_contract_renderer.rb +3 -3
- data/lib/pact_broker/api/decorators/reason_decorator.rb +2 -2
- data/lib/pact_broker/api/decorators/verification_summary_decorator.rb +1 -2
- data/lib/pact_broker/api/middleware/configuration.rb +33 -0
- data/lib/pact_broker/api/pact_broker_urls.rb +5 -1
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +15 -11
- data/lib/pact_broker/api/resources/pact_versions_for_branch.rb +40 -0
- data/lib/pact_broker/api/resources/verifications.rb +5 -1
- data/lib/pact_broker/api.rb +1 -0
- data/lib/pact_broker/app.rb +2 -0
- data/lib/pact_broker/badges/service.rb +3 -1
- data/lib/pact_broker/configuration.rb +33 -29
- data/lib/pact_broker/domain/verification.rb +9 -0
- data/lib/pact_broker/domain/webhook.rb +22 -10
- data/lib/pact_broker/domain/webhook_request.rb +2 -2
- data/lib/pact_broker/index/service.rb +73 -22
- data/lib/pact_broker/locale/en.yml +2 -0
- data/lib/pact_broker/pacts/metadata.rb +4 -2
- data/lib/pact_broker/pacts/pact_publication.rb +37 -0
- data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +39 -0
- data/lib/pact_broker/pacts/repository.rb +2 -1
- data/lib/pact_broker/test/http_test_data_builder.rb +1 -1
- data/lib/pact_broker/test/test_data_builder.rb +5 -1
- data/lib/pact_broker/ui/app.rb +7 -1
- data/lib/pact_broker/ui/controllers/dashboard.rb +80 -0
- data/lib/pact_broker/ui/controllers/groups.rb +23 -8
- data/lib/pact_broker/ui/helpers/url_helper.rb +5 -1
- data/lib/pact_broker/ui/view_models/index_item.rb +49 -7
- data/lib/pact_broker/ui/view_models/matrix_branch.rb +1 -1
- data/lib/pact_broker/ui/view_models/matrix_tag.rb +0 -1
- data/lib/pact_broker/ui/views/dashboard/show.haml +195 -0
- data/lib/pact_broker/ui/views/groups/show.html.erb +60 -14
- data/lib/pact_broker/ui/views/index/_dashboard_navbar.haml +7 -0
- data/lib/pact_broker/ui/views/index/_navbar.haml +0 -7
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +3 -1
- data/lib/pact_broker/ui/views/index/show.haml +35 -13
- data/lib/pact_broker/ui/views/matrix/show.haml +7 -3
- data/lib/pact_broker/verifications/pseudo_branch_status.rb +2 -0
- data/lib/pact_broker/verifications/service.rb +1 -0
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/event_listener.rb +3 -3
- data/lib/pact_broker/webhooks/execution_configuration.rb +16 -0
- data/lib/pact_broker/webhooks/execution_configuration_creator.rb +3 -0
- data/lib/pact_broker/webhooks/job.rb +1 -1
- data/lib/pact_broker/webhooks/trigger_service.rb +2 -2
- data/lib/pact_broker/webhooks/webhook_execution_result.rb +3 -7
- data/lib/pact_broker/webhooks/webhook_request_logger.rb +4 -12
- data/lib/pact_broker/webhooks/webhook_request_template.rb +6 -8
- data/pact_broker.gemspec +4 -0
- data/public/javascripts/index.js +75 -68
- data/public/javascripts/pact.js +14 -14
- data/public/stylesheets/index.css +1 -2
- data/public/stylesheets/pact.css +11 -0
- data/script/data/auto-create-things-for-tags.rb +2 -0
- data/script/data/branches.rb +2 -2
- data/script/data/contract-published-requiring-verification.rb +1 -1
- data/script/data/environments.rb +0 -0
- data/script/data/pending.rb +26 -0
- data/script/data/tags.rb +35 -0
- data/script/data/webhook.rb +22 -0
- data/script/seed.rb +50 -89
- data/spec/features/delete_pact_versions_for_branch_spec.rb +34 -0
- data/spec/fixtures/approvals/modifiable_resources.approved.json +4 -0
- data/spec/integration/app_spec.rb +6 -6
- data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +2 -2
- data/spec/lib/pact_broker/api/decorators/reason_decorator_spec.rb +2 -2
- data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +2 -0
- data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +1 -1
- data/spec/lib/pact_broker/api/middleware/configuration_spec.rb +43 -0
- data/spec/lib/pact_broker/api/resources/verifications_spec.rb +2 -3
- data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +1 -1
- data/spec/lib/pact_broker/badges/service_spec.rb +22 -0
- data/spec/lib/pact_broker/domain/webhook_request_spec.rb +2 -1
- data/spec/lib/pact_broker/domain/webhook_spec.rb +15 -5
- data/spec/lib/pact_broker/index/service_spec.rb +1 -5
- data/spec/lib/pact_broker/index/service_view_spec.rb +144 -0
- data/spec/lib/pact_broker/pacts/metadata_spec.rb +11 -2
- data/spec/lib/pact_broker/pacts/pact_publication_latest_verification_spec.rb +29 -0
- data/spec/lib/pact_broker/pacts/repository_spec.rb +15 -2
- data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +11 -8
- data/spec/lib/pact_broker/verifications/pseudo_branch_status_spec.rb +9 -1
- data/spec/lib/pact_broker/verifications/service_spec.rb +4 -2
- data/spec/lib/pact_broker/webhooks/job_spec.rb +4 -4
- data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +9 -5
- data/spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb +6 -12
- data/spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb +3 -2
- data/spec/support/generated_markdown.md +3 -3
- metadata +47 -4
- data/spec/lib/pact_broker/api/resources/webhook_execution_result_spec.rb +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78ca6573c59b514f1527988079ebeecc19f3fc33b66c7abe7fc9bf00b099c7a1
|
4
|
+
data.tar.gz: 742f05a5b5348b22aa1efd10dfe2068d76d1259182cfd533442beec8c06e764f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af16f324d2022596b678ff7c53e1ab4bcae836e12cf376fd415e581fda38e874fbf33094a21bf04c6c8545c534edd78d181326e34d7865898c52bb1915df4d14
|
7
|
+
data.tar.gz: 1c33d08f629c7db7f2ef12589c0982a5e78a1896c24d400467e26bca8389912ecc305d67ca6ea174132ff8e7c03b67b0d4f3d14a241e3355e79e612cb8cb04c5
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
<a name="v2.85.0"></a>
|
2
|
+
### v2.85.0 (2021-09-13)
|
3
|
+
|
4
|
+
#### Features
|
5
|
+
|
6
|
+
* show in the UI whether or not a pact was pending when verification failed ([326c068e](/../../commit/326c068e))
|
7
|
+
* thread safe configuration overrides (#500) ([50900231](/../../commit/50900231))
|
8
|
+
* allow dashboard pacts to be viewed by branch, tag, environment or all ([1ec8fc82](/../../commit/1ec8fc82))
|
9
|
+
* support deleting pacts by branch in the UI ([bc8fef1d](/../../commit/bc8fef1d))
|
10
|
+
* update UI ([0ba5eda3](/../../commit/0ba5eda3))
|
11
|
+
|
1
12
|
<a name="v2.84.0"></a>
|
2
13
|
### v2.84.0 (2021-09-10)
|
3
14
|
|
@@ -24,7 +24,7 @@ module Pact
|
|
24
24
|
attr_reader :consumer_contract
|
25
25
|
|
26
26
|
def title
|
27
|
-
"
|
27
|
+
"# A pact between #{consumer_name} and #{provider_name}\n\n"
|
28
28
|
end
|
29
29
|
|
30
30
|
def interaction_renderers
|
@@ -32,11 +32,11 @@ module Pact
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def summaries_title
|
35
|
-
"
|
35
|
+
"### Requests from #{consumer_name} to #{provider_name}\n\n"
|
36
36
|
end
|
37
37
|
|
38
38
|
def interactions_title
|
39
|
-
"
|
39
|
+
"### Interactions\n\n"
|
40
40
|
end
|
41
41
|
|
42
42
|
def summaries
|
@@ -45,9 +45,9 @@ module PactBroker
|
|
45
45
|
when PactBroker::Matrix::IgnoreSelectorDoesNotExist
|
46
46
|
"WARN: Cannot ignore #{reason.selector.description}"
|
47
47
|
when PactBroker::Matrix::SelectorWithoutPacticipantVersionNumberSpecified
|
48
|
-
"WARN:
|
48
|
+
"WARN: It is recommended to specify the version number (rather than the tag or branch) of the pacticipant you wish to deploy to avoid race conditions. Without a version number, this result will not be reliable."
|
49
49
|
when PactBroker::Matrix::NoEnvironmentSpecified
|
50
|
-
"WARN:
|
50
|
+
"WARN: It is recommended to specify the environment into which you are deploying. Without the environment, this result will not be reliable."
|
51
51
|
else
|
52
52
|
reason
|
53
53
|
end
|
@@ -6,9 +6,9 @@ require "ostruct"
|
|
6
6
|
module PactBroker
|
7
7
|
module Api
|
8
8
|
module Decorators
|
9
|
-
|
10
9
|
class VerificationSummaryDecorator < BaseDecorator
|
11
10
|
|
11
|
+
# TODO count pending failures?
|
12
12
|
property :success
|
13
13
|
property :provider_summary, as: :providerSummary do
|
14
14
|
property :successful
|
@@ -30,7 +30,6 @@ module PactBroker
|
|
30
30
|
successful: represented.select(&:success).collect(&:provider_name),
|
31
31
|
failed: represented.select{|verification| !verification.success }.collect(&:provider_name))
|
32
32
|
end
|
33
|
-
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "pact_broker/logging"
|
2
|
+
|
3
|
+
module PactBroker
|
4
|
+
module Api
|
5
|
+
module Middleware
|
6
|
+
class Configuration
|
7
|
+
include PactBroker::Logging
|
8
|
+
|
9
|
+
def initialize(app, configuration)
|
10
|
+
@app = app
|
11
|
+
@configuration = configuration
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env)
|
15
|
+
if (overrides = env["pactbroker.configuration_overrides"])&.any?
|
16
|
+
dupped_configuration = configuration.dup
|
17
|
+
dupped_configuration.override_runtime_configuration!(overrides)
|
18
|
+
dupped_configuration.freeze
|
19
|
+
PactBroker.set_configuration(dupped_configuration)
|
20
|
+
app.call(env)
|
21
|
+
else
|
22
|
+
PactBroker.set_configuration(configuration)
|
23
|
+
app.call(env)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :app, :configuration
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -115,6 +115,10 @@ module PactBroker
|
|
115
115
|
"#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/tag/#{url_encode(tag)}"
|
116
116
|
end
|
117
117
|
|
118
|
+
def pact_versions_for_branch_url consumer_name, provider_name, branch_name, base_url = ""
|
119
|
+
"#{base_url}/pacts/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}/branch/#{url_encode(branch_name)}"
|
120
|
+
end
|
121
|
+
|
118
122
|
def integration_url consumer_name, provider_name, base_url = ""
|
119
123
|
"#{base_url}/integrations/provider/#{url_encode(provider_name)}/consumer/#{url_encode(consumer_name)}"
|
120
124
|
end
|
@@ -311,7 +315,7 @@ module PactBroker
|
|
311
315
|
end
|
312
316
|
|
313
317
|
def group_url(pacticipant_name, base_url = "")
|
314
|
-
"#{base_url}/
|
318
|
+
"#{base_url}/pacticipants/#{url_encode(pacticipant_name)}"
|
315
319
|
end
|
316
320
|
|
317
321
|
def environments_url(base_url = "")
|
@@ -29,7 +29,7 @@ module PactBroker
|
|
29
29
|
"<html>
|
30
30
|
<head>#{head}</head>
|
31
31
|
<body>
|
32
|
-
#{pact_metadata}#{html}
|
32
|
+
#{breadcrumbs}#{pact_metadata}#{html}
|
33
33
|
</body>
|
34
34
|
</html>"
|
35
35
|
end
|
@@ -39,10 +39,10 @@ module PactBroker
|
|
39
39
|
def head
|
40
40
|
"<title>#{title}</title>
|
41
41
|
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/github.css'>
|
42
|
-
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/pact.css'>
|
43
42
|
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/github-json.css'>
|
44
43
|
<link rel='stylesheet' type='text/css' href='#{base_url}/css/bootstrap.min.css'>
|
45
44
|
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/material-menu.css'>
|
45
|
+
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/pact.css'>
|
46
46
|
<link rel='stylesheet' type='text/css' href='#{base_url}/stylesheets/jquery-confirm.min.css'>
|
47
47
|
<script src='#{base_url}/javascripts/highlight.pack.js'></script>
|
48
48
|
<script src='#{base_url}/javascripts/jquery-3.5.1.min.js'></script>
|
@@ -53,6 +53,17 @@ module PactBroker
|
|
53
53
|
<script>hljs.initHighlightingOnLoad();</script>"
|
54
54
|
end
|
55
55
|
|
56
|
+
def breadcrumbs
|
57
|
+
"
|
58
|
+
<nav aria-label=\"breadcrumb\">
|
59
|
+
<ol class=\"breadcrumb\" style=\"margin:0; margin-bottom:1rem\">
|
60
|
+
<li class=\"breadcrumb-item\" style=\"margin:0;\"><a href=\"#{base_url}/\">Home</a></li>
|
61
|
+
<li class=\"breadcrumb-item active\" aria-current=\"page\" style=\"margin:0;\">Pact</li>
|
62
|
+
</ol>
|
63
|
+
</nav>
|
64
|
+
"
|
65
|
+
end
|
66
|
+
|
56
67
|
def pact_metadata
|
57
68
|
"<div class='pact-metadata'>
|
58
69
|
<ul>
|
@@ -66,19 +77,12 @@ module PactBroker
|
|
66
77
|
<span class='name' title='#{published_date}'>Date published:</span>
|
67
78
|
<span class='value' title='#{published_date}'>#{published_date_in_words}</span>
|
68
79
|
</li>
|
69
|
-
<li>
|
70
|
-
<a href=\"#{json_url}\">View in API Browser</a>
|
71
|
-
</li>
|
72
|
-
<li>
|
73
|
-
<a href=\"#{matrix_url}\">View Matrix</a>
|
74
|
-
</li>
|
75
|
-
<li>
|
76
|
-
<a href=\"#{base_url}/\">Home</a>
|
77
|
-
</li>
|
78
80
|
<li>
|
79
81
|
<span data-consumer-name=\"#{consumer_name}\"
|
80
82
|
data-provider-name=\"#{provider_name}\"
|
81
83
|
data-consumer-version-number=\"#{consumer_version_number}\"
|
84
|
+
data-api-browser-url=\"#{json_url}\"
|
85
|
+
data-matrix-url=\"#{matrix_url}\"
|
82
86
|
data-pact-url=\"#{pact_url}\"
|
83
87
|
class='more-options kebab-horizontal'
|
84
88
|
aria-hidden='true'></span>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "pact_broker/api/resources/base_resource"
|
2
|
+
require "pact_broker/configuration"
|
3
|
+
require "pact_broker/api/decorators/tagged_pact_versions_decorator"
|
4
|
+
require "pact_broker/api/resources/pact_resource_methods"
|
5
|
+
|
6
|
+
module PactBroker
|
7
|
+
module Api
|
8
|
+
module Resources
|
9
|
+
class PactVersionsForBranch < BaseResource
|
10
|
+
include PactResourceMethods
|
11
|
+
|
12
|
+
def content_types_provided
|
13
|
+
[["application/hal+json", :to_json]]
|
14
|
+
end
|
15
|
+
|
16
|
+
def allowed_methods
|
17
|
+
["DELETE", "OPTIONS"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def resource_exists?
|
21
|
+
consumer && provider
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete_resource
|
25
|
+
pact_service.delete_all_pact_publications_between consumer_name, and: provider_name, branch_name: identifier_from_path[:branch_name]
|
26
|
+
set_post_deletion_response
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def policy_name
|
31
|
+
:'pacts::pacts'
|
32
|
+
end
|
33
|
+
|
34
|
+
def policy_pacticipant
|
35
|
+
consumer
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -84,12 +84,16 @@ module PactBroker
|
|
84
84
|
metadata[:wip] == "true"
|
85
85
|
end
|
86
86
|
|
87
|
+
def pending?
|
88
|
+
metadata[:pending]
|
89
|
+
end
|
90
|
+
|
87
91
|
def event_context
|
88
92
|
metadata
|
89
93
|
end
|
90
94
|
|
91
95
|
def verification_params
|
92
|
-
params(symbolize_names: false).merge("wip" => wip?)
|
96
|
+
params(symbolize_names: false).merge("wip" => wip?, "pending" => pending?)
|
93
97
|
end
|
94
98
|
end
|
95
99
|
end
|
data/lib/pact_broker/api.rb
CHANGED
@@ -32,6 +32,7 @@ module PactBroker
|
|
32
32
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "versions"], Api::Resources::PactVersions, {resource_name: "pact_publications"}
|
33
33
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "versions", :consumer_version_number], Api::Resources::Pact, {resource_name: "pact_publication", deprecated: true} # Not the standard URL, but keep for backwards compatibility
|
34
34
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "tag", :tag], Api::Resources::TaggedPactVersions, {resource_name: "tagged_pact_publications"}
|
35
|
+
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "branch", :branch_name], Api::Resources::PactVersionsForBranch, {resource_name: "pact_publications_for_branch"}
|
35
36
|
|
36
37
|
# Pacts
|
37
38
|
add ["pacts", "provider", :provider_name, "consumer", :consumer_name, "version", :consumer_version_number], Api::Resources::Pact, {resource_name: "pact_publication"}
|
data/lib/pact_broker/app.rb
CHANGED
@@ -25,6 +25,7 @@ require "rack/pact_broker/reset_thread_data"
|
|
25
25
|
require "rack/pact_broker/add_vary_header"
|
26
26
|
require "rack/pact_broker/use_when"
|
27
27
|
require "sucker_punch"
|
28
|
+
require "pact_broker/api/middleware/configuration"
|
28
29
|
require "pact_broker/api/middleware/basic_auth"
|
29
30
|
require "pact_broker/config/basic_auth_configuration"
|
30
31
|
require "pact_broker/api/authorization/resource_access_policy"
|
@@ -51,6 +52,7 @@ module PactBroker
|
|
51
52
|
load_configuration_from_database
|
52
53
|
seed_example_data
|
53
54
|
print_startup_message
|
55
|
+
@configuration.freeze
|
54
56
|
end
|
55
57
|
|
56
58
|
# Allows middleware to be inserted at the bottom of the shared middlware stack
|
@@ -87,6 +87,7 @@ module PactBroker
|
|
87
87
|
case pseudo_branch_verification_status
|
88
88
|
when :success then "verified"
|
89
89
|
when :failed then "failed"
|
90
|
+
when :failed_pending then "failed (pending)"
|
90
91
|
when :stale then "changed"
|
91
92
|
else "unknown"
|
92
93
|
end
|
@@ -96,6 +97,7 @@ module PactBroker
|
|
96
97
|
case pseudo_branch_verification_status
|
97
98
|
when :success then "brightgreen"
|
98
99
|
when :failed then "red"
|
100
|
+
when :failed_pending then "red"
|
99
101
|
when :stale then "orange"
|
100
102
|
else "lightgrey"
|
101
103
|
end
|
@@ -151,7 +153,7 @@ module PactBroker
|
|
151
153
|
def static_svg pact, pseudo_branch_verification_status
|
152
154
|
file_name = case pseudo_branch_verification_status
|
153
155
|
when :success then "pact-verified-brightgreen.svg"
|
154
|
-
when :failed then "pact-failed-red.svg"
|
156
|
+
when :failed, :failed_pending then "pact-failed-red.svg"
|
155
157
|
when :stale then "pact-changed-orange.svg"
|
156
158
|
else "pact-unknown-lightgrey.svg"
|
157
159
|
end
|
@@ -4,10 +4,15 @@ require "semantic_logger"
|
|
4
4
|
require "forwardable"
|
5
5
|
require "pact_broker/config/runtime_configuration"
|
6
6
|
require "anyway/auto_cast"
|
7
|
+
require "request_store"
|
7
8
|
|
8
9
|
module PactBroker
|
9
10
|
def self.configuration
|
10
|
-
|
11
|
+
RequestStore.store[:pact_broker_configuration] ||= Configuration.default_configuration
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.set_configuration(configuration)
|
15
|
+
RequestStore.store[:pact_broker_configuration] = configuration
|
11
16
|
end
|
12
17
|
|
13
18
|
def self.with_runtime_configuration_overrides(overrides, &block)
|
@@ -16,7 +21,7 @@ module PactBroker
|
|
16
21
|
|
17
22
|
# @private, for testing only
|
18
23
|
def self.reset_configuration
|
19
|
-
|
24
|
+
RequestStore.store[:pact_broker_configuration] = Configuration.default_configuration
|
20
25
|
end
|
21
26
|
|
22
27
|
class Configuration
|
@@ -83,12 +88,36 @@ module PactBroker
|
|
83
88
|
|
84
89
|
def with_runtime_configuration_overrides(overrides)
|
85
90
|
original_runtime_configuration = runtime_configuration
|
86
|
-
self.runtime_configuration = override_runtime_configuration(overrides
|
91
|
+
self.runtime_configuration = override_runtime_configuration!(overrides)
|
87
92
|
yield
|
88
93
|
ensure
|
89
94
|
self.runtime_configuration = original_runtime_configuration
|
90
95
|
end
|
91
96
|
|
97
|
+
def override_runtime_configuration!(overrides)
|
98
|
+
new_runtime_configuration = runtime_configuration.dup
|
99
|
+
valid_overrides = {}
|
100
|
+
invalid_overrides = {}
|
101
|
+
|
102
|
+
overrides.each do | key, value |
|
103
|
+
if new_runtime_configuration.respond_to?("#{key}=")
|
104
|
+
valid_overrides[key] = Anyway::AutoCast.call(value)
|
105
|
+
else
|
106
|
+
invalid_overrides[key] = Anyway::AutoCast.call(value)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
if logger.debug?
|
111
|
+
logger.debug("Overridding runtime configuration", payload: { overrides: valid_overrides, ignoring: invalid_overrides })
|
112
|
+
end
|
113
|
+
|
114
|
+
valid_overrides.each do | key, value |
|
115
|
+
new_runtime_configuration.public_send("#{key}=", value)
|
116
|
+
end
|
117
|
+
|
118
|
+
self.runtime_configuration = new_runtime_configuration
|
119
|
+
end
|
120
|
+
|
92
121
|
def logger_from_runtime_configuration
|
93
122
|
@logger_from_runtime_configuration ||= begin
|
94
123
|
runtime_configuration.validate_logging_attributes!
|
@@ -193,7 +222,7 @@ module PactBroker
|
|
193
222
|
end
|
194
223
|
|
195
224
|
def show_webhook_response?
|
196
|
-
webhook_host_whitelist
|
225
|
+
webhook_host_whitelist&.any?
|
197
226
|
end
|
198
227
|
|
199
228
|
def enable_badge_resources= enable_badge_resources
|
@@ -206,30 +235,5 @@ module PactBroker
|
|
206
235
|
require "pact_broker/config/load"
|
207
236
|
PactBroker::Config::Load.call(runtime_configuration)
|
208
237
|
end
|
209
|
-
|
210
|
-
private
|
211
|
-
|
212
|
-
def override_runtime_configuration(overrides, new_runtime_configuration)
|
213
|
-
valid_overrides = {}
|
214
|
-
invalid_overrides = {}
|
215
|
-
|
216
|
-
overrides.each do | key, value |
|
217
|
-
if new_runtime_configuration.respond_to?("#{key}=")
|
218
|
-
valid_overrides[key] = Anyway::AutoCast.call(value)
|
219
|
-
else
|
220
|
-
invalid_overrides[key] = Anyway::AutoCast.call(value)
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
if logger.debug?
|
225
|
-
logger.debug("Overridding runtime configuration", payload: { overrides: valid_overrides, ignoring: invalid_overrides })
|
226
|
-
end
|
227
|
-
|
228
|
-
valid_overrides.each do | key, value |
|
229
|
-
new_runtime_configuration.public_send("#{key}=", value)
|
230
|
-
end
|
231
|
-
|
232
|
-
new_runtime_configuration
|
233
|
-
end
|
234
238
|
end
|
235
239
|
end
|
@@ -206,6 +206,15 @@ module PactBroker
|
|
206
206
|
@pact_content_with_test_results = PactBroker::Pacts::Content.from_json(pact_version.content).with_test_results(test_results)
|
207
207
|
end
|
208
208
|
|
209
|
+
# Whether the pact content was pending at the time the verification was run
|
210
|
+
def pact_pending?
|
211
|
+
pact_pending
|
212
|
+
end
|
213
|
+
|
214
|
+
def failed_and_pact_pending?
|
215
|
+
!success && pact_pending
|
216
|
+
end
|
217
|
+
|
209
218
|
# So consumer_version_tag_name can be accessed by method name
|
210
219
|
def method_missing(m, *args, &block)
|
211
220
|
if values.key?(m) && args.size == 0
|
@@ -50,17 +50,12 @@ module PactBroker
|
|
50
50
|
def execute pact, verification, event_context, options
|
51
51
|
logger.info "Executing #{self} event_context=#{event_context}"
|
52
52
|
template_params = template_parameters(pact, verification, event_context, options)
|
53
|
-
webhook_request = request.build(template_params)
|
53
|
+
webhook_request = request.build(template_params, options.fetch(:user_agent))
|
54
54
|
http_response, error = execute_request(webhook_request)
|
55
|
-
|
56
|
-
logs = generate_logs(webhook_request, http_response, error, event_context, options.fetch(:logging_options))
|
55
|
+
success = success?(http_response, options)
|
57
56
|
http_request = webhook_request.http_request
|
58
|
-
|
59
|
-
|
60
|
-
http_response,
|
61
|
-
logs,
|
62
|
-
error
|
63
|
-
)
|
57
|
+
logs = generate_logs(webhook_request, http_response, success, error, event_context, options.fetch(:logging_options))
|
58
|
+
result(http_request, http_response, success, logs, error)
|
64
59
|
end
|
65
60
|
|
66
61
|
def to_s
|
@@ -116,16 +111,33 @@ module PactBroker
|
|
116
111
|
PactBroker::Webhooks::PactAndVerificationParameters.new(pact, verification, event_context).to_hash
|
117
112
|
end
|
118
113
|
|
119
|
-
def
|
114
|
+
def success?(http_response, options)
|
115
|
+
!http_response.nil? && options.fetch(:http_success_codes).include?(http_response.code.to_i)
|
116
|
+
end
|
117
|
+
|
118
|
+
# rubocop: disable Metrics/ParameterLists
|
119
|
+
def generate_logs(webhook_request, http_response, success, error, event_context, logging_options)
|
120
120
|
webhook_request_logger = PactBroker::Webhooks::WebhookRequestLogger.new(logging_options)
|
121
121
|
webhook_request_logger.log(
|
122
122
|
uuid,
|
123
123
|
webhook_request,
|
124
124
|
http_response,
|
125
|
+
success,
|
125
126
|
error,
|
126
127
|
event_context
|
127
128
|
)
|
128
129
|
end
|
130
|
+
# robocop: enable Metrics/ParameterLists
|
131
|
+
|
132
|
+
def result(http_request, http_response, success, logs, error)
|
133
|
+
PactBroker::Webhooks::WebhookExecutionResult.new(
|
134
|
+
http_request,
|
135
|
+
http_response,
|
136
|
+
success,
|
137
|
+
logs,
|
138
|
+
error
|
139
|
+
)
|
140
|
+
end
|
129
141
|
end
|
130
142
|
end
|
131
143
|
end
|