feat(cmd)!: run abra.sh commands with /bin/bash if available.
continuous-integration/drone/push Build is passing Details

BREAKING CHANGE: abra.sh commands that depend on /bin/sh will break

Closes coop-cloud/organising#357.

See #229.
This commit is contained in:
Moritz 2022-11-15 14:01:45 +01:00 committed by decentral1se
parent 521d3d1259
commit 7f745ff19f
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
1 changed files with 30 additions and 15 deletions

View File

@ -87,7 +87,12 @@ Example:
sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; STACK_NAME=%s; %s . %s; %s", app.Name, app.StackName(), exportEnv, abraSh, cmdName) sourceAndExec = fmt.Sprintf("TARGET=local; APP_NAME=%s; STACK_NAME=%s; %s . %s; %s", app.Name, app.StackName(), exportEnv, abraSh, cmdName)
} }
cmd := exec.Command("/bin/sh", "-c", sourceAndExec) shell := "/bin/bash"
if _, err := os.Stat(shell); errors.Is(err, os.ErrNotExist) {
logrus.Debugf("%s does not exist locally, use /bin/sh as fallback", shell)
shell = "/bin/sh"
}
cmd := exec.Command(shell, "-c", sourceAndExec)
if err := internal.RunCmd(cmd); err != nil { if err := internal.RunCmd(cmd); err != nil {
logrus.Fatal(err) logrus.Fatal(err)
@ -192,34 +197,44 @@ func runCmdRemote(app config.App, abraSh, serviceName, cmdName, cmdArgs string)
return err return err
} }
var cmd []string // FIXME: avoid instantiating a new CLI
if cmdArgs != "" { dcli, err := command.NewDockerCli()
cmd = []string{"/bin/sh", "-c", fmt.Sprintf("TARGET=%s; APP_NAME=%s; STACK_NAME=%s; . /tmp/abra.sh; %s %s", serviceName, app.Name, app.StackName(), cmdName, cmdArgs)} if err != nil {
} else { return err
cmd = []string{"/bin/sh", "-c", fmt.Sprintf("TARGET=%s; APP_NAME=%s; STACK_NAME=%s; . /tmp/abra.sh; %s", serviceName, app.Name, app.StackName(), cmdName)}
} }
logrus.Debugf("running command: %s", strings.Join(cmd, " ")) shell := "/bin/bash"
findShell := []string{"test", "-e", shell}
execCreateOpts := types.ExecConfig{ execCreateOpts := types.ExecConfig{
AttachStderr: true, AttachStderr: true,
AttachStdin: true, AttachStdin: true,
AttachStdout: true, AttachStdout: true,
Cmd: cmd, Cmd: findShell,
Detach: false, Detach: false,
Tty: true, Tty: false,
} }
if err := container.RunExec(dcli, cl, targetContainer.ID, &execCreateOpts); err != nil {
logrus.Infof("%s does not exist for %s, use /bin/sh as fallback", shell, app.Name)
shell = "/bin/sh"
}
var cmd []string
if cmdArgs != "" {
cmd = []string{shell, "-c", fmt.Sprintf("TARGET=%s; APP_NAME=%s; STACK_NAME=%s; . /tmp/abra.sh; %s %s", serviceName, app.Name, app.StackName(), cmdName, cmdArgs)}
} else {
cmd = []string{shell, "-c", fmt.Sprintf("TARGET=%s; APP_NAME=%s; STACK_NAME=%s; . /tmp/abra.sh; %s", serviceName, app.Name, app.StackName(), cmdName)}
}
logrus.Debugf("running command: %s", strings.Join(cmd, " "))
if internal.RemoteUser != "" { if internal.RemoteUser != "" {
logrus.Debugf("running command with user %s", internal.RemoteUser) logrus.Debugf("running command with user %s", internal.RemoteUser)
execCreateOpts.User = internal.RemoteUser execCreateOpts.User = internal.RemoteUser
} }
// FIXME: avoid instantiating a new CLI execCreateOpts.Cmd = cmd
dcli, err := command.NewDockerCli() execCreateOpts.Tty = true
if err != nil {
return err
}
if err := container.RunExec(dcli, cl, targetContainer.ID, &execCreateOpts); err != nil { if err := container.RunExec(dcli, cl, targetContainer.ID, &execCreateOpts); err != nil {
return err return err