From f81c802eccb5b7ad16a078efc7f86990acfeefa5 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Sat, 23 Jan 2021 18:17:40 -0500 Subject: [PATCH] refactor: rename command to :set-property This will allow us to set other property values for the buildpacks plugin. --- docs/configuration/environment-variables.md | 2 +- .../methods/cloud-native-buildpacks.md | 14 +++++----- .../methods/herokuish-buildpacks.md | 26 +++++++++---------- plugins/buildpacks/Makefile | 2 +- plugins/buildpacks/report.go | 2 +- plugins/buildpacks/src/commands/commands.go | 2 +- .../buildpacks/src/subcommands/subcommands.go | 12 +++++---- plugins/buildpacks/subcommands.go | 16 +++++++----- plugins/buildpacks/triggers.go | 2 +- 9 files changed, 42 insertions(+), 36 deletions(-) diff --git a/docs/configuration/environment-variables.md b/docs/configuration/environment-variables.md index ab46dece2..eab4db630 100644 --- a/docs/configuration/environment-variables.md +++ b/docs/configuration/environment-variables.md @@ -78,7 +78,7 @@ The following config variables have special meanings and can be set in a variety | Name | Default | How to modify | Description | | ------------------------------ | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- | | `DOKKU_ROOT` | `~dokku` | `/etc/environment` | The root directory where dokku will store application repositories, as well as certain configuration files. | -| `DOKKU_IMAGE` | `gliderlabs/herokuish` | `/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | The default image to use when building herokuish containers. Deprecated in favor of using `buildpacks:stack-set` | +| `DOKKU_IMAGE` | `gliderlabs/herokuish` | `/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | The default image to use when building herokuish containers. Deprecated in favor of using `buildpacks:set-property` | | `DOKKU_LIB_ROOT` | `/var/lib/dokku` | `/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | The directory where plugins, certain data, and general configuration is stored. | | `PLUGIN_PATH` | `$DOKKU_LIB_ROOT/plugins"` | `/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | The top-level directory where plugins are stored. | | `PLUGIN_AVAILABLE_PATH` | `$PLUGIN_PATH/available"` | `/etc/environment`
`~dokku/.dokkurc`
`~dokku/.dokkurc/*` | The directory that holds all available plugins, including core. | diff --git a/docs/deployment/methods/cloud-native-buildpacks.md b/docs/deployment/methods/cloud-native-buildpacks.md index 4ff249784..532c4f8ef 100644 --- a/docs/deployment/methods/cloud-native-buildpacks.md +++ b/docs/deployment/methods/cloud-native-buildpacks.md @@ -3,7 +3,7 @@ > New as of 0.22.0 ``` -buildpacks:stack-set # Sets the stack of an app +buildpacks:set-property [--global|] # Set or clear a buildpacks property for an app ``` Cloud Native Buildpacks are an evolution over the Buildpacks technology provided by the Herokuish builder. See the [herokuish buildpacks documentation](/docs/deployment/methods/herokuish.md) for more information on how to clear buildpack build cache for an application. @@ -39,16 +39,16 @@ As this functionality is highly experimental, there are a number of caveats. Ple > New as of 0.23.0 -The default stack builder in use by CNB buildpacks in Dokku is based on `heroku/buildpacks`. Users may desire to switch the stack builder to a custom version, either to update the operating system or to customize packages included with the stack builder. This can be performed via the `buildpacks:stack-set` command. +The default stack builder in use by CNB buildpacks in Dokku is based on `heroku/buildpacks`. Users may desire to switch the stack builder to a custom version, either to update the operating system or to customize packages included with the stack builder. This can be performed via the `buildpacks:set-property` command. ```shell -dokku buildpacks:stack-set node-js-app paketobuildpacks/build:base-cnb +dokku buildpacks:set-property node-js-app paketobuildpacks/build:base-cnb ``` -The specified stack builder can also be unset by omitting the name of the stack builder when calling `buildpacks:stack-set`. +The specified stack builder can also be unset by omitting the name of the stack builder when calling `buildpacks:set-property`. ```shell -dokku buildpacks:stack-set node-js-app +dokku buildpacks:set-property node-js-app ``` A change in the stack builder value will execute the `post-stack-set` trigger. @@ -57,8 +57,8 @@ Finally, stack builders can be set or unset globally as a fallback. This will ta ```shell # set globally -dokku buildpacks:stack-set --global paketobuildpacks/build:base-cnb +dokku buildpacks:set-property --global paketobuildpacks/build:base-cnb # unset globally -dokku buildpacks:stack-set --global +dokku buildpacks:set-property --global ``` diff --git a/docs/deployment/methods/herokuish-buildpacks.md b/docs/deployment/methods/herokuish-buildpacks.md index 7d1d68976..b6a278cc6 100644 --- a/docs/deployment/methods/herokuish-buildpacks.md +++ b/docs/deployment/methods/herokuish-buildpacks.md @@ -3,13 +3,13 @@ > Subcommands new as of 0.15.0 ``` -buildpacks:add [--index 1] # Add new app buildpack while inserting into list of buildpacks if necessary -buildpacks:clear # Clear all buildpacks set on the app -buildpacks:list # List all buildpacks for an app -buildpacks:remove # Remove a buildpack set on the app -buildpacks:report [] [] # Displays a buildpack report for one or more apps -buildpacks:set [--index 1] # Set new app buildpack at a given position defaulting to the first buildpack if no index is specified -buildpacks:stack-set # Sets the stack of an app +buildpacks:add [--index 1] # Add new app buildpack while inserting into list of buildpacks if necessary +buildpacks:clear # Clear all buildpacks set on the app +buildpacks:list # List all buildpacks for an app +buildpacks:remove # Remove a buildpack set on the app +buildpacks:report [] [] # Displays a buildpack report for one or more apps +buildpacks:set [--index 1] # Set new app buildpack at a given position defaulting to the first buildpack if no index is specified +buildpacks:set-property [--global|] # Set or clear a buildpacks property for an app ``` > Warning: If using the `buildpacks` plugin, be sure to unset any `BUILDPACK_URL` and remove any such entries from a committed `.env` file. A specified `BUILDPACK_URL` will always override a `.buildpacks` file or the buildpacks plugin. @@ -128,16 +128,16 @@ dokku buildpacks:clear node-js-app > New as of 0.23.0 -The default stack builder in use by Herokuish buildpacks in Dokku is based on `gliderlabs/herokuish:latest`. Typically, this is installed via an OS package which pulls the requisite Docker image. Users may desire to switch the stack builder to a custom version, either to update the operating system or to customize packages included with the stack builder. This can be performed via the `buildpacks:stack-set` command. +The default stack builder in use by Herokuish buildpacks in Dokku is based on `gliderlabs/herokuish:latest`. Typically, this is installed via an OS package which pulls the requisite Docker image. Users may desire to switch the stack builder to a custom version, either to update the operating system or to customize packages included with the stack builder. This can be performed via the `buildpacks:set-property` command. ```shell -dokku buildpacks:stack-set node-js-app gliderlabs/herokuish:latest +dokku buildpacks:set-property node-js-app gliderlabs/herokuish:latest ``` -The specified stack builder can also be unset by omitting the name of the stack builder when calling `buildpacks:stack-set`. +The specified stack builder can also be unset by omitting the name of the stack builder when calling `buildpacks:set-property`. ```shell -dokku buildpacks:stack-set node-js-app +dokku buildpacks:set-property node-js-app ``` A change in the stack builder value will execute the `post-stack-set` trigger. @@ -146,10 +146,10 @@ Finally, stack builders can be set or unset globally as a fallback. This will ta ```shell # set globally -dokku buildpacks:stack-set --global gliderlabs/herokuish:latest +dokku buildpacks:set-property --global gliderlabs/herokuish:latest # unset globally -dokku buildpacks:stack-set --global +dokku buildpacks:set-property --global ``` ### Displaying buildpack reports for an app diff --git a/plugins/buildpacks/Makefile b/plugins/buildpacks/Makefile index 3eb867ce7..aff09a27a 100644 --- a/plugins/buildpacks/Makefile +++ b/plugins/buildpacks/Makefile @@ -1,4 +1,4 @@ -SUBCOMMANDS = subcommands/add subcommands/clear subcommands/list subcommands/remove subcommands/report subcommands/set subcommands/stack-set +SUBCOMMANDS = subcommands/add subcommands/clear subcommands/list subcommands/remove subcommands/report subcommands/set subcommands/set-property TRIGGERS = triggers/buildpack-stack-name triggers/install triggers/post-app-clone-setup triggers/post-app-rename-setup triggers/post-delete triggers/post-extract triggers/report BUILD = commands subcommands triggers PLUGIN_NAME = buildpacks diff --git a/plugins/buildpacks/report.go b/plugins/buildpacks/report.go index 072124848..135f74920 100644 --- a/plugins/buildpacks/report.go +++ b/plugins/buildpacks/report.go @@ -42,7 +42,7 @@ func reportComputedStack(appName string) string { b, _ := common.PlugnTriggerOutput("config-get", []string{appName, "DOKKU_IMAGE"}...) if dokkuImage := strings.TrimSpace(string(b[:])); dokkuImage != "" { - common.LogWarn("Deprecated: use buildpacks:stack-set instead of specifying DOKKU_IMAGE environment variable") + common.LogWarn("Deprecated: use buildpacks:set-property instead of specifying DOKKU_IMAGE environment variable") return dokkuImage } diff --git a/plugins/buildpacks/src/commands/commands.go b/plugins/buildpacks/src/commands/commands.go index 569121c9a..08ec2195c 100644 --- a/plugins/buildpacks/src/commands/commands.go +++ b/plugins/buildpacks/src/commands/commands.go @@ -24,7 +24,7 @@ Additional commands:` buildpacks:remove , Remove a buildpack set on the app buildpacks:report [] [], Displays a buildpack report for one or more apps buildpacks:set [--index 1] , Set new app buildpack at a given position defaulting to the first buildpack if no index is specified - buildpacks:stack-set , Sets the stack of an app + buildpacks:set-property [--global|] , Set or clear a buildpacks property for an app ` ) diff --git a/plugins/buildpacks/src/subcommands/subcommands.go b/plugins/buildpacks/src/subcommands/subcommands.go index 9f0d37f83..673d7fcfa 100644 --- a/plugins/buildpacks/src/subcommands/subcommands.go +++ b/plugins/buildpacks/src/subcommands/subcommands.go @@ -57,17 +57,19 @@ func main() { appName := args.Arg(0) buildpack := args.Arg(1) err = buildpacks.CommandSet(appName, buildpack, *index) - case "stack-set": - args := flag.NewFlagSet("buildpacks:stack-set", flag.ExitOnError) + case "set-property": + args := flag.NewFlagSet("buildpacks:set-property", flag.ExitOnError) global := args.Bool("global", false, "--global: set a global property") args.Parse(os.Args[2:]) appName := args.Arg(0) - stack := args.Arg(1) + property := args.Arg(1) + value := args.Arg(2) if *global { appName = "--global" - stack = args.Arg(0) + property = args.Arg(0) + value = args.Arg(1) } - err = buildpacks.CommandStackSet(appName, stack) + err = buildpacks.CommandSetProperty(appName, property, value) default: common.LogFail(fmt.Sprintf("Invalid plugin subcommand call: %s", subcommand)) } diff --git a/plugins/buildpacks/subcommands.go b/plugins/buildpacks/subcommands.go index e90ea4be4..173db4d99 100644 --- a/plugins/buildpacks/subcommands.go +++ b/plugins/buildpacks/subcommands.go @@ -139,12 +139,16 @@ func CommandSet(appName string, buildpack string, index int) error { return common.PropertyListSet("buildpacks", appName, "buildpacks", buildpack, index) } -// CommandStackSet implements buildpacks:stack-set -func CommandStackSet(appName string, stack string) error { - oldStack := common.PropertyGet("buildpacks", appName, "stack") - common.CommandPropertySet("buildpacks", appName, "stack", stack, DefaultProperties, GlobalProperties) - if oldStack != stack { - return common.PlugnTrigger("post-stack-set", []string{appName, stack}...) +// CommandSetProperty implements buildpacks:set-property +func CommandSetProperty(appName string, property string, value string) error { + oldStack := "" + if property == "stack" { + oldStack = common.PropertyGet("buildpacks", appName, "stack") + } + + common.CommandPropertySet("buildpacks", appName, property, value, DefaultProperties, GlobalProperties) + if property == "stack" && oldStack != value { + return common.PlugnTrigger("post-stack-set", []string{appName, value}...) } return nil diff --git a/plugins/buildpacks/triggers.go b/plugins/buildpacks/triggers.go index ff198d4e0..9c07b2a97 100644 --- a/plugins/buildpacks/triggers.go +++ b/plugins/buildpacks/triggers.go @@ -25,7 +25,7 @@ func TriggerBuildpackStackName(appName string) error { b, _ := common.PlugnTriggerOutput("config-get", []string{appName, "DOKKU_IMAGE"}...) dokkuImage := strings.TrimSpace(string(b[:])) if dokkuImage != "" { - common.LogWarn("Deprecated: use buildpacks:stack-set instead of specifying DOKKU_IMAGE environment variable") + common.LogWarn("Deprecated: use buildpacks:set-property instead of specifying DOKKU_IMAGE environment variable") fmt.Println(dokkuImage) return nil }