release/dist/cli: add --verbose to print subcommand output

By default, cmd/dist only prints the output of failed commands.
With this, you can turn all the noisy output back on.

Updates tailscale/corp#9045

Signed-off-by: David Anderson <danderson@tailscale.com>
This commit is contained in:
David Anderson 2023-03-01 17:05:31 -08:00 committed by Dave Anderson
parent 0df11253ec
commit 311352d195
2 changed files with 17 additions and 5 deletions

View File

@ -60,6 +60,7 @@ func CLI(getTargets func() ([]dist.Target, error)) *ffcli.Command {
FlagSet: (func() *flag.FlagSet {
fs := flag.NewFlagSet("build", flag.ExitOnError)
fs.StringVar(&buildArgs.manifest, "manifest", "", "manifest file to write")
fs.BoolVar(&buildArgs.verbose, "verbose", false, "verbose logging")
return fs
})(),
LongHelp: strings.TrimSpace(`
@ -88,6 +89,7 @@ func runList(ctx context.Context, filters []string, targets []dist.Target) error
var buildArgs struct {
manifest string
verbose bool
}
func runBuild(ctx context.Context, filters []string, targets []dist.Target) error {
@ -109,6 +111,7 @@ func runBuild(ctx context.Context, filters []string, targets []dist.Target) erro
return fmt.Errorf("creating build context: %w", err)
}
defer b.Close()
b.Verbose = buildArgs.verbose
out, err := b.Build(tgts)
if err != nil {

19
release/dist/dist.go vendored
View File

@ -32,10 +32,14 @@ type Target interface {
type Build struct {
// Repo is a path to the root Go module for the build.
Repo string
// Tmp is a temporary directory that gets deleted when the Builder is closed.
Tmp string
// Out is where build artifacts are written.
Out string
// Verbose is whether to print all command output, rather than just failed
// commands.
Verbose bool
// Tmp is a temporary directory that gets deleted when the Builder is closed.
Tmp string
// Go is the path to the Go binary to use for building.
Go string
// Version is the version info of the build.
@ -198,7 +202,7 @@ func (b *Build) BuildGoBinary(path string, env map[string]string) (string, error
sort.Strings(envStrs)
log.Printf("Building %s (with env %s)", path, strings.Join(envStrs, " "))
buildDir := b.TmpDir()
cmd := b.Command(b.Repo, b.Go, "build", "-o", buildDir, path)
cmd := b.Command(b.Repo, b.Go, "build", "-v", "-o", buildDir, path)
for k, v := range env {
cmd.Cmd.Env = append(cmd.Cmd.Env, k+"="+v)
}
@ -218,8 +222,13 @@ func (b *Build) Command(dir, cmd string, args ...string) *Command {
ret := &Command{
Cmd: exec.Command(cmd, args...),
}
ret.Cmd.Stdout = &ret.Output
ret.Cmd.Stderr = &ret.Output
if b.Verbose {
ret.Cmd.Stdout = os.Stdout
ret.Cmd.Stderr = os.Stderr
} else {
ret.Cmd.Stdout = &ret.Output
ret.Cmd.Stderr = &ret.Output
}
// dist always wants to use gocross if any Go is involved.
ret.Cmd.Env = append(os.Environ(), "TS_USE_GOCROSS=1")
ret.Cmd.Dir = dir