refactor(i18n): use common.error.failed template for all error messages

Replace specific error keys with the generic template:
- common.error.working_dir -> common.error.failed + Action
- common.error.load_config -> common.error.failed + Action
- common.error.build_failed -> common.error.failed + Action
- common.error.get_logs -> common.error.failed + Action
- common.error.tests_failed -> common.error.failed + Action

This reduces 5 duplicate error keys to 1 reusable template:
"Failed to {{.Action}}"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Snider 2026-01-30 11:35:38 +00:00
parent 3169728d3a
commit bcf74fe84e
19 changed files with 47 additions and 52 deletions

View file

@ -45,7 +45,7 @@ var taskCommitCmd = &cobra.Command{
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)
@ -71,7 +71,7 @@ var taskCommitCmd = &cobra.Command{
// Get current directory
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Check for uncommitted changes
@ -116,7 +116,7 @@ var taskPRCmd = &cobra.Command{
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)
@ -133,7 +133,7 @@ var taskPRCmd = &cobra.Command{
// Get current directory
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Check current branch

View file

@ -43,7 +43,7 @@ var tasksCmd = &cobra.Command{
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)
@ -88,7 +88,7 @@ var taskCmd = &cobra.Command{
RunE: func(cmd *cobra.Command, args []string) error {
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)

View file

@ -40,7 +40,7 @@ var taskUpdateCmd = &cobra.Command{
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)
@ -75,7 +75,7 @@ var taskCompleteCmd = &cobra.Command{
cfg, err := agentic.LoadConfig("")
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
client := agentic.NewClientFromConfig(cfg)

View file

@ -25,13 +25,13 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi
// Get current working directory as project root
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Load configuration from .core/build.yaml (or defaults)
buildCfg, err := buildpkg.LoadConfig(projectDir)
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
// Detect project type if not specified
@ -120,7 +120,7 @@ func runProjectBuild(buildType string, ciMode bool, targetsFlag string, outputDi
artifacts, err := builder.Build(ctx, cfg, buildTargets)
if err != nil {
if !ciMode {
fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("common.error.build_failed"), err)
fmt.Printf("%s %s: %v\n", buildErrorStyle.Render(i18n.T("common.label.error")), i18n.T("common.error.failed", map[string]any{"Action": "build"}), err)
}
return err
}

View file

@ -21,7 +21,7 @@ func runBuildSDK(specPath, lang, version string, dryRun bool) error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Load config

View file

@ -12,13 +12,13 @@ import (
func runChangelog(fromRef, toRef string) error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Load config for changelog settings
cfg, err := release.LoadConfig(projectDir)
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
// Generate changelog

View file

@ -15,7 +15,7 @@ import (
func runCIReleaseInit() error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Check if config already exists

View file

@ -17,13 +17,13 @@ func runCIPublish(dryRun bool, version string, draft, prerelease bool) error {
// Get current directory
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Load configuration
cfg, err := release.LoadConfig(projectDir)
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.load_config"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "load config"}), err)
}
// Apply CLI overrides

View file

@ -12,7 +12,7 @@ import (
func runCIReleaseVersion() error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
version, err := release.DetermineVersion(projectDir)

View file

@ -31,7 +31,7 @@ func addPHPBuildCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
ctx := context.Background()
@ -135,7 +135,7 @@ func runPHPBuildDocker(ctx context.Context, projectDir string, opts dockerBuildO
fmt.Println()
if err := phppkg.BuildDocker(ctx, buildOpts); err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "build"}), err)
}
fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.build.docker_success"))
@ -173,7 +173,7 @@ func runPHPBuildLinuxKit(ctx context.Context, projectDir string, opts linuxKitBu
fmt.Println()
if err := phppkg.BuildLinuxKit(ctx, buildOpts); err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "build"}), err)
}
fmt.Printf("\n%s %s\n", successStyle.Render(i18n.T("common.label.done")), i18n.T("cmd.php.build.linuxkit_success"))

View file

@ -47,7 +47,7 @@ func addPHPDeployCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
env := phppkg.EnvProduction
@ -107,7 +107,7 @@ func addPHPDeployStatusCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
env := phppkg.EnvProduction
@ -156,7 +156,7 @@ func addPHPDeployRollbackCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
env := phppkg.EnvProduction
@ -216,7 +216,7 @@ func addPHPDeployListCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
env := phppkg.EnvProduction

View file

@ -217,7 +217,7 @@ func runPHPLogs(service string, follow bool) error {
logsReader, err := server.Logs(service, follow)
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.get_logs"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get logs"}), err)
}
defer logsReader.Close()

