feat: add ability to specify a custom build directory for an app
This commit is contained in:
1
plugins/20_events/core-post-extract
Symbolic link
1
plugins/20_events/core-post-extract
Symbolic link
@@ -0,0 +1 @@
|
||||
hook
|
||||
@@ -1,5 +1,5 @@
|
||||
SUBCOMMANDS = subcommands/report subcommands/set
|
||||
TRIGGERS = triggers/builder-detect triggers/install triggers/post-delete triggers/report
|
||||
TRIGGERS = triggers/builder-detect triggers/core-post-extract triggers/install triggers/post-delete triggers/report
|
||||
BUILD = commands subcommands triggers
|
||||
PLUGIN_NAME = builder
|
||||
|
||||
|
||||
@@ -3,11 +3,13 @@ package builder
|
||||
var (
|
||||
// DefaultProperties is a map of all valid network properties with corresponding default property values
|
||||
DefaultProperties = map[string]string{
|
||||
"selected": "",
|
||||
"selected": "",
|
||||
"build-dir": "",
|
||||
}
|
||||
|
||||
// GlobalProperties is a map of all valid global network properties
|
||||
GlobalProperties = map[string]bool{
|
||||
"selected": true,
|
||||
"selected": true,
|
||||
"build-dir": true,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -11,9 +11,12 @@ func ReportSingleApp(appName string, format string, infoFlag string) error {
|
||||
}
|
||||
|
||||
flags := map[string]common.ReportFunc{
|
||||
"--builder-computed-selected": reportComputedSelected,
|
||||
"--builder-global-selected": reportGlobalSelected,
|
||||
"--builder-selected": reportSelected,
|
||||
"--builder-computed-selected": reportComputedSelected,
|
||||
"--builder-global-selected": reportGlobalSelected,
|
||||
"--builder-selected": reportSelected,
|
||||
"--builder-computed-build-dir": reportComputedBuildDir,
|
||||
"--builder-global-build-dir": reportGlobalBuildDir,
|
||||
"--builder-build-dir": reportBuildDir,
|
||||
}
|
||||
|
||||
flagKeys := []string{}
|
||||
@@ -42,3 +45,19 @@ func reportGlobalSelected(appName string) string {
|
||||
func reportSelected(appName string) string {
|
||||
return common.PropertyGet("builder", appName, "selected")
|
||||
}
|
||||
|
||||
func reportComputedBuildDir(appName string) string {
|
||||
value := reportBuildDir(appName)
|
||||
if value == "" {
|
||||
value = reportGlobalBuildDir(appName)
|
||||
}
|
||||
|
||||
return value
|
||||
}
|
||||
func reportGlobalBuildDir(appName string) string {
|
||||
return common.PropertyGet("builder", "--global", "build-dir")
|
||||
}
|
||||
|
||||
func reportBuildDir(appName string) string {
|
||||
return common.PropertyGet("builder", appName, "build-dir")
|
||||
}
|
||||
|
||||
@@ -2,6 +2,10 @@ package builder
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/dokku/dokku/plugins/common"
|
||||
)
|
||||
@@ -21,6 +25,42 @@ func TriggerBuilderDetect(appName string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// TriggerCorePostExtract moves a configured build-dir to be in the app root dir
|
||||
func TriggerCorePostExtract(appName string, sourceWorkDir string) error {
|
||||
buildDir := strings.Trim(reportComputedBuildDir(appName), "/")
|
||||
if buildDir == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
newSourceWorkDir := filepath.Join(sourceWorkDir, buildDir)
|
||||
if !common.DirectoryExists(newSourceWorkDir) {
|
||||
return fmt.Errorf("Specified build-dir not found in sourcecode working directory: %v", buildDir)
|
||||
}
|
||||
|
||||
tmpWorkDir, err := ioutil.TempDir(os.TempDir(), fmt.Sprintf("dokku-%s-%s", common.MustGetEnv("DOKKU_PID"), "CorePostExtract"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("Unable to create temporary working directory: %v", err.Error())
|
||||
}
|
||||
|
||||
if err := os.RemoveAll(tmpWorkDir); err != nil {
|
||||
return fmt.Errorf("Unable to clear out temporary working directory for rewrite: %v", err.Error())
|
||||
}
|
||||
|
||||
if err := os.Rename(newSourceWorkDir, tmpWorkDir); err != nil {
|
||||
return fmt.Errorf("Unable to move build-dir to temporary working directory: %v", err.Error())
|
||||
}
|
||||
|
||||
if err := os.RemoveAll(sourceWorkDir); err != nil {
|
||||
return fmt.Errorf("Unable to clear out sourcecode working directory for rewrite: %v", err.Error())
|
||||
}
|
||||
|
||||
if err := os.Rename(tmpWorkDir, sourceWorkDir); err != nil {
|
||||
return fmt.Errorf("Unable to move build-dir to sourcecode working directory: %v", err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// TriggerInstall runs the install step for the builder plugin
|
||||
func TriggerInstall() error {
|
||||
if err := common.PropertySetup("builder"); err != nil {
|
||||
|
||||
@@ -51,6 +51,7 @@ git_trigger_build() {
|
||||
declare APP="$1" TMP_WORK_DIR="$2" REV="$3"
|
||||
local BUILDER
|
||||
|
||||
plugn trigger core-post-extract "$APP" "$TMP_WORK_DIR" "$REV"
|
||||
plugn trigger post-extract "$APP" "$TMP_WORK_DIR" "$REV"
|
||||
|
||||
BUILDER="$(plugn trigger builder-detect "$APP" "$TMP_WORK_DIR" | head -n1 || true)"
|
||||
|
||||
@@ -43,6 +43,7 @@ tar_trigger_build() {
|
||||
declare APP="$1" TMP_WORK_DIR="$2" REV="$3"
|
||||
local BUILDER
|
||||
|
||||
plugn trigger core-post-extract "$APP" "$TMP_WORK_DIR" "$REV"
|
||||
plugn trigger post-extract "$APP" "$TMP_WORK_DIR" "$REV"
|
||||
|
||||
BUILDER="$(plugn trigger builder-detect "$APP" "$TMP_WORK_DIR" | head -n1 || true)"
|
||||
|
||||
Reference in New Issue
Block a user