Migration: pkg/errorhandling → go/errorhandling¶
The error-reporting layer has been extracted out of go-tool-base into the standalone
module gitlab.com/phpboyscout/go/errorhandling (v0.1.0). Its only dependency is
cockroachdb/errors. It carries no CLI framework at all.
What changed¶
- The package
gitlab.com/phpboyscout/go-tool-base/pkg/errorhandlingno longer exists. It now lives atgitlab.com/phpboyscout/go/errorhandling. Checkdrops its variadic*cobra.Commandparameter:
-Check(err error, prefix string, level string, cmd ...*cobra.Command)
+Check(err error, prefix string, level string)
That parameter existed only to print usage for ErrRunSubCommand, duplicating the
SetUsage(func() error) seam that was already on the interface, and no caller in
go-tool-base passed it. Removing it is what makes the module framework-free.
SlackHelpandTeamsHelpmoved togitlab.com/phpboyscout/go-tool-base/pkg/props. The module defines theHelpConfiginterface (the extension point) but ships no implementations: where a team's support channel lives is a framework concern, not an error library's.- The mocks moved and are now published by the module at
gitlab.com/phpboyscout/go/errorhandling/mocks(MockErrorHandler,MockHelpConfig).mocks/pkg/errorhandlingis deleted. - Everything else is unchanged:
New,ErrorHandler,StandardErrorHandler,Fatal/Error/Warn,SetUsage, theLevel*constants,WithExitCode/ExitCode,WithUserHint/WithUserHintf/WrapWithHint,NewAssertionFailure,ErrNotImplemented/NewErrNotImplemented,ErrRunSubCommand,HelpConfig,WithExitFunc, and theKey*log-field constants.
How to migrate¶
Repoint the import path:
grep -rl 'go-tool-base/pkg/errorhandling' --include='*.go' . \
| xargs sed -i 's#gitlab.com/phpboyscout/go-tool-base/pkg/errorhandling#gitlab.com/phpboyscout/go/errorhandling#g'
go get gitlab.com/phpboyscout/go/[email protected]
go mod tidy
Then fix the two renames, if you use them:
-errorhandling.SlackHelp{Team: "Platform", Channel: "#help"}
+props.SlackHelp{Team: "Platform", Channel: "#help"}
-import mocks "gitlab.com/phpboyscout/go-tool-base/mocks/pkg/errorhandling"
+import ehmocks "gitlab.com/phpboyscout/go/errorhandling/mocks"
If you passed a command to Check, drop the argument and register the printer once
instead: ideally in each command's PreRunE, so the usage shown belongs to the command
that actually ran:
-props.ErrorHandler.Check(err, "", errorhandling.LevelError, cmd)
+props.ErrorHandler.SetUsage(cmd.Usage)
+props.ErrorHandler.Check(err, "", errorhandling.LevelError)
Scaffolded projects already do this, gtb generate emits SetUsage(cmd.Usage) in
PreRunE, so generated code needs no change beyond the import path.
Notes¶
- go-tool-base consumes the module directly. The GTB-specific parts are unchanged and
stay in the framework: the
Executewrapper (Cobra silencing, the--helphint on flag-parse errors, signal-aware context, and the single fatal routing point), theSlackHelp/TeamsHelpimplementations, and the generator's help wiring. See the Error Handling component. - Full documentation: the reporting model, hint guidance, exit-code conventions, and the interrupt-handling patterns, lives at errorhandling.go.phpboyscout.uk; the API reference is on pkg.go.dev.