func()

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
}