11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/pactflow/client/cli/provider_contract_commands.rb', line 11
def self.included(thor)
thor.class_eval do
desc 'publish-provider-contract CONTRACT_FILE ...', "Publish provider contract to PactFlow"
method_option :provider, required: true, desc: "The provider name"
method_option :provider_app_version, required: true, aliases: "-a", desc: "The provider application version"
method_option :branch, aliases: "-h", desc: "Repository branch of the provider version"
method_option :tag, aliases: "-t", type: :array, banner: "TAG", desc: "Tag name for provider version. Can be specified multiple times."
method_option :specification, default: "oas", desc: "The contract specification"
method_option :content_type, desc: "The content type. eg. application/yml"
method_option :verification_success, type: :boolean, desc: "Whether or not the self verification passed successfully."
method_option :verification_exit_code, type: :numeric, desc: "The exit code of the verification process. Can be used instead of --verification-success|--no-verification-success for a simpler build script."
method_option :verification_results, desc: "The path to the file containing the output from the verification process"
method_option :verification_results_content_type, desc: "The content type of the verification output eg. text/plain, application/yaml"
method_option :verification_results_format, desc: "The format of the verification output eg. junit, text"
method_option :verifier, desc: "The tool used to verify the provider contract"
method_option :verifier_version, desc: "The version of the tool used to verify the provider contract"
method_option :build_url, desc: "The build URL that created the provider contract"
output_option_json_or_text
shared_authentication_options
def publish_provider_contract(provider_contract_path)
require "pactflow/client/provider_contracts/publish"
validate_pact_broker_url
validate_publish_provider_contract_options(provider_contract_path)
result = ::Pactflow::Client::ProviderContracts::Publish.call(
publish_provider_contract_command_params(provider_contract_path),
command_options,
pact_broker_client_options
)
$stdout.puts result.message
exit(1) unless result.success
end
no_commands do
def command_options
{ verbose: options.verbose, output: options.output }
end
def validate_pact_broker_url
if pact_broker_client_options[:pact_broker_base_url].blank?
raise Thor::Error, "No value provided for required option --broker-base-url or environment variable PACT_BROKER_BASE_URL"
end
end
def validate_publish_provider_contract_options(provider_contract_path)
if !options.verification_success.nil? && options.verification_exit_code
raise Thor::Error, "Cannot use both --verification-success|--no-verification-success and --verification-exit-code"
end
end
def publish_provider_contract_command_params(provider_contract_path)
success = !options.verification_success.nil? ? options.verification_success : ( options.verification_exit_code && options.verification_exit_code == 0 )
{
provider_name: options.provider.strip,
provider_version_number: options.provider_app_version.strip,
branch_name: options.branch && options.branch.strip,
tags: (options.tag && options.tag.collect(&:strip)) || [],
build_url: options.build_url,
contract: {
content: File.read(provider_contract_path),
content_type: options.content_type,
specification: options.specification
},
verification_results: {
success: success,
content: options.verification_results ? File.read(options.verification_results) : nil,
content_type: options.verification_results_content_type,
format: options.verification_results_format,
verifier: options.verifier,
verifier_version: options.verifier_version
}
}
end
end
end
end
|