From 551eae0c5b285b1a242459974866905cf2eafb9a Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sun, 14 Sep 2025 20:59:57 -0400 Subject: [PATCH 1/4] chore: remove references to pack being experimental It is no longer experimental and is here to stay. --- .../builders/cloud-native-buildpacks.md | 17 ++++------------- plugins/builder-pack/builder-detect | 5 ----- plugins/common/functions | 5 ----- tests/unit/app-json.bats | 7 ++++++- tests/unit/builder.bats | 13 ------------- tests/unit/ps-cnb.bats | 4 ++-- tests/unit/run_1.bats | 7 ++++++- 7 files changed, 18 insertions(+), 40 deletions(-) diff --git a/docs/deployment/builders/cloud-native-buildpacks.md b/docs/deployment/builders/cloud-native-buildpacks.md index 83a3ec407..f6a3ebb83 100644 --- a/docs/deployment/builders/cloud-native-buildpacks.md +++ b/docs/deployment/builders/cloud-native-buildpacks.md @@ -14,8 +14,8 @@ buildpacks:set-property [--global|] # Set or clear a buildpa Cloud Native Buildpacks are an evolution over the Buildpacks technology provided by the Herokuish builder. See the [herokuish buildpacks documentation](/docs/deployment/builders/herokuish-buildpacks.md) for more information on how to clear buildpack build cache for an application. -> [!WARNING] -> This functionality uses the `pack` cli from the [Cloud Native Buildpacks](https://buildpacks.io) project to build apps. As the integration is experimental in Dokku, it is likely to change over time. +> [!NOTE] +> This functionality uses the `pack` cli from the [Cloud Native Buildpacks](https://buildpacks.io) project to build apps. ## Usage @@ -27,7 +27,7 @@ Builds will proceed with the `pack` cli for the app from then on. ### Caveats -As this functionality is highly experimental, there are a number of caveats. Please note that not all issues are listed below. +While pack is well-supported in Dokku, there are a number of caveats. Please note that not all issues are listed below. - Specifying specific buildpacks is not currently possible. - A future release will add support for specifying buildpacks via the `buildpacks` plugin. @@ -41,16 +41,7 @@ As this functionality is highly experimental, there are a number of caveats. Ple ### Detection -This builder will be auto-detected in either the following cases: - -- The `DOKKU_CNB_EXPERIMENTAL` app environment variable is set to `1`. - - ```shell - dokku config:set --no-restart node-js-app DOKKU_CNB_EXPERIMENTAL=1 - ``` - -- A `project.toml` file exists in the root of the app repository. - - This file is consumed by `pack-cli` and used to describe how the app is built. +This builder will be auto-detected if a `project.toml` file exists in the root of the app repository. This file is consumed by `pack-cli` and used to describe how the app is built. The builder can also be specified via the `builder:set` command: diff --git a/plugins/builder-pack/builder-detect b/plugins/builder-pack/builder-detect index d269c11dc..4202263ef 100755 --- a/plugins/builder-pack/builder-detect +++ b/plugins/builder-pack/builder-detect @@ -12,11 +12,6 @@ trigger-builder-pack-builder-detect() { echo "pack" return fi - - if [[ "$(config_get "$APP" DOKKU_CNB_EXPERIMENTAL || true)" == "1" ]]; then - echo "pack" - return - fi } trigger-builder-pack-builder-detect "$@" diff --git a/plugins/common/functions b/plugins/common/functions index ea1dcfe06..9a7e12c84 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -665,11 +665,6 @@ dokku_receive() { docker_cleanup "$APP" - local DOKKU_CNB_EXPERIMENTAL="$(config_get "$APP" DOKKU_CNB_EXPERIMENTAL || true)" - if [[ "$DOKKU_CNB_EXPERIMENTAL" == "1" ]]; then - IMAGE_SOURCE_TYPE="pack" - fi - plugn trigger builder-set-property "$APP" "detected" "$IMAGE_SOURCE_TYPE" if ! dokku_build "$APP" "$IMAGE_SOURCE_TYPE" "$TMP_WORK_DIR"; then return 1 diff --git a/tests/unit/app-json.bats b/tests/unit/app-json.bats index acdd54854..ba8325f6a 100644 --- a/tests/unit/app-json.bats +++ b/tests/unit/app-json.bats @@ -94,7 +94,12 @@ teardown() { echo "status: $status" assert_success - run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" + run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku builder:set $TEST_APP selected pack" echo "output: $output" echo "status: $status" assert_success diff --git a/tests/unit/builder.bats b/tests/unit/builder.bats index 8d6907fd6..6cbaa790e 100644 --- a/tests/unit/builder.bats +++ b/tests/unit/builder.bats @@ -99,19 +99,6 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - - # test DOKKU_CNB_EXPERIMENTAL env var - run /bin/bash -c "dokku config:set $TEST_APP DOKKU_CNB_EXPERIMENTAL=1" - echo "output: $output" - echo "status: $status" - assert_success - - chown -R dokku:dokku "$TMP" - run /bin/bash -c "dokku plugin:trigger builder-detect $TEST_APP $TMP" - echo "output: $output" - echo "status: $status" - assert_success - assert_line 0 "pack" } @test "(builder) builder-detect [dockerfile]" { diff --git a/tests/unit/ps-cnb.bats b/tests/unit/ps-cnb.bats index c24044428..25fe17e42 100644 --- a/tests/unit/ps-cnb.bats +++ b/tests/unit/ps-cnb.bats @@ -17,7 +17,7 @@ teardown() { } @test "(ps) cnb env vars" { - run /bin/bash -c "dokku config:set $TEST_APP DOKKU_CNB_EXPERIMENTAL=1" + run /bin/bash -c "dokku config:set $TEST_APP APP_RESPECTS_ENV_VARS=1" echo "output: $output" echo "status: $status" assert_success @@ -31,5 +31,5 @@ teardown() { echo "output: $output" echo "status: $status" assert_success - assert_output_contains '"DOKKU_CNB_EXPERIMENTAL": "1"' + assert_output_contains '"APP_RESPECTS_ENV_VARS": "1"' } diff --git a/tests/unit/run_1.bats b/tests/unit/run_1.bats index 91574f126..913b6de2c 100644 --- a/tests/unit/run_1.bats +++ b/tests/unit/run_1.bats @@ -68,7 +68,12 @@ teardown() { echo "status: $status" assert_success - run /bin/bash -c "dokku config:set --no-restart $TEST_APP DOKKU_CNB_EXPERIMENTAL=1 SECRET_KEY=fjdkslafjdk" + run /bin/bash -c "dokku config:set --no-restart $TEST_APP SECRET_KEY=fjdkslafjdk" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku builder:set $TEST_APP selected pack" echo "output: $output" echo "status: $status" assert_success From e62212f810e794815c13eabd88c06700899f7da9 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 17 Sep 2025 00:57:54 -0400 Subject: [PATCH 2/4] tests: add missing global setup/teardown calls --- tests/unit/builder-pack.bats | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/unit/builder-pack.bats b/tests/unit/builder-pack.bats index 489c7f96f..924f15538 100644 --- a/tests/unit/builder-pack.bats +++ b/tests/unit/builder-pack.bats @@ -7,11 +7,13 @@ setup_file() { } setup() { + global_setup create_app } teardown() { destroy_app + global_teardown } @test "(builder-pack:set)" { From 68c5407ed4df66f0a8475f47e2c2c09fb1eea13e Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 17 Sep 2025 00:58:30 -0400 Subject: [PATCH 3/4] tests: use already existing add_requirements_txt_cnb function for builder-pack deploys --- tests/unit/builder-pack.bats | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/tests/unit/builder-pack.bats b/tests/unit/builder-pack.bats index 924f15538..3becd43a6 100644 --- a/tests/unit/builder-pack.bats +++ b/tests/unit/builder-pack.bats @@ -32,7 +32,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP initialize_for_cnb + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb echo "output: $output" echo "status: $status" assert_success @@ -82,7 +82,7 @@ teardown() { echo "status: $status" assert_success - run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP initialize_for_cnb + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb echo "output: $output" echo "status: $status" assert_success @@ -103,11 +103,3 @@ teardown() { echo "status: $status" assert_success } - -initialize_for_cnb() { - local APP="$1" - local APP_REPO_DIR="$2" - [[ -z "$APP" ]] && local APP="$TEST_APP" - echo "flask" >>"$APP_REPO_DIR/requirements.txt" - mv "$APP_REPO_DIR/app-cnb.json" "$APP_REPO_DIR/app.json" -} From 889d237669823b9dfcd32237fd42361ef360fce7 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Wed, 17 Sep 2025 00:58:46 -0400 Subject: [PATCH 4/4] chore: combine tests and ensure that pack is selected --- tests/unit/builder-pack.bats | 23 +++++++++++++++++++++++ tests/unit/ps-cnb.bats | 35 ----------------------------------- 2 files changed, 23 insertions(+), 35 deletions(-) delete mode 100644 tests/unit/ps-cnb.bats diff --git a/tests/unit/builder-pack.bats b/tests/unit/builder-pack.bats index 3becd43a6..fad2052fb 100644 --- a/tests/unit/builder-pack.bats +++ b/tests/unit/builder-pack.bats @@ -103,3 +103,26 @@ teardown() { echo "status: $status" assert_success } + +@test "(ps) cnb env vars" { + run /bin/bash -c "dokku config:set $TEST_APP APP_RESPECTS_ENV_VARS=1" + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "dokku builder:set $TEST_APP selected pack" + echo "output: $output" + echo "status: $status" + assert_success + + run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb + echo "output: $output" + echo "status: $status" + assert_success + + run /bin/bash -c "curl $(dokku url $TEST_APP)/env" + echo "output: $output" + echo "status: $status" + assert_success + assert_output_contains '"APP_RESPECTS_ENV_VARS": "1"' +} diff --git a/tests/unit/ps-cnb.bats b/tests/unit/ps-cnb.bats deleted file mode 100644 index 25fe17e42..000000000 --- a/tests/unit/ps-cnb.bats +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bats - -load test_helper - -setup_file() { - install_pack -} - -setup() { - global_setup - create_app -} - -teardown() { - destroy_app - global_teardown -} - -@test "(ps) cnb env vars" { - run /bin/bash -c "dokku config:set $TEST_APP APP_RESPECTS_ENV_VARS=1" - echo "output: $output" - echo "status: $status" - assert_success - - run deploy_app python dokku@$DOKKU_DOMAIN:$TEST_APP add_requirements_txt_cnb - echo "output: $output" - echo "status: $status" - assert_success - - run /bin/bash -c "curl $(dokku url $TEST_APP)/env" - echo "output: $output" - echo "status: $status" - assert_success - assert_output_contains '"APP_RESPECTS_ENV_VARS": "1"' -}