Merge pull request #7871 from dokku/remove-dokku-app-type

Remove public exposure of DOKKU_APP_TYPE in favor of builder detected property
This commit is contained in:
Jose Diaz-Gonzalez
2025-08-22 01:26:54 -04:00
committed by GitHub
10 changed files with 57 additions and 10 deletions

View File

@@ -101,7 +101,6 @@ The following config variables have special meanings and can be set in a variety
| `DOKKU_APP_PROXY_TYPE` | `nginx` | `dokku proxy:set` | |
| `DOKKU_APP_RESTORE` | `1` | `dokku config:set` <br /> `dokku ps:stop` | |
| `DOKKU_APP_SHELL` | `/bin/bash` | `dokku config:set` | Allows users to change the default shell used by Dokku for `dokku enter` and execution of deployment tasks. |
| `DOKKU_APP_TYPE` | `herokuish` | Auto-detected by using buildpacks or dockerfile | |
| `DOKKU_CHECKS_DISABLED` | none | `dokku checks:disable` | |
| `DOKKU_CHECKS_ENABLED` | none | `dokku checks:enable` | |
| `DOKKU_CHECKS_SKIPPED` | none | `dokku checks:skip` | |

View File

@@ -10,9 +10,9 @@ trigger-builder-herokuish-docker-args() {
local STDIN DOKKU_APP_TYPE DOKKU_APP_USER
STDIN=$(cat)
DOKKU_APP_TYPE=$(config_get "$APP" DOKKU_APP_TYPE || true)
DOKKU_APP_USER=$(config_get "$APP" DOKKU_APP_USER || true)
DOKKU_APP_USER=${DOKKU_APP_USER:="herokuishuser"}
DOKKU_APP_TYPE="$(plugn trigger builder-get-property "$APP" "detected" || true)"
DOKKU_APP_USER="$(config_get "$APP" DOKKU_APP_USER || true)"
DOKKU_APP_USER="${DOKKU_APP_USER:="herokuishuser"}"
if [[ "$DOKKU_APP_TYPE" == "herokuish" ]]; then
local docker_args="$STDIN --env=USER=${DOKKU_APP_USER}"

View File

@@ -1,5 +1,5 @@
SUBCOMMANDS = subcommands/report subcommands/set
TRIGGERS = triggers/builder-detect triggers/builder-get-property triggers/builder-image-is-cnb triggers/builder-image-is-herokuish triggers/core-post-extract triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report
TRIGGERS = triggers/builder-detect triggers/builder-get-property triggers/builder-image-is-cnb triggers/builder-image-is-herokuish triggers/builder-set-property triggers/core-post-extract triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/report
BUILD = commands subcommands triggers
PLUGIN_NAME = builder

View File

@@ -4,6 +4,7 @@ var (
// DefaultProperties is a map of all valid builder properties with corresponding default property values
DefaultProperties = map[string]string{
"selected": "",
"detected": "",
"build-dir": "",
}

View File

@@ -14,6 +14,7 @@ func ReportSingleApp(appName string, format string, infoFlag string) error {
"--builder-computed-selected": reportComputedSelected,
"--builder-global-selected": reportGlobalSelected,
"--builder-selected": reportSelected,
"--builder-detected": reportDetected,
"--builder-computed-build-dir": reportComputedBuildDir,
"--builder-global-build-dir": reportGlobalBuildDir,
"--builder-build-dir": reportBuildDir,
@@ -43,6 +44,10 @@ func reportGlobalSelected(appName string) string {
return common.PropertyGet("builder", "--global", "selected")
}
func reportDetected(appName string) string {
return common.PropertyGet("builder", appName, "detected")
}
func reportSelected(appName string) string {
return common.PropertyGet("builder", appName, "selected")
}

View File

@@ -33,6 +33,11 @@ func main() {
appName := flag.Arg(0)
image := flag.Arg(1)
err = builder.TriggerBuilderImageIsHerokuish(appName, image)
case "builder-set-property":
appName := flag.Arg(0)
property := flag.Arg(1)
value := flag.Arg(2)
err = builder.TriggerBuilderSetProperty(appName, property, value)
case "core-post-extract":
appName := flag.Arg(0)
sourceWorkDir := flag.Arg(1)

View File

@@ -30,6 +30,11 @@ func CommandReport(appName string, format string, infoFlag string) error {
// CommandSet set or clear a builder property for an app
func CommandSet(appName string, property string, value string) error {
if property == "detected" {
common.LogWarn("detected is a read-only property")
return nil
}
common.CommandPropertySet("builder", appName, property, value, DefaultProperties, GlobalProperties)
return nil
}

View File

@@ -27,14 +27,23 @@ func TriggerBuilderDetect(appName string) error {
// TriggerBuilderGetProperty writes the builder key to stdout for a given app container
func TriggerBuilderGetProperty(appName string, key string) error {
if key != "selected" && key != "build-dir" {
return errors.New("Invalid logs property specified")
if _, ok := DefaultProperties[key]; !ok {
return errors.New("Invalid builder property specified")
}
fmt.Println(common.PropertyGet("builder", appName, key))
return nil
}
// TriggerBuilderSetProperty writes the builder key to stdout for a given app container
func TriggerBuilderSetProperty(appName string, key string, value string) error {
if _, ok := DefaultProperties[key]; !ok {
return errors.New("Invalid builder property specified")
}
return common.PropertyWrite("builder", appName, key, value)
}
// TriggerBuilderImageIsCNB prints true if an image is cnb based, false otherwise
func TriggerBuilderImageIsCNB(appName string, image string) error {
if common.IsImageCnbBased(image) {
@@ -99,7 +108,30 @@ func TriggerInstall() error {
return fmt.Errorf("Unable to install the builder plugin: %s", err.Error())
}
_, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
apps, err := common.UnfilteredDokkuApps()
if err != nil {
return nil
}
for _, appName := range apps {
if common.PropertyExists("builder", appName, "detected") {
continue
}
results, err := common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "config-get",
Args: []string{appName, "DOKKU_APP_TYPE"},
})
if err != nil {
return err
}
if results.StdoutContents() != "" {
common.PropertyWrite("builder", appName, "detected", results.StdoutContents())
}
}
_, err = common.CallPlugnTrigger(common.PlugnTriggerInput{
Trigger: "install-builder-prune",
})

View File

@@ -670,7 +670,7 @@ dokku_receive() {
IMAGE_SOURCE_TYPE="pack"
fi
DOKKU_QUIET_OUTPUT=1 config_set --no-restart "$APP" DOKKU_APP_TYPE="$IMAGE_SOURCE_TYPE"
plugn trigger builder-set-property "$APP" "detected" "$IMAGE_SOURCE_TYPE"
if ! dokku_build "$APP" "$IMAGE_SOURCE_TYPE" "$TMP_WORK_DIR"; then
return 1
fi

View File

@@ -75,7 +75,7 @@ teardown() {
echo "status: $status"
assert_success
run /bin/bash -c "dokku --quiet config:get $TEST_APP DOKKU_APP_TYPE"
run /bin/bash -c "dokku builder:report $TEST_APP --builder-detected"
echo "output: $output"
echo "status: $status"
assert_output "herokuish"