Merge pull request #8004 from Tashows/buildpacks-detect
Add buildpacks:detect subcommand
This commit is contained in:
@@ -86,11 +86,11 @@
|
||||
},
|
||||
{
|
||||
"name": "herokuish",
|
||||
"version": "0.11.3",
|
||||
"version": "0.11.5",
|
||||
"urls": {
|
||||
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.3/herokuish_0.11.3_linux_x86_64.tgz",
|
||||
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.3/herokuish_0.11.3_linux_x86_64.tgz"
|
||||
"amd64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.5/herokuish_0.11.5_linux_x86_64.tgz",
|
||||
"arm64": "https://github.com/gliderlabs/herokuish/releases/download/v0.11.5/herokuish_0.11.5_linux_x86_64.tgz"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
SUBCOMMANDS = subcommands/add subcommands/clear subcommands/list subcommands/remove subcommands/report subcommands/set subcommands/set-property
|
||||
SUBCOMMANDS = subcommands/add subcommands/clear subcommands/detect 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
|
||||
|
||||
@@ -63,3 +63,32 @@ func validBuildpackURL(buildpack string) (string, error) {
|
||||
|
||||
return buildpack, fmt.Errorf("Invalid buildpack specified: %v", buildpack)
|
||||
}
|
||||
|
||||
func checkoutBareGitRepo(sourceWorkDir string, branch string) (string, error) {
|
||||
tmpdir, err := os.MkdirTemp("", "bare-git-checkout")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Unable to create temporary directory: %s", err.Error())
|
||||
}
|
||||
|
||||
args := []string{
|
||||
"--git-dir=" + sourceWorkDir,
|
||||
"--work-tree=" + tmpdir,
|
||||
"checkout", "-f",
|
||||
}
|
||||
|
||||
if branch != "" {
|
||||
args = append(args, branch)
|
||||
}
|
||||
|
||||
result, err := common.CallExecCommand(common.ExecCommandInput{
|
||||
Command: "git",
|
||||
Args: args,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
os.RemoveAll(tmpdir)
|
||||
return "", fmt.Errorf("Unable to checkout bare git repository: %s", result.StderrContents())
|
||||
}
|
||||
|
||||
return tmpdir, nil
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ Additional commands:`
|
||||
helpContent = `
|
||||
buildpacks:add [--index 1] <app> <buildpack>, Add new app buildpack while inserting into list of buildpacks if necessary
|
||||
buildpacks:clear <app>, Clear all buildpacks set on the app
|
||||
buildpacks:detect <app> [--branch <branch-name>], Detect the buildpack for an app (if not specified, the branch flag defaults to the deploy branch)
|
||||
buildpacks:list <app>, List all buildpacks for an app
|
||||
buildpacks:remove <app> <buildpack>, Remove a buildpack set on the app
|
||||
buildpacks:report [<app>] [<flag>], Displays a buildpack report for one or more apps
|
||||
|
||||
@@ -30,6 +30,15 @@ func main() {
|
||||
args.Parse(os.Args[2:])
|
||||
appName := args.Arg(0)
|
||||
err = buildpacks.CommandClear(appName)
|
||||
case "detect":
|
||||
args := flag.NewFlagSet("buildpacks:detect", flag.ExitOnError)
|
||||
branch := args.String("branch", "", "--branch: the branch to detect against (defaults to the deploy branch)")
|
||||
args.Parse(os.Args[2:])
|
||||
appName := args.Arg(0)
|
||||
if *branch == "" {
|
||||
*branch = common.PropertyGet("git", appName, "deploy-branch")
|
||||
}
|
||||
err = buildpacks.CommandDetect(appName, *branch)
|
||||
case "list":
|
||||
args := flag.NewFlagSet("buildpacks:list", flag.ExitOnError)
|
||||
args.Parse(os.Args[2:])
|
||||
|
||||
@@ -3,6 +3,7 @@ package buildpacks
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/dokku/dokku/plugins/common"
|
||||
)
|
||||
@@ -30,6 +31,41 @@ func CommandClear(appName string) error {
|
||||
return common.PropertyDelete("buildpacks", appName, "buildpacks")
|
||||
}
|
||||
|
||||
// CommandDetect implements buildpacks:detect
|
||||
func CommandDetect(appName string, branch string) (err error) {
|
||||
if err := common.VerifyAppName(appName); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
workDir := common.AppRoot(appName)
|
||||
checkedOutDir, err := checkoutBareGitRepo(workDir, branch)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := os.RemoveAll(checkedOutDir); err != nil {
|
||||
common.LogWarn(fmt.Sprintf("Failed to remove temporary directory %s: %v", checkedOutDir, err))
|
||||
}
|
||||
}()
|
||||
|
||||
dockerArgs := []string{
|
||||
"run", "--rm",
|
||||
"-v", fmt.Sprintf("%s:/tmp/app", checkedOutDir),
|
||||
"gliderlabs/herokuish", "/bin/herokuish", "buildpack", "detect", "/tmp/app",
|
||||
}
|
||||
|
||||
result, err := common.CallExecCommand(common.ExecCommandInput{
|
||||
Command: common.DockerBin(),
|
||||
Args: dockerArgs,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("Buildpack detection failed: %s", result.StderrContents())
|
||||
}
|
||||
|
||||
common.LogVerbose(result.StdoutContents())
|
||||
return nil
|
||||
}
|
||||
|
||||
// CommandList implements buildpacks:list
|
||||
func CommandList(appName string) (err error) {
|
||||
if err := common.VerifyAppName(appName); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user