View file

@ -32,7 +32,7 @@ func addPHPPackagesLinkCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.link.linking"))
@ -58,7 +58,7 @@ func addPHPPackagesUnlinkCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.unlink.unlinking"))
@ -83,7 +83,7 @@ func addPHPPackagesUpdateCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
fmt.Printf("%s %s\n\n", dimStyle.Render(i18n.T("cmd.php.label.php")), i18n.T("cmd.php.packages.update.updating"))
@ -108,7 +108,7 @@ func addPHPPackagesListCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
packages, err := phppkg.ListLinkedPackages(cwd)

View file

@ -30,7 +30,7 @@ func addPHPTestCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -56,7 +56,7 @@ func addPHPTestCommand(parent *cobra.Command) {
}
if err := phppkg.RunTests(ctx, opts); err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.tests_failed"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "run tests"}), err)
}
return nil
@ -84,7 +84,7 @@ func addPHPFmtCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -155,7 +155,7 @@ func addPHPAnalyseCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -218,7 +218,7 @@ func addPHPPsalmCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -283,7 +283,7 @@ func addPHPAuditCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -376,7 +376,7 @@ func addPHPSecurityCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -474,7 +474,7 @@ func addPHPQACommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -682,7 +682,7 @@ func addPHPRectorCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {
@ -756,7 +756,7 @@ func addPHPInfectionCommand(parent *cobra.Command) {
RunE: func(cmd *cobra.Command, args []string) error {
cwd, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
if !phppkg.IsPHPProject(cwd) {

View file

@ -64,7 +64,7 @@ func init() {
func runSDKDiff(basePath, specPath string) error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
// Detect current spec if not provided
@ -106,7 +106,7 @@ func runSDKDiff(basePath, specPath string) error {
func runSDKValidate(specPath string) error {
projectDir, err := os.Getwd()
if err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.working_dir"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "get working directory"}), err)
}
s := sdkpkg.New(projectDir, &sdkpkg.Config{Spec: specPath})

View file

@ -206,7 +206,7 @@ func runRegistrySetupWithReg(ctx context.Context, reg *repos.Registry, registryP
buildCmd.Stdout = os.Stdout
buildCmd.Stderr = os.Stderr
if err := buildCmd.Run(); err != nil {
return fmt.Errorf("%s: %w", i18n.T("common.error.build_failed"), err)
return fmt.Errorf("%s: %w", i18n.T("common.error.failed", map[string]any{"Action": "build"}), err)
}
}

View file

@ -93,7 +93,7 @@ func runTest(verbose, coverage, short bool, pkg, run string, race, jsonOutput bo
// JSON output for CI/agents
printJSONResults(results, exitCode)
if exitCode != 0 {
return fmt.Errorf(i18n.T("common.error.tests_failed"))
return fmt.Errorf(i18n.T("common.error.failed", map[string]any{"Action": "run tests"}))
}
return nil
}
@ -109,7 +109,7 @@ func runTest(verbose, coverage, short bool, pkg, run string, race, jsonOutput bo
if exitCode != 0 {
fmt.Printf("\n%s %s\n", testFailStyle.Render(i18n.T("cli.fail")), i18n.T("cmd.test.tests_failed"))
return fmt.Errorf(i18n.T("common.error.tests_failed"))
return fmt.Errorf(i18n.T("common.error.failed", map[string]any{"Action": "run tests"}))
}
fmt.Printf("\n%s %s\n", testPassStyle.Render(i18n.T("cli.pass")), i18n.T("common.result.all_passed"))

View file

@ -302,7 +302,7 @@ func viewLogs(id string, follow bool) error {
ctx := context.Background()
reader, err := manager.Logs(ctx, fullID, follow)
if err != nil {
return fmt.Errorf(i18n.T("common.error.get_logs")+": %w", err)
return fmt.Errorf(i18n.T("common.error.failed", map[string]any{"Action": "get logs"})+": %w", err)
}
defer reader.Close()

View file

@ -41,12 +41,7 @@
"error": {
"failed": "Failed to {{.Action}}",
"not_found": "{{.Item}} not found",
"no_items": "No {{.Items}} found",
"working_dir": "Failed to get working directory",
"load_config": "Failed to load config",
"build_failed": "Build failed",
"tests_failed": "Tests failed",
"get_logs": "Failed to get logs"
"no_items": "No {{.Items}} found"
},
"success": {
"completed": "{{.Action}} completed successfully",