Skip to content

Commit 2afbc3e

Browse files
authored
Merge pull request #6 from dAppCore/dev
chore: promote dev to main — cli v0.10.0 (Mantis #1220, audit COMPLIANT)
2 parents 066bc81 + de67a68 commit 2afbc3e

21 files changed

Lines changed: 291 additions & 180 deletions

cmd/core/config/cmd.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,32 @@ import (
99
// AddConfigCommands registers the 'config' command group and all subcommands.
1010
//
1111
// config.AddConfigCommands(c)
12-
func AddConfigCommands(c *core.Core) {
13-
c.Command("config/get", core.Command{
12+
func AddConfigCommands(c *core.Core) core.Result {
13+
if r := c.Command("config/get", core.Command{
1414
Description: "Get a configuration value",
1515
Action: configGetAction,
16-
})
17-
c.Command("config/set", core.Command{
16+
}); !r.OK {
17+
return r
18+
}
19+
if r := c.Command("config/set", core.Command{
1820
Description: "Set a configuration value",
1921
Action: configSetAction,
20-
})
21-
c.Command("config/list", core.Command{
22+
}); !r.OK {
23+
return r
24+
}
25+
if r := c.Command("config/list", core.Command{
2226
Description: "List all configuration values",
2327
Action: configListAction,
24-
})
25-
c.Command("config/path", core.Command{
28+
}); !r.OK {
29+
return r
30+
}
31+
if r := c.Command("config/path", core.Command{
2632
Description: "Show the configuration file path",
2733
Action: configPathAction,
28-
})
34+
}); !r.OK {
35+
return r
36+
}
37+
return core.Ok(nil)
2938
}
3039

3140
func loadConfig() core.Result {

cmd/core/doctor/cmd_checks.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package doctor
22

33
import (
44
"dappco.re/go"
5-
"dappco.re/go/cli/pkg/i18n"
5+
"dappco.re/go/cli/pkg/cli"
66
)
77

88
// check represents a tool check configuration
@@ -18,43 +18,43 @@ type check struct {
1818
func requiredChecks() []check {
1919
return []check{
2020
{
21-
name: i18n.T("cmd.doctor.check.git.name"),
22-
description: i18n.T("cmd.doctor.check.git.description"),
21+
name: cli.T("cmd.doctor.check.git.name"),
22+
description: cli.T("cmd.doctor.check.git.description"),
2323
command: "git",
2424
args: []string{"--version"},
2525
versionFlag: "--version",
2626
},
2727
{
28-
name: i18n.T("cmd.doctor.check.go.name"),
29-
description: i18n.T("cmd.doctor.check.go.description"),
28+
name: cli.T("cmd.doctor.check.go.name"),
29+
description: cli.T("cmd.doctor.check.go.description"),
3030
command: "go",
3131
args: []string{"version"},
3232
versionFlag: "version",
3333
},
3434
{
35-
name: i18n.T("cmd.doctor.check.gh.name"),
36-
description: i18n.T("cmd.doctor.check.gh.description"),
35+
name: cli.T("cmd.doctor.check.gh.name"),
36+
description: cli.T("cmd.doctor.check.gh.description"),
3737
command: "gh",
3838
args: []string{"--version"},
3939
versionFlag: "--version",
4040
},
4141
{
42-
name: i18n.T("cmd.doctor.check.php.name"),
43-
description: i18n.T("cmd.doctor.check.php.description"),
42+
name: cli.T("cmd.doctor.check.php.name"),
43+
description: cli.T("cmd.doctor.check.php.description"),
4444
command: "php",
4545
args: []string{"-v"},
4646
versionFlag: "-v",
4747
},
4848
{
49-
name: i18n.T("cmd.doctor.check.composer.name"),
50-
description: i18n.T("cmd.doctor.check.composer.description"),
49+
name: cli.T("cmd.doctor.check.composer.name"),
50+
description: cli.T("cmd.doctor.check.composer.description"),
5151
command: "composer",
5252
args: []string{"--version"},
5353
versionFlag: "--version",
5454
},
5555
{
56-
name: i18n.T("cmd.doctor.check.node.name"),
57-
description: i18n.T("cmd.doctor.check.node.description"),
56+
name: cli.T("cmd.doctor.check.node.name"),
57+
description: cli.T("cmd.doctor.check.node.description"),
5858
command: "node",
5959
args: []string{"--version"},
6060
versionFlag: "--version",
@@ -66,22 +66,22 @@ func requiredChecks() []check {
6666
func optionalChecks() []check {
6767
return []check{
6868
{
69-
name: i18n.T("cmd.doctor.check.pnpm.name"),
70-
description: i18n.T("cmd.doctor.check.pnpm.description"),
69+
name: cli.T("cmd.doctor.check.pnpm.name"),
70+
description: cli.T("cmd.doctor.check.pnpm.description"),
7171
command: "pnpm",
7272
args: []string{"--version"},
7373
versionFlag: "--version",
7474
},
7575
{
76-
name: i18n.T("cmd.doctor.check.claude.name"),
77-
description: i18n.T("cmd.doctor.check.claude.description"),
76+
name: cli.T("cmd.doctor.check.claude.name"),
77+
description: cli.T("cmd.doctor.check.claude.description"),
7878
command: "claude",
7979
args: []string{"--version"},
8080
versionFlag: "--version",
8181
},
8282
{
83-
name: i18n.T("cmd.doctor.check.docker.name"),
84-
description: i18n.T("cmd.doctor.check.docker.description"),
83+
name: cli.T("cmd.doctor.check.docker.name"),
84+
description: cli.T("cmd.doctor.check.docker.description"),
8585
command: "docker",
8686
args: []string{"--version"},
8787
versionFlag: "--version",

cmd/core/doctor/cmd_commands.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ import (
1717
// AddDoctorCommands registers the 'doctor' command and all subcommands.
1818
//
1919
// doctor.AddDoctorCommands(c)
20-
func AddDoctorCommands(c *core.Core) {
21-
c.Command("doctor", core.Command{
20+
func AddDoctorCommands(c *core.Core) core.Result {
21+
if r := c.Command("doctor", core.Command{
2222
Description: "Check development environment health",
2323
Action: doctorAction,
24-
})
24+
}); !r.OK {
25+
return r
26+
}
27+
return core.Ok(nil)
2528
}

cmd/core/doctor/cmd_doctor.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package doctor
44
import (
55
"dappco.re/go"
66
"dappco.re/go/cli/pkg/cli"
7-
"dappco.re/go/cli/pkg/i18n"
87
)
98

109
// Style aliases from shared
@@ -23,13 +22,13 @@ func doctorAction(opts core.Options) core.Result {
2322
}
2423

2524
func runDoctor(verbose bool) core.Result {
26-
cli.Println("%s", i18n.T("common.progress.checking", map[string]any{"Item": "development environment"}))
25+
cli.Println("%s", cli.T("common.progress.checking", map[string]any{"Item": "development environment"}))
2726
cli.Blank()
2827

2928
var passed, failed, optional int
3029

3130
// Check required tools
32-
cli.Println("%s", i18n.T("cmd.doctor.required"))
31+
cli.Println("%s", cli.T("cmd.doctor.required"))
3332
for _, toolCheck := range requiredChecks() {
3433
ok, version := runCheck(toolCheck)
3534
if ok {
@@ -46,7 +45,7 @@ func runDoctor(verbose bool) core.Result {
4645
}
4746

4847
// Check optional tools
49-
cli.Println("\n%s", i18n.T("cmd.doctor.optional"))
48+
cli.Println("\n%s", cli.T("cmd.doctor.optional"))
5049
for _, toolCheck := range optionalChecks() {
5150
ok, version := runCheck(toolCheck)
5251
if ok {
@@ -63,35 +62,35 @@ func runDoctor(verbose bool) core.Result {
6362
}
6463

6564
// Check GitHub access
66-
cli.Println("\n%s", i18n.T("cmd.doctor.github"))
65+
cli.Println("\n%s", cli.T("cmd.doctor.github"))
6766
if checkGitHubSSH() {
68-
cli.Println("%s", formatCheckResult(true, i18n.T("cmd.doctor.ssh_found"), ""))
67+
cli.Println("%s", formatCheckResult(true, cli.T("cmd.doctor.ssh_found"), ""))
6968
} else {
70-
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), i18n.T("cmd.doctor.ssh_missing"))
69+
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), cli.T("cmd.doctor.ssh_missing"))
7170
failed++
7271
}
7372

7473
if checkGitHubCLI() {
75-
cli.Println("%s", formatCheckResult(true, i18n.T("cmd.doctor.cli_auth"), ""))
74+
cli.Println("%s", formatCheckResult(true, cli.T("cmd.doctor.cli_auth"), ""))
7675
} else {
77-
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), i18n.T("cmd.doctor.cli_auth_missing"))
76+
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), cli.T("cmd.doctor.cli_auth_missing"))
7877
failed++
7978
}
8079

8180
// Check workspace
82-
cli.Println("\n%s", i18n.T("cmd.doctor.workspace"))
81+
cli.Println("\n%s", cli.T("cmd.doctor.workspace"))
8382
checkWorkspace()
8483

8584
// Summary
8685
cli.Blank()
8786
if failed > 0 {
88-
cli.Error(i18n.T("cmd.doctor.issues", map[string]any{"Count": failed}))
89-
cli.Println("\n%s", i18n.T("cmd.doctor.install_missing"))
87+
cli.Error(cli.T("cmd.doctor.issues", map[string]any{"Count": failed}))
88+
cli.Println("\n%s", cli.T("cmd.doctor.install_missing"))
9089
printInstallInstructions()
91-
return cli.Err("%s", i18n.T("cmd.doctor.issues_error", map[string]any{"Count": failed}))
90+
return cli.Err("%s", cli.T("cmd.doctor.issues_error", map[string]any{"Count": failed}))
9291
}
9392

94-
cli.Success(i18n.T("cmd.doctor.ready"))
93+
cli.Success(cli.T("cmd.doctor.ready"))
9594
_ = passed
9695
_ = optional
9796
return core.Ok(nil)

cmd/core/doctor/cmd_environment.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package doctor
33
import (
44
"dappco.re/go"
55
"dappco.re/go/cli/pkg/cli"
6-
"dappco.re/go/cli/pkg/i18n"
76
io "dappco.re/go/io"
87
"dappco.re/go/scm/repos"
98
)
@@ -45,7 +44,7 @@ func checkGitHubCLI() bool {
4544
func checkWorkspace() {
4645
registryPath, err := repos.FindRegistry(io.Local)
4746
if err == nil {
48-
cli.Println(" %s %s", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_yaml_found", map[string]any{"Path": registryPath}))
47+
cli.Println(" %s %s", successStyle.Render("✓"), cli.T("cmd.doctor.repos_yaml_found", map[string]any{"Path": registryPath}))
4948

5049
registry, err := repos.LoadRegistry(io.Local, registryPath)
5150
if err == nil {
@@ -72,9 +71,9 @@ func checkWorkspace() {
7271
cloned++
7372
}
7473
}
75-
cli.Println(" %s %s", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_cloned", map[string]any{"Cloned": cloned, "Total": len(allRepos)}))
74+
cli.Println(" %s %s", successStyle.Render("✓"), cli.T("cmd.doctor.repos_cloned", map[string]any{"Cloned": cloned, "Total": len(allRepos)}))
7675
}
7776
} else {
78-
cli.Println(" %s %s", dimStyle.Render("○"), i18n.T("cmd.doctor.no_repos_yaml"))
77+
cli.Println(" %s %s", dimStyle.Render("○"), cli.T("cmd.doctor.no_repos_yaml"))
7978
}
8079
}

cmd/core/doctor/cmd_install.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@ import (
44
"runtime"
55

66
"dappco.re/go/cli/pkg/cli"
7-
"dappco.re/go/cli/pkg/i18n"
87
)
98

109
// printInstallInstructions prints operating-system-specific installation instructions.
1110
func printInstallInstructions() {
1211
switch runtime.GOOS {
1312
case "darwin":
14-
cli.Println(" %s", i18n.T("cmd.doctor.install_macos"))
15-
cli.Println(" %s", i18n.T("cmd.doctor.install_macos_cask"))
13+
cli.Println(" %s", cli.T("cmd.doctor.install_macos"))
14+
cli.Println(" %s", cli.T("cmd.doctor.install_macos_cask"))
1615
case "linux":
17-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_header"))
18-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_git"))
19-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_gh"))
20-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_php"))
21-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_node"))
22-
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_pnpm"))
16+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_header"))
17+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_git"))
18+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_gh"))
19+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_php"))
20+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_node"))
21+
cli.Println(" %s", cli.T("cmd.doctor.install_linux_pnpm"))
2322
default:
24-
cli.Println(" %s", i18n.T("cmd.doctor.install_other"))
23+
cli.Println(" %s", cli.T("cmd.doctor.install_other"))
2524
}
2625
}

cmd/core/help/cmd.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ import (
99
// AddHelpCommands registers the help command and subcommands.
1010
//
1111
// help.AddHelpCommands(c)
12-
func AddHelpCommands(c *core.Core) {
13-
c.Command("help", core.Command{
12+
func AddHelpCommands(c *core.Core) core.Result {
13+
if r := c.Command("help", core.Command{
1414
Description: "Display help documentation",
1515
Action: helpAction,
16-
})
16+
}); !r.OK {
17+
return r
18+
}
19+
return core.Ok(nil)
1720
}
1821

1922
func helpAction(opts core.Options) core.Result {

cmd/core/pkgcmd/cmd_install.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import (
55

66
"dappco.re/go"
77
"dappco.re/go/cli/pkg/cli"
8-
"dappco.re/go/cli/pkg/i18n"
98
coreio "dappco.re/go/io"
109
"dappco.re/go/scm/repos"
1110
)
1211

1312
func pkgInstallAction(opts core.Options) core.Result {
1413
repoArg := opts.String("_arg")
1514
if repoArg == "" {
16-
return cli.Err(i18n.T("cmd.pkg.error.repo_required"))
15+
return cli.Err(cli.T("cmd.pkg.error.repo_required"))
1716
}
1817
targetDir := opts.String("dir")
1918
addToReg := opts.Bool("add")
@@ -29,7 +28,7 @@ func runPkgInstall(repoArg, targetDirectory string, addToRegistry bool) core.Res
2928
// Parse org/repo argument.
3029
parts := core.Split(repoArg, "/")
3130
if len(parts) != 2 {
32-
return cli.Err(i18n.T("cmd.pkg.error.invalid_repo_format"))
31+
return cli.Err(cli.T("cmd.pkg.error.invalid_repo_format"))
3332
}
3433
org, repoName := parts[0], parts[1]
3534

@@ -61,19 +60,19 @@ func runPkgInstall(repoArg, targetDirectory string, addToRegistry bool) core.Res
6160
repoPath := core.Path(targetDirectory, repoName)
6261

6362
if coreio.Local.Exists(core.Path(repoPath, ".git")) {
64-
cli.Println("%s %s", dimStyle.Render(i18n.Label("skip")), i18n.T("cmd.pkg.install.already_exists", map[string]string{"Name": repoName, "Path": repoPath}))
63+
cli.Println("%s %s", dimStyle.Render(cli.T("i18n.label.skip")), cli.T("cmd.pkg.install.already_exists", map[string]string{"Name": repoName, "Path": repoPath}))
6564
return core.Ok(nil)
6665
}
6766

6867
if err := coreio.Local.EnsureDir(targetDirectory); err != nil {
69-
return cli.Wrap(err, i18n.T("i18n.fail.create", "directory"))
68+
return cli.Wrap(err, cli.T("i18n.fail.create", "directory"))
7069
}
7170

72-
cli.Println("%s %s/%s", dimStyle.Render(i18n.T("cmd.pkg.install.installing_label")), org, repoName)
73-
cli.Println("%s %s", dimStyle.Render(i18n.Label("target")), repoPath)
71+
cli.Println("%s %s/%s", dimStyle.Render(cli.T("cmd.pkg.install.installing_label")), org, repoName)
72+
cli.Println("%s %s", dimStyle.Render(cli.T("i18n.label.target")), repoPath)
7473
cli.Blank()
7574

76-
cli.Print(" %s... ", dimStyle.Render(i18n.T("common.status.cloning")))
75+
cli.Print(" %s... ", dimStyle.Render(cli.T("common.status.cloning")))
7776
cloneResult := gitClone(ctx, org, repoName, repoPath)
7877
if !cloneResult.OK {
7978
cli.Println("%s", errorStyle.Render("x "+cloneResult.Error()))
@@ -83,22 +82,22 @@ func runPkgInstall(repoArg, targetDirectory string, addToRegistry bool) core.Res
8382

8483
if addToRegistry {
8584
if r := addToRegistryFile(org, repoName); !r.OK {
86-
cli.Println(" %s %s: %s", errorStyle.Render("x"), i18n.T("cmd.pkg.install.add_to_registry"), r.Error())
85+
cli.Println(" %s %s: %s", errorStyle.Render("x"), cli.T("cmd.pkg.install.add_to_registry"), r.Error())
8786
} else {
88-
cli.Println(" %s %s", successStyle.Render("ok"), i18n.T("cmd.pkg.install.added_to_registry"))
87+
cli.Println(" %s %s", successStyle.Render("ok"), cli.T("cmd.pkg.install.added_to_registry"))
8988
}
9089
}
9190

9291
cli.Blank()
93-
cli.Println("%s %s", successStyle.Render(i18n.T("i18n.done.install")), i18n.T("cmd.pkg.install.installed", map[string]string{"Name": repoName}))
92+
cli.Println("%s %s", successStyle.Render(cli.T("i18n.done.install")), cli.T("cmd.pkg.install.installed", map[string]string{"Name": repoName}))
9493

9594
return core.Ok(nil)
9695
}
9796

9897
func addToRegistryFile(org, repoName string) core.Result {
9998
registryPath, err := repos.FindRegistry(coreio.Local)
10099
if err != nil {
101-
return cli.Err(i18n.T("cmd.pkg.error.no_repos_yaml"))
100+
return cli.Err(cli.T("cmd.pkg.error.no_repos_yaml"))
102101
}
103102

104103
registry, err := repos.LoadRegistry(coreio.Local, registryPath)

0 commit comments

Comments
 (0)