exit code done

This commit is contained in:
Shreyas Goenka 2025-03-03 18:52:02 +01:00
parent 993956294a
commit 05cd18c0be
No known key found for this signature in database
GPG Key ID: 92A07DF49CCB0622
4 changed files with 26 additions and 4 deletions

View File

@ -7,3 +7,8 @@ hello, world
>>> [CLI] bundle exec -- echo --help >>> [CLI] bundle exec -- echo --help
--help --help
>>> [CLI] bundle exec -- bash -c exit 5
Error: Running "bash -c exit 5" failed with exit code: 5
Exit code: 1

View File

@ -4,3 +4,6 @@ trace $CLI bundle exec -- pwd
# The CLI should not parse the --help flag and should pass it as is to echo. # The CLI should not parse the --help flag and should pass it as is to echo.
trace $CLI bundle exec -- echo --help trace $CLI bundle exec -- echo --help
# The error message should include the exit code.
trace $CLI bundle exec -- bash -c "exit 5"

View File

@ -13,7 +13,7 @@
>>> errcode [CLI] bundle exec -t pat -- databricks current-user me -t oauth >>> errcode [CLI] bundle exec -t pat -- databricks current-user me -t oauth
Error: cannot resolve bundle auth configuration: validate: more than one authorization method configured: oauth and pat. Config: host=[DATABRICKS_URL], token=***, client_id=client_id, databricks_cli_path=[CLI]. Env: DATABRICKS_HOST, DATABRICKS_TOKEN, DATABRICKS_CLI_PATH Error: cannot resolve bundle auth configuration: validate: more than one authorization method configured: oauth and pat. Config: host=[DATABRICKS_URL], token=***, client_id=client_id, databricks_cli_path=[CLI]. Env: DATABRICKS_HOST, DATABRICKS_TOKEN, DATABRICKS_CLI_PATH
Error: Command exited with code: 1 Error: Running "databricks current-user me -t oauth" failed with exit code: 1
Exit code: 1 Exit code: 1

View File

@ -13,6 +13,15 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
type exitCodeErr struct {
exitCode int
args []string
}
func (e *exitCodeErr) Error() string {
return fmt.Sprintf("Running %q failed with exit code: %d", strings.Join(e.args, " "), e.exitCode)
}
func newExecCommand() *cobra.Command { func newExecCommand() *cobra.Command {
execCmd := &cobra.Command{ execCmd := &cobra.Command{
Use: "exec", Use: "exec",
@ -110,11 +119,16 @@ Examples:
}() }()
// Wait for the command to finish. // Wait for the command to finish.
// TODO: Pretty exit codes?
// TODO: Make CLI return the same exit codes? It has to, that's a requirement.
err = childCmd.Wait() err = childCmd.Wait()
if exitErr, ok := err.(*exec.ExitError); ok { if exitErr, ok := err.(*exec.ExitError); ok {
return fmt.Errorf("Command exited with code: %d", exitErr.ExitCode()) // We don't propagate the exit code as is because exit codes for
// the CLI have not been standardized yet. At some point in the
// future we might want to associate specific exit codes with
// specific classes of errors.
return &exitCodeErr{
exitCode: exitErr.ExitCode(),
args: args,
}
} }
if err != nil { if err != nil {
return fmt.Errorf("Error waiting for command: %w", err) return fmt.Errorf("Error waiting for command: %w", err)