in pkg/fix_local_shell.go [37:93]
func (l *LocalShellFix) Apply() (err error) {
// user assigned env, must set these env then re-render all attributes
if len(l.Env) > 0 {
hclfuncs.GoroutineLocalEnv.Set(l.Env)
defer hclfuncs.GoroutineLocalEnv.Remove()
err := golden.Decode(l)
if err != nil {
return err
}
}
if len(l.OnlyOn) > 0 && !linq.From(l.OnlyOn).Contains(runtime.GOOS) {
stopByOnlyOnStub()
return nil
}
script := l.Script
if l.RemoteScript != "" {
script, err = l.downloadFile(l.RemoteScript)
if script != "" {
defer func() {
_ = os.RemoveAll(script)
}()
}
defer func() {
_ = os.RemoveAll(script)
}()
} else if len(l.Inlines) > 0 {
if l.InlineShebang == "" {
l.InlineShebang = "/bin/sh -e"
}
script, err = l.createTmpFileForInlines(l.InlineShebang, l.Inlines)
if script != "" {
defer func() {
_ = os.RemoveAll(script)
}()
}
if err != nil {
return err
}
}
l.ExecuteCommand = append(l.ExecuteCommand, script)
env := l.flattenEnv()
cmd := execute.ExecTask{
Command: l.ExecuteCommand[0],
Args: l.ExecuteCommand[1:],
Env: env,
StreamStdio: false,
}
result, err := cmd.Execute(l.Context())
fmt.Printf("%s\n", result.Stdout)
if err != nil {
return err
}
if result.ExitCode != 0 {
return fmt.Errorf("non-zero exit code: %d fix.%s.%s", result.ExitCode, l.Type(), l.Name())
}
return nil
}