pact_broker-client 1.37.1 → 1.38.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/CHANGELOG.md +3 -0
- data/lib/pact_broker/client/cli/broker.rb +36 -1
- data/lib/pact_broker/client/hal/entity.rb +17 -0
- data/lib/pact_broker/client/hal/http_client.rb +1 -1
- data/lib/pact_broker/client/version.rb +1 -1
- data/lib/pact_broker/client/versions/record_undeployment.rb +125 -0
- data/pact-broker-client.gemspec +1 -1
- data/script/record-deployment.sh +4 -0
- data/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb +36 -4
- data/spec/spec_helper.rb +2 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ff434f0cdc2c246e13875eb094bf057cada5e72e6049aace2387a344ba35aa2
|
4
|
+
data.tar.gz: 508a60bac06506938f425a64eefe63d0fb56ca4b3f32df54bf8d41c9773e6fa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4150fdf1cc5cb1970b60d07f646b151bae9fc56f68422b22a1265d64bb9f99b559ca01d7c688e1fdd047a08fb69c1d0cb28c3cd2be3370285d739cd1a9f36b0d
|
7
|
+
data.tar.gz: 91ee03c84a4ebec001ef2f2fb3c1dcc47e41a2f55b97e2b23101f99fa58a9114ffa199beb160deabc5f395ba8dc4a01cdd2901d73db2c4263ca444ec37d4b22e
|
data/CHANGELOG.md
CHANGED
@@ -39,7 +39,7 @@ module PactBroker
|
|
39
39
|
can_i_deploy_options = { output: options.output, retry_while_unknown: options.retry_while_unknown, retry_interval: options.retry_interval }
|
40
40
|
result = CanIDeploy.call(options.broker_base_url, selectors, { to_tag: options.to, to_environment: options.to_environment, limit: options.limit }, can_i_deploy_options, pact_broker_client_options)
|
41
41
|
$stdout.puts result.message
|
42
|
-
exit(
|
42
|
+
exit(can_i_deploy_exit_status) unless result.success
|
43
43
|
end
|
44
44
|
|
45
45
|
desc 'publish PACT_DIRS_OR_FILES ...', "Publish pacts to a Pact Broker."
|
@@ -197,6 +197,31 @@ module PactBroker
|
|
197
197
|
exit(1) unless result.success
|
198
198
|
end
|
199
199
|
|
200
|
+
ignored_and_hidden_potential_options_from_environment_variables
|
201
|
+
desc "record-undeployment", "Record undeployment of (or the end of support for) a pacticipant version from an environment"
|
202
|
+
method_option :pacticipant, required: true, aliases: "-a", desc: "The name of the pacticipant that was deployed."
|
203
|
+
method_option :version, required: true, aliases: "-e", desc: "The pacticipant version number that was deployed."
|
204
|
+
method_option :environment, required: true, desc: "The name of the environment that the pacticipant version was deployed to."
|
205
|
+
method_option :output, aliases: "-o", desc: "json or text", default: 'text'
|
206
|
+
shared_authentication_options
|
207
|
+
|
208
|
+
def record_undeployment
|
209
|
+
require 'pact_broker/client/versions/record_undeployment'
|
210
|
+
params = {
|
211
|
+
pacticipant_name: options.pacticipant,
|
212
|
+
version_number: options.version,
|
213
|
+
environment_name: options.environment,
|
214
|
+
output: options.output
|
215
|
+
}
|
216
|
+
result = PactBroker::Client::Versions::RecordUndeployment.call(
|
217
|
+
params,
|
218
|
+
options.broker_base_url,
|
219
|
+
pact_broker_client_options
|
220
|
+
)
|
221
|
+
$stdout.puts result.message
|
222
|
+
exit(1) unless result.success
|
223
|
+
end
|
224
|
+
|
200
225
|
end
|
201
226
|
|
202
227
|
ignored_and_hidden_potential_options_from_environment_variables
|
@@ -213,6 +238,16 @@ module PactBroker
|
|
213
238
|
true
|
214
239
|
end
|
215
240
|
|
241
|
+
def can_i_deploy_exit_status
|
242
|
+
exit_code_string = ENV.fetch('PACT_BROKER_CAN_I_DEPLOY_EXIT_STATUS_BETA', '')
|
243
|
+
if exit_code_string =~ /^\d+$/
|
244
|
+
$stderr.puts "Exiting can-i-deploy with configured exit code #{exit_code_string}"
|
245
|
+
exit_code_string.to_i
|
246
|
+
else
|
247
|
+
1
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
216
251
|
def validate_credentials
|
217
252
|
if options.broker_username && options.broker_token
|
218
253
|
raise AuthError, "You cannot provide both a username/password and a bearer token. If your Pact Broker uses a bearer token, please remove the username and password configuration."
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'erb'
|
2
2
|
require 'delegate'
|
3
|
+
require 'pact_broker/client/error'
|
3
4
|
require 'pact_broker/client/hal/link'
|
4
5
|
require 'pact_broker/client/hal/links'
|
5
6
|
|
@@ -73,6 +74,22 @@ module PactBroker
|
|
73
74
|
_links(key) or raise RelationNotFoundError.new("Could not find relation '#{key}' in resource at #{@href}")
|
74
75
|
end
|
75
76
|
|
77
|
+
def embedded_entity
|
78
|
+
embedded_ent = yield @data["_embedded"]
|
79
|
+
Entity.new(embedded_ent["_links"]["self"]["href"], embedded_ent, @client, response)
|
80
|
+
end
|
81
|
+
|
82
|
+
def embedded_entities(key = nil)
|
83
|
+
embedded_ents = if key
|
84
|
+
@data["_embedded"][key]
|
85
|
+
else
|
86
|
+
yield @data["_embedded"]
|
87
|
+
end
|
88
|
+
embedded_ents.collect do | embedded_ent |
|
89
|
+
Entity.new(embedded_ent["_links"]["self"]["href"], embedded_ent, @client, response)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
76
93
|
def success?
|
77
94
|
true
|
78
95
|
end
|
@@ -17,7 +17,7 @@ module PactBroker
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def get href, params = {}, headers = {}
|
20
|
-
query = params.collect{ |(key, value)| "#{CGI::escape(key)}=#{CGI::escape(value)}" }.join("&")
|
20
|
+
query = params.collect{ |(key, value)| "#{CGI::escape(key.to_s)}=#{CGI::escape(value)}" }.join("&")
|
21
21
|
uri = URI(href)
|
22
22
|
uri.query = query
|
23
23
|
perform_request(create_request(uri, 'Get', nil, headers), uri)
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'pact_broker/client/hal_client_methods'
|
2
|
+
require 'pact_broker/client/error'
|
3
|
+
require 'pact_broker/client/command_result'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Client
|
7
|
+
class Versions
|
8
|
+
class RecordUndeployment
|
9
|
+
include PactBroker::Client::HalClientMethods
|
10
|
+
|
11
|
+
NOT_SUPPORTED_MESSAGE = "This version of the Pact Broker does not support recording undeployments. Please upgrade to version 2.80.0 or later."
|
12
|
+
|
13
|
+
def self.call(params, pact_broker_base_url, pact_broker_client_options)
|
14
|
+
new(params, pact_broker_base_url, pact_broker_client_options).call
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(params, pact_broker_base_url, pact_broker_client_options)
|
18
|
+
@pact_broker_base_url = pact_broker_base_url
|
19
|
+
@pacticipant_name = params.fetch(:pacticipant_name)
|
20
|
+
@version_number = params.fetch(:version_number)
|
21
|
+
@environment_name = params.fetch(:environment_name)
|
22
|
+
@output = params.fetch(:output)
|
23
|
+
@pact_broker_client_options = pact_broker_client_options
|
24
|
+
end
|
25
|
+
|
26
|
+
def call
|
27
|
+
check_environment_exists
|
28
|
+
# record_undeployment
|
29
|
+
|
30
|
+
PactBroker::Client::CommandResult.new(true, result_message)
|
31
|
+
rescue PactBroker::Client::Error => e
|
32
|
+
PactBroker::Client::CommandResult.new(false, e.message)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :pact_broker_base_url, :pact_broker_client_options
|
38
|
+
attr_reader :pacticipant_name, :version_number, :environment_name, :replaced_previous_deployed_version, :output
|
39
|
+
attr_reader :deployed_version_resource
|
40
|
+
|
41
|
+
def check_environment_exists
|
42
|
+
deployed_versions = currently_deployed_versions_for_pacticipant
|
43
|
+
.get(version: version_number)
|
44
|
+
.embedded_entities("deployedVersions")
|
45
|
+
deployed_versions
|
46
|
+
end
|
47
|
+
|
48
|
+
def currently_deployed_versions_for_pacticipant
|
49
|
+
@currently_deployed_versions_for_pacticipant ||= index_resource
|
50
|
+
._link!("pb:environments")
|
51
|
+
.get!(name: environment_name)
|
52
|
+
.embedded_entities("environments")
|
53
|
+
.tap { |it| raise "Environment not found '#{environment_name}'" if it.empty? }
|
54
|
+
.first
|
55
|
+
._link!("pb:currently-deployed-versions-for-pacticipant")
|
56
|
+
.expand(pacticipant: pacticipant_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
def currently_deployed_versions_for_pacticipant_version
|
60
|
+
@currently_deployed_versions ||= currently_deployed_versions_for_pacticipant
|
61
|
+
.get(version: version_number)
|
62
|
+
.embedded_entities("deployedVersions")
|
63
|
+
end
|
64
|
+
|
65
|
+
# def record_deployment
|
66
|
+
# @deployed_version_resource =
|
67
|
+
# get_record_deployment_relation
|
68
|
+
# .post(record_deployment_request_body)
|
69
|
+
# .assert_success!
|
70
|
+
# end
|
71
|
+
|
72
|
+
# def get_record_deployment_relation
|
73
|
+
# record_deployment_links = get_pacticipant_version._links!("pb:record-deployment")
|
74
|
+
# link_for_environment = record_deployment_links.find(environment_name)
|
75
|
+
# if link_for_environment
|
76
|
+
# link_for_environment
|
77
|
+
# else
|
78
|
+
# check_environment_exists
|
79
|
+
# # Force the exception to be raised
|
80
|
+
# record_deployment_links.find!(environment_name, "Environment '#{environment_name}' is not an available option for recording a deployment of #{pacticipant_name}.")
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
|
84
|
+
# def get_pacticipant_version
|
85
|
+
# index_resource
|
86
|
+
# ._link!("pb:pacticipant-version")
|
87
|
+
# .expand(pacticipant: pacticipant_name, version: version_number)
|
88
|
+
# .get
|
89
|
+
# .assert_success!(404 => "#{pacticipant_name} version #{version_number} not found")
|
90
|
+
# end
|
91
|
+
|
92
|
+
# def record_deployment_request_body
|
93
|
+
# { replacedPreviousDeployedVersion: replaced_previous_deployed_version }
|
94
|
+
# end
|
95
|
+
|
96
|
+
def result_message
|
97
|
+
""
|
98
|
+
# if output == "text"
|
99
|
+
# message = "Recorded deployment of #{pacticipant_name} version #{version_number} to #{environment_name} in #{pact_broker_name}."
|
100
|
+
# suffix = replaced_previous_deployed_version ? " Marked previous deployed version as undeployed." : ""
|
101
|
+
# message + suffix
|
102
|
+
# elsif output == "json"
|
103
|
+
# deployed_version_resource.response.raw_body
|
104
|
+
# else
|
105
|
+
# ""
|
106
|
+
# end
|
107
|
+
end
|
108
|
+
|
109
|
+
def pact_broker_name
|
110
|
+
is_pactflow? ? "Pactflow" : "the Pact Broker"
|
111
|
+
end
|
112
|
+
|
113
|
+
def is_pactflow?
|
114
|
+
deployed_version_resource.response.headers.keys.any?{ | header_name | header_name.downcase.include?("pactflow") }
|
115
|
+
end
|
116
|
+
|
117
|
+
def check_if_command_supported
|
118
|
+
unless index_resource.can?("pb:environments")
|
119
|
+
raise PactBroker::Client::Error.new(NOT_SUPPORTED_MESSAGE)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
data/pact-broker-client.gemspec
CHANGED
@@ -32,5 +32,5 @@ Gem::Specification.new do |gem|
|
|
32
32
|
gem.add_development_dependency 'webmock', '~> 3.0'
|
33
33
|
gem.add_development_dependency 'conventional-changelog', '~>1.3'
|
34
34
|
gem.add_development_dependency 'pact', '~> 1.16'
|
35
|
-
gem.add_development_dependency 'pact-support', '1.
|
35
|
+
gem.add_development_dependency 'pact-support', '~> 1.16'
|
36
36
|
end
|
@@ -113,13 +113,45 @@ module PactBroker
|
|
113
113
|
end
|
114
114
|
|
115
115
|
it "exits with code 1" do
|
116
|
-
|
116
|
+
exited_explicitly = false
|
117
|
+
exited_explicitlyerror = nil
|
117
118
|
begin
|
118
119
|
invoke_can_i_deploy
|
119
|
-
rescue SystemExit
|
120
|
-
|
120
|
+
rescue SystemExit => e
|
121
|
+
exited_explicitly = true
|
122
|
+
error = e
|
123
|
+
end
|
124
|
+
expect(exited_explicitly).to be true
|
125
|
+
expect(error.status).to be 1
|
126
|
+
end
|
127
|
+
|
128
|
+
context "when an exit status is specified" do
|
129
|
+
before do
|
130
|
+
allow(ENV).to receive(:fetch).and_call_original
|
131
|
+
allow(ENV).to receive(:fetch).with('PACT_BROKER_CAN_I_DEPLOY_EXIT_STATUS_BETA', '').and_return("0")
|
132
|
+
end
|
133
|
+
|
134
|
+
it "exits with the specified code" do
|
135
|
+
exited_explicitly = false
|
136
|
+
error = nil
|
137
|
+
begin
|
138
|
+
invoke_can_i_deploy
|
139
|
+
rescue SystemExit => e
|
140
|
+
exited_explicitly = true
|
141
|
+
error = e
|
142
|
+
end
|
143
|
+
expect(exited_explicitly).to be true
|
144
|
+
expect(error.status).to be 0
|
145
|
+
end
|
146
|
+
|
147
|
+
it "prints the configured exit code" do
|
148
|
+
expect($stderr).to receive(:puts).with("Exiting can-i-deploy with configured exit code 0")
|
149
|
+
expect($stdout).to receive(:puts).with(message)
|
150
|
+
begin
|
151
|
+
invoke_can_i_deploy
|
152
|
+
rescue SystemExit
|
153
|
+
end
|
121
154
|
end
|
122
|
-
expect(exited_with_error).to be true
|
123
155
|
end
|
124
156
|
end
|
125
157
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.38.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beth Skurrie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -160,16 +160,16 @@ dependencies:
|
|
160
160
|
name: pact-support
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
|
-
- -
|
163
|
+
- - "~>"
|
164
164
|
- !ruby/object:Gem::Version
|
165
|
-
version: 1.
|
165
|
+
version: '1.16'
|
166
166
|
type: :development
|
167
167
|
prerelease: false
|
168
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
169
|
requirements:
|
170
|
-
- -
|
170
|
+
- - "~>"
|
171
171
|
- !ruby/object:Gem::Version
|
172
|
-
version: 1.
|
172
|
+
version: '1.16'
|
173
173
|
description: Client for the Pact Broker. Publish, retrieve and query pacts and verification
|
174
174
|
results.
|
175
175
|
email:
|
@@ -249,6 +249,7 @@ files:
|
|
249
249
|
- lib/pact_broker/client/versions/formatter.rb
|
250
250
|
- lib/pact_broker/client/versions/json_formatter.rb
|
251
251
|
- lib/pact_broker/client/versions/record_deployment.rb
|
252
|
+
- lib/pact_broker/client/versions/record_undeployment.rb
|
252
253
|
- lib/pact_broker/client/versions/text_formatter.rb
|
253
254
|
- lib/pact_broker/client/webhooks/create.rb
|
254
255
|
- lib/pact_broker/client/webhooks/test.rb
|
@@ -257,6 +258,7 @@ files:
|
|
257
258
|
- script/create-pacticipant.sh
|
258
259
|
- script/generate-cli-usage.sh
|
259
260
|
- script/publish-pact.sh
|
261
|
+
- script/record-deployment.sh
|
260
262
|
- script/release.sh
|
261
263
|
- script/trigger-release.sh
|
262
264
|
- spec/integration/can_i_deploy_spec.rb
|
@@ -337,7 +339,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
337
339
|
- !ruby/object:Gem::Version
|
338
340
|
version: '0'
|
339
341
|
requirements: []
|
340
|
-
rubygems_version: 3.2.
|
342
|
+
rubygems_version: 3.2.15
|
341
343
|
signing_key:
|
342
344
|
specification_version: 4
|
343
345
|
summary: See description
|