forked from toolshed/abra
		
	feat(cmd)!: run abra.sh commands with /bin/bash if available.
BREAKING CHANGE: abra.sh commands that depend on /bin/sh will break Closes coop-cloud/organising#357. See coop-cloud/abra#229.
This commit is contained in:
		| @ -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 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user