33 lines
1.2 KiB
Go
33 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/forgekey"
|
|
)
|
|
|
|
// StepRunner runs the commands of a build step with an environment built from scratch (novox/hq ADR 0466 §4, issue
|
|
// 1485): PATH, HOME (the account's own home, where its ssh files and git configuration are) and a fixed locale, plus
|
|
// the words the caller passes, and nothing else of this process's environment — which holds the module's bus
|
|
// credentials and might hold a password or a token. It is mesh-sdk's clean runner (ExecRunnerClean, issue 1497) with
|
|
// that base given; a command is bound by its context alone (the bound 0), so a fetch may outlast a tool call's thirty
|
|
// seconds (the step has its own context).
|
|
func StepRunner(home string) forgekey.Runner {
|
|
run := forgekey.ExecRunnerClean(0)
|
|
return func(ctx context.Context, env []string, name string, args ...string) forgekey.Ran {
|
|
return run(ctx, append(baseEnv(home), env...), name, args...)
|
|
}
|
|
}
|
|
|
|
// defaultPath is where a step looks for git, ssh and buildah when this process was given no PATH.
|
|
const defaultPath = "/usr/local/bin:/usr/bin:/bin"
|
|
|
|
func baseEnv(home string) []string {
|
|
path := os.Getenv("PATH")
|
|
if path == "" {
|
|
path = defaultPath
|
|
}
|
|
return []string{"PATH=" + path, "HOME=" + home, "LC_ALL=C"}
|
|
}
|