From 9cb54950fca6fbf15687c38292aabe7568d3a6ab Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 13 Mar 2024 06:53:05 -0400 Subject: [PATCH] fix: correct issue where removing by index failed due to incorrect input validation Closes #6657 --- plugins/buildpacks/functions.go | 2 +- plugins/buildpacks/subcommands.go | 2 +- tests/unit/buildpacks.bats | 34 +++++++++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/plugins/buildpacks/functions.go b/plugins/buildpacks/functions.go index 04f933b3d0e..f3545233e84 100644 --- a/plugins/buildpacks/functions.go +++ b/plugins/buildpacks/functions.go @@ -44,7 +44,7 @@ func rewriteBuildpacksFile(sourceWorkDir string) error { func validBuildpackURL(buildpack string) (string, error) { if buildpack == "" { - return buildpack, errors.New("Must specify a buildpack to add") + return buildpack, errors.New("Must specify a buildpack url or reference") } reHerokuValue := regexp.MustCompile(`(?m)^([\w-]+\/[\w-]+)$`) diff --git a/plugins/buildpacks/subcommands.go b/plugins/buildpacks/subcommands.go index 9a49ffabc98..c52bd9b4c0e 100644 --- a/plugins/buildpacks/subcommands.go +++ b/plugins/buildpacks/subcommands.go @@ -65,7 +65,7 @@ func CommandRemove(appName string, buildpack string, index int) (err error) { } buildpack, err = validBuildpackURL(buildpack) - if err != nil { + if index == 0 && err != nil { return err } diff --git a/tests/unit/buildpacks.bats b/tests/unit/buildpacks.bats index acef7630762..e4d24fb394d 100644 --- a/tests/unit/buildpacks.bats +++ b/tests/unit/buildpacks.bats @@ -205,7 +205,7 @@ teardown() { run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs" echo "output: $output" echo "status: $status" - assert_output_contains "https://github.com/heroku/heroku-buildpack-nodejs.git https://github.com/heroku/heroku-buildpack-ruby.git" + assert_output "https://github.com/heroku/heroku-buildpack-nodejs.git https://github.com/heroku/heroku-buildpack-ruby.git" run /bin/bash -c "dokku buildpacks:remove $TEST_APP heroku/nodejs" echo "output: $output" @@ -215,7 +215,7 @@ teardown() { run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs" echo "output: $output" echo "status: $status" - assert_output_contains "https://github.com/heroku/heroku-buildpack-ruby.git" + assert_output "https://github.com/heroku/heroku-buildpack-ruby.git" run /bin/bash -c "dokku buildpacks:remove $TEST_APP heroku/php" echo "output: $output" @@ -231,6 +231,36 @@ teardown() { echo "output: $output" echo "status: $status" assert_output_not_exists + + run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/heroku/heroku-buildpack-nodejs.git" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/heroku/heroku-buildpack-ruby.git" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku buildpacks:add $TEST_APP https://github.com/yespark/heroku-imagemagick-buildpack" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs" + echo "output: $output" + echo "status: $status" + assert_output "https://github.com/heroku/heroku-buildpack-nodejs.git https://github.com/heroku/heroku-buildpack-ruby.git https://github.com/yespark/heroku-imagemagick-buildpack" + + run /bin/bash -c "dokku buildpacks:remove $TEST_APP --index 1" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku --quiet buildpacks:list $TEST_APP | xargs" + echo "output: $output" + echo "status: $status" + assert_output "https://github.com/heroku/heroku-buildpack-ruby.git https://github.com/yespark/heroku-imagemagick-buildpack" } @test "(buildpacks) buildpacks:clear" {