Some checks are pending
docker-build-cometbft / vars (push) Waiting to run
docker-build-cometbft / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-cometbft / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-cometbft / merge-images (push) Blocked by required conditions
docker-build-e2e-node / vars (push) Waiting to run
docker-build-e2e-node / build-images (amd64, ubuntu-24.04) (push) Blocked by required conditions
docker-build-e2e-node / build-images (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
docker-build-e2e-node / merge-images (push) Blocked by required conditions
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package exec
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
osexec "os/exec"
|
|
)
|
|
|
|
// Command executes a shell command.
|
|
func Command(ctx context.Context, args ...string) error {
|
|
_, err := CommandOutput(ctx, args...)
|
|
return err
|
|
}
|
|
|
|
// CommandOutput executes a shell command and returns the command's output.
|
|
func CommandOutput(ctx context.Context, args ...string) ([]byte, error) {
|
|
//nolint: gosec
|
|
// G204: Subprocess launched with a potential tainted input or cmd arguments
|
|
cmd := osexec.CommandContext(ctx, args[0], args[1:]...)
|
|
out, err := cmd.CombinedOutput()
|
|
switch err := err.(type) {
|
|
case nil:
|
|
return out, nil
|
|
case *osexec.ExitError:
|
|
return nil, fmt.Errorf("failed to run %q:\n%v", args, string(out))
|
|
default:
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
// CommandVerbose executes a shell command while displaying its output.
|
|
func CommandVerbose(ctx context.Context, args ...string) error {
|
|
//nolint: gosec
|
|
// G204: Subprocess launched with a potential tainted input or cmd arguments
|
|
cmd := osexec.CommandContext(ctx, args[0], args[1:]...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
return cmd.Run()
|
|
}
|