From 0562436b37d1d53de15eab01c8560b927de5c2e4 Mon Sep 17 00:00:00 2001 From: Beth Skurrie Date: Wed, 16 Jun 2021 19:45:08 +1000 Subject: [PATCH] feat(can-i-deploy): allow dry-run to be enabled by setting ACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true --- README.md | 14 +++++--------- lib/pact_broker/client/can_i_deploy.rb | 8 ++++++-- lib/pact_broker/client/cli/broker.rb | 5 +++-- .../can_i_deploy_failure_dry_run.approved.txt | 2 +- .../can_i_deploy_success_dry_run.approved.txt | 2 +- .../client/cli/broker_can_i_deploy_spec.rb | 12 ++++++++++++ 6 files changed, 28 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index fd07ca88..3fb4689d 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,8 @@ Options: # The pacticipant version. Must be entered after the --pacticipant that it relates to. [--ignore=IGNORE] # The pacticipant name to ignore. Use once for each pacticipant being ignored. - A specific version can be ignored by also specifying a --version after the pacticipant name option. + A specific version can be ignored by also specifying a --version after the + pacticipant name option. -l, [--latest=[TAG]] # Use the latest pacticipant version. Optionally specify a TAG to use the latest version with the specified tag. @@ -103,6 +104,9 @@ Options: # The time between retries in seconds. Use in conjuction with --retry-while-unknown # Default: 10 + [--dry-run], [--no-dry-run] + # When enabled, always exits process with a success code. Can also be enabled by setting + the environment variable PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true. -b, --broker-base-url=BROKER_BASE_URL # The base URL of the Pact Broker -u, [--broker-username=BROKER_USERNAME] @@ -113,14 +117,6 @@ Options: # Pact Broker bearer token -v, [--verbose], [--no-verbose] # Verbose output. Default: false - -Description: - Returns exit code 0 or 1, indicating whether or not the specified application (pacticipant) versions are - compatible (ie. safe to deploy). Prints out the relevant pact/verification details, indicating any - missing or failed verification results. - - The environment variables PACT_BROKER_BASE_URL, PACT_BROKER_USERNAME and PACT_BROKER_PASSWORD may be used - instead of their respective command line options. ``` Returns exit code 0 or 1, indicating whether or not the specified application (pacticipant) versions are compatible (ie. safe to deploy). Prints out the relevant pact/verification details, indicating any missing or failed verification results. diff --git a/lib/pact_broker/client/can_i_deploy.rb b/lib/pact_broker/client/can_i_deploy.rb index 1690b7b0..0ef0f08b 100644 --- a/lib/pact_broker/client/can_i_deploy.rb +++ b/lib/pact_broker/client/can_i_deploy.rb @@ -70,10 +70,14 @@ def failure_message(matrix) def computer_says(success) if success - Term::ANSIColor.green('Computer says yes \o/ ') + if dry_run? + "Computer says yes \\o/ (and maybe you don't need to enable dry run)" + else + Term::ANSIColor.green('Computer says yes \o/ ') + end else if dry_run? - "Computer says no ¯\_(ツ)_/¯ (but you're ignoring this with --dry-run)" + "Computer says no ¯\\_(ツ)_/¯ (but you're ignoring this by enabling dry run)" else Term::ANSIColor.red("Computer says no ¯\_(ツ)_/¯") end diff --git a/lib/pact_broker/client/cli/broker.rb b/lib/pact_broker/client/cli/broker.rb index f4e15007..ccabb2ae 100644 --- a/lib/pact_broker/client/cli/broker.rb +++ b/lib/pact_broker/client/cli/broker.rb @@ -37,7 +37,7 @@ class Broker < CustomThor method_option :retry_interval, banner: 'SECONDS', type: :numeric, default: 10, required: false, desc: "The time between retries in seconds. Use in conjuction with --retry-while-unknown" # Allow limit to be set manually until https://github.com/pact-foundation/pact_broker-client/issues/53 is fixed method_option :limit, hide: true - method_option :dry_run, type: :boolean, default: false, desc: "When enabled, always exits process with a success code" + method_option :dry_run, type: :boolean, default: false, desc: "When dry-run is enabled, always exit process with a success code. Can also be enabled by setting the environment variable PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true." shared_authentication_options def can_i_deploy(*ignored_but_necessary) @@ -52,7 +52,8 @@ def can_i_deploy(*ignored_but_necessary) [] end validate_can_i_deploy_selectors(selectors) - can_i_deploy_options = { output: options.output, retry_while_unknown: options.retry_while_unknown, retry_interval: options.retry_interval, dry_run: options.dry_run } + dry_run = options.dry_run || ENV["PACT_BROKER_CAN_I_DEPLOY_DRY_RUN"] == "true" + can_i_deploy_options = { output: options.output, retry_while_unknown: options.retry_while_unknown, retry_interval: options.retry_interval, dry_run: dry_run } result = CanIDeploy.call(options.broker_base_url, selectors, { to_tag: options.to, to_environment: options.to_environment, limit: options.limit, ignore_selectors: ignore_selectors }, can_i_deploy_options, pact_broker_client_options) $stdout.puts result.message $stdout.flush diff --git a/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt b/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt index c7958904..a13e6db9 100644 --- a/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt +++ b/spec/fixtures/approvals/can_i_deploy_failure_dry_run.approved.txt @@ -1,4 +1,4 @@ -[dry-run] Computer says no ¯_(ツ)_/¯ (but you're ignoring this with --dry-run) +[dry-run] Computer says no ¯\_(ツ)_/¯ (but you're ignoring this by enabling dry run) [dry-run]  [dry-run] text matrix [dry-run]  diff --git a/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt b/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt index 77c03488..44bd325a 100644 --- a/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt +++ b/spec/fixtures/approvals/can_i_deploy_success_dry_run.approved.txt @@ -1,4 +1,4 @@ -[dry-run] Computer says yes \o/ +[dry-run] Computer says yes \o/ (and maybe you don't need to enable dry run) [dry-run]  [dry-run] text matrix [dry-run]  diff --git a/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb b/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb index 50f88962..2fcf56a5 100644 --- a/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb +++ b/spec/lib/pact_broker/client/cli/broker_can_i_deploy_spec.rb @@ -95,6 +95,18 @@ module CLI end end + context "when PACT_BROKER_CAN_I_DEPLOY_DRY_RUN=true" do + before do + allow(ENV).to receive(:[]).and_call_original + allow(ENV).to receive(:[]).with("PACT_BROKER_CAN_I_DEPLOY_DRY_RUN").and_return("true") + end + + it "invokes the CanIDeploy service with dry_run set to true" do + expect(CanIDeploy).to receive(:call).with(anything, anything, anything, hash_including(dry_run: true), anything) + invoke_can_i_deploy + end + end + context "when successful" do it "prints the message to stdout" do expect($stdout).to receive(:puts).with(message)