diff --git a/cli/app/rollback.go b/cli/app/rollback.go index 2f7e67b6..6ffff04b 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -109,15 +109,19 @@ EXAMPLE: if specificVersion != "" { parsedDeployedVersion, err := tagcmp.Parse(deployMeta.Version) if err != nil { - log.Fatal(err) + log.Fatalf("'%s' is not a known version for %s", deployMeta.Version, app.Recipe.Name) } parsedSpecificVersion, err := tagcmp.Parse(specificVersion) if err != nil { - log.Fatal(err) + log.Fatalf("'%s' is not a known version for %s", specificVersion, app.Recipe.Name) } - if parsedSpecificVersion.IsGreaterThan(parsedDeployedVersion) || parsedSpecificVersion.Equals(parsedDeployedVersion) { + if parsedSpecificVersion.IsGreaterThan(parsedDeployedVersion) && !parsedSpecificVersion.Equals(parsedDeployedVersion) { + log.Fatalf("%s is not a downgrade for %s?", deployMeta.Version, specificVersion) + } + + if parsedSpecificVersion.Equals(parsedDeployedVersion) && !internal.Force { log.Fatalf("%s is not a downgrade for %s?", deployMeta.Version, specificVersion) } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index e34d537d..74ffef28 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -108,15 +108,21 @@ EXAMPLE: if specificVersion != "" { parsedDeployedVersion, err := tagcmp.Parse(deployMeta.Version) if err != nil { - log.Fatal(err) + log.Fatalf("'%s' is not a known version for %s", deployMeta.Version, app.Recipe.Name) } parsedSpecificVersion, err := tagcmp.Parse(specificVersion) if err != nil { - log.Fatal(err) + log.Fatalf("'%s' is not a known version for %s", specificVersion, app.Recipe.Name) } - if parsedSpecificVersion.IsLessThan(parsedDeployedVersion) || parsedSpecificVersion.Equals(parsedDeployedVersion) { + + if parsedSpecificVersion.IsLessThan(parsedDeployedVersion) && !parsedSpecificVersion.Equals(parsedDeployedVersion) { log.Fatalf("%s is not an upgrade for %s?", deployMeta.Version, specificVersion) } + + if parsedSpecificVersion.Equals(parsedDeployedVersion) && !internal.Force { + log.Fatalf("%s is not an upgrade for %s?", deployMeta.Version, specificVersion) + } + availableUpgrades = append(availableUpgrades, specificVersion) } diff --git a/tests/integration/app_rollback.bats b/tests/integration/app_rollback.bats index 5662336d..f1ec824d 100644 --- a/tests/integration/app_rollback.bats +++ b/tests/integration/app_rollback.bats @@ -111,6 +111,26 @@ teardown(){ assert_output --partial "0.1.0+1.20.0" } +# bats test_tags=slow +@test "force rollback to previous version" { + run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.1+1.20.2" --no-input --no-converge-checks + assert_success + assert_output --partial '0.1.1+1.20.2' + + run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input --no-converge-checks + assert_success + assert_output --partial "0.1.0+1.20.0" + + run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input --no-converge-checks + assert_failure + assert_output --partial "not a downgrade" + + run $ABRA app rollback "$TEST_APP_DOMAIN" "0.1.0+1.20.0" \ + --no-input --no-converge-checks --force + assert_success + assert_output --partial "0.1.0+1.20.0" +} + # bats test_tags=slow @test "rollback to a version 2 tags behind" { run $ABRA app deploy "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input --no-converge-checks diff --git a/tests/integration/app_upgrade.bats b/tests/integration/app_upgrade.bats index a970f07b..4bbfd96c 100644 --- a/tests/integration/app_upgrade.bats +++ b/tests/integration/app_upgrade.bats @@ -97,6 +97,26 @@ teardown(){ assert_output --partial '0.2.0+1.21.0' } +# bats test_tags=slow +@test "force upgrade specific version" { + run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input --no-converge-checks + assert_success + assert_output --partial '0.1.0+1.20.0' + + run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input --no-converge-checks + assert_success + assert_output --partial '0.2.0+1.21.0' + + run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" --no-input --no-converge-checks + assert_failure + assert_output --partial 'not an upgrade' + + run $ABRA app upgrade "$TEST_APP_DOMAIN" "0.2.0+1.21.0" \ + --no-input --no-converge-checks --force + assert_success + assert_output --partial '0.2.0+1.21.0' +} + # bats test_tags=slow @test "upgrade to latest" { run $ABRA app deploy "$TEST_APP_DOMAIN" "0.1.0+1.20.0" --no-input --no-converge-checks