Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions cmd/core/config/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,32 @@ import (
// AddConfigCommands registers the 'config' command group and all subcommands.
//
// config.AddConfigCommands(c)
func AddConfigCommands(c *core.Core) {
c.Command("config/get", core.Command{
func AddConfigCommands(c *core.Core) core.Result {
if r := c.Command("config/get", core.Command{
Description: "Get a configuration value",
Action: configGetAction,
})
c.Command("config/set", core.Command{
}); !r.OK {
return r
}
if r := c.Command("config/set", core.Command{
Description: "Set a configuration value",
Action: configSetAction,
})
c.Command("config/list", core.Command{
}); !r.OK {
return r
}
if r := c.Command("config/list", core.Command{
Description: "List all configuration values",
Action: configListAction,
})
c.Command("config/path", core.Command{
}); !r.OK {
return r
}
if r := c.Command("config/path", core.Command{
Description: "Show the configuration file path",
Action: configPathAction,
})
}); !r.OK {
return r
}
return core.Ok(nil)
}

func loadConfig() core.Result {
Expand Down
38 changes: 19 additions & 19 deletions cmd/core/doctor/cmd_checks.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package doctor

import (
"dappco.re/go"
"dappco.re/go/cli/pkg/i18n"
"dappco.re/go/cli/pkg/cli"
)

// check represents a tool check configuration
Expand All @@ -18,43 +18,43 @@ type check struct {
func requiredChecks() []check {
return []check{
{
name: i18n.T("cmd.doctor.check.git.name"),
description: i18n.T("cmd.doctor.check.git.description"),
name: cli.T("cmd.doctor.check.git.name"),
description: cli.T("cmd.doctor.check.git.description"),
command: "git",
args: []string{"--version"},
versionFlag: "--version",
},
{
name: i18n.T("cmd.doctor.check.go.name"),
description: i18n.T("cmd.doctor.check.go.description"),
name: cli.T("cmd.doctor.check.go.name"),
description: cli.T("cmd.doctor.check.go.description"),
command: "go",
args: []string{"version"},
versionFlag: "version",
},
{
name: i18n.T("cmd.doctor.check.gh.name"),
description: i18n.T("cmd.doctor.check.gh.description"),
name: cli.T("cmd.doctor.check.gh.name"),
description: cli.T("cmd.doctor.check.gh.description"),
command: "gh",
args: []string{"--version"},
versionFlag: "--version",
},
{
name: i18n.T("cmd.doctor.check.php.name"),
description: i18n.T("cmd.doctor.check.php.description"),
name: cli.T("cmd.doctor.check.php.name"),
description: cli.T("cmd.doctor.check.php.description"),
command: "php",
args: []string{"-v"},
versionFlag: "-v",
},
{
name: i18n.T("cmd.doctor.check.composer.name"),
description: i18n.T("cmd.doctor.check.composer.description"),
name: cli.T("cmd.doctor.check.composer.name"),
description: cli.T("cmd.doctor.check.composer.description"),
command: "composer",
args: []string{"--version"},
versionFlag: "--version",
},
{
name: i18n.T("cmd.doctor.check.node.name"),
description: i18n.T("cmd.doctor.check.node.description"),
name: cli.T("cmd.doctor.check.node.name"),
description: cli.T("cmd.doctor.check.node.description"),
command: "node",
args: []string{"--version"},
versionFlag: "--version",
Expand All @@ -66,22 +66,22 @@ func requiredChecks() []check {
func optionalChecks() []check {
return []check{
{
name: i18n.T("cmd.doctor.check.pnpm.name"),
description: i18n.T("cmd.doctor.check.pnpm.description"),
name: cli.T("cmd.doctor.check.pnpm.name"),
description: cli.T("cmd.doctor.check.pnpm.description"),
command: "pnpm",
args: []string{"--version"},
versionFlag: "--version",
},
{
name: i18n.T("cmd.doctor.check.claude.name"),
description: i18n.T("cmd.doctor.check.claude.description"),
name: cli.T("cmd.doctor.check.claude.name"),
description: cli.T("cmd.doctor.check.claude.description"),
command: "claude",
args: []string{"--version"},
versionFlag: "--version",
},
{
name: i18n.T("cmd.doctor.check.docker.name"),
description: i18n.T("cmd.doctor.check.docker.description"),
name: cli.T("cmd.doctor.check.docker.name"),
description: cli.T("cmd.doctor.check.docker.description"),
command: "docker",
args: []string{"--version"},
versionFlag: "--version",
Expand Down
9 changes: 6 additions & 3 deletions cmd/core/doctor/cmd_commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ import (
// AddDoctorCommands registers the 'doctor' command and all subcommands.
//
// doctor.AddDoctorCommands(c)
func AddDoctorCommands(c *core.Core) {
c.Command("doctor", core.Command{
func AddDoctorCommands(c *core.Core) core.Result {
if r := c.Command("doctor", core.Command{
Description: "Check development environment health",
Action: doctorAction,
})
}); !r.OK {
return r
}
return core.Ok(nil)
}
27 changes: 13 additions & 14 deletions cmd/core/doctor/cmd_doctor.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ package doctor
import (
"dappco.re/go"
"dappco.re/go/cli/pkg/cli"
"dappco.re/go/cli/pkg/i18n"
)

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

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

var passed, failed, optional int

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

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

// Check GitHub access
cli.Println("\n%s", i18n.T("cmd.doctor.github"))
cli.Println("\n%s", cli.T("cmd.doctor.github"))
if checkGitHubSSH() {
cli.Println("%s", formatCheckResult(true, i18n.T("cmd.doctor.ssh_found"), ""))
cli.Println("%s", formatCheckResult(true, cli.T("cmd.doctor.ssh_found"), ""))
} else {
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), i18n.T("cmd.doctor.ssh_missing"))
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), cli.T("cmd.doctor.ssh_missing"))
failed++
}

if checkGitHubCLI() {
cli.Println("%s", formatCheckResult(true, i18n.T("cmd.doctor.cli_auth"), ""))
cli.Println("%s", formatCheckResult(true, cli.T("cmd.doctor.cli_auth"), ""))
} else {
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), i18n.T("cmd.doctor.cli_auth_missing"))
cli.Println(" %s %s", errorStyle.Render(cli.Glyph(":cross:")), cli.T("cmd.doctor.cli_auth_missing"))
failed++
}

// Check workspace
cli.Println("\n%s", i18n.T("cmd.doctor.workspace"))
cli.Println("\n%s", cli.T("cmd.doctor.workspace"))
checkWorkspace()

// Summary
cli.Blank()
if failed > 0 {
cli.Error(i18n.T("cmd.doctor.issues", map[string]any{"Count": failed}))
cli.Println("\n%s", i18n.T("cmd.doctor.install_missing"))
cli.Error(cli.T("cmd.doctor.issues", map[string]any{"Count": failed}))
cli.Println("\n%s", cli.T("cmd.doctor.install_missing"))
printInstallInstructions()
return cli.Err("%s", i18n.T("cmd.doctor.issues_error", map[string]any{"Count": failed}))
return cli.Err("%s", cli.T("cmd.doctor.issues_error", map[string]any{"Count": failed}))
}

cli.Success(i18n.T("cmd.doctor.ready"))
cli.Success(cli.T("cmd.doctor.ready"))
_ = passed
_ = optional
return core.Ok(nil)
Expand Down
7 changes: 3 additions & 4 deletions cmd/core/doctor/cmd_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import (
"dappco.re/go"
"dappco.re/go/cli/pkg/cli"
"dappco.re/go/cli/pkg/i18n"
io "dappco.re/go/io"
"dappco.re/go/scm/repos"
)
Expand Down Expand Up @@ -45,7 +44,7 @@
func checkWorkspace() {
registryPath, err := repos.FindRegistry(io.Local)
if err == nil {
cli.Println(" %s %s", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_yaml_found", map[string]any{"Path": registryPath}))
cli.Println(" %s %s", successStyle.Render("✓"), cli.T("cmd.doctor.repos_yaml_found", map[string]any{"Path": registryPath}))

Check failure on line 47 in cmd/core/doctor/cmd_environment.go

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal " %s %s" 3 times.

See more on https://sonarcloud.io/project/issues?id=dAppCore_cli&issues=AZ3fp0QHZYINTeZ1bAGK&open=AZ3fp0QHZYINTeZ1bAGK&pullRequest=6

registry, err := repos.LoadRegistry(io.Local, registryPath)
if err == nil {
Expand All @@ -72,9 +71,9 @@
cloned++
}
}
cli.Println(" %s %s", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_cloned", map[string]any{"Cloned": cloned, "Total": len(allRepos)}))
cli.Println(" %s %s", successStyle.Render("✓"), cli.T("cmd.doctor.repos_cloned", map[string]any{"Cloned": cloned, "Total": len(allRepos)}))
}
} else {
cli.Println(" %s %s", dimStyle.Render("○"), i18n.T("cmd.doctor.no_repos_yaml"))
cli.Println(" %s %s", dimStyle.Render("○"), cli.T("cmd.doctor.no_repos_yaml"))
}
}
19 changes: 9 additions & 10 deletions cmd/core/doctor/cmd_install.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,22 @@ import (
"runtime"

"dappco.re/go/cli/pkg/cli"
"dappco.re/go/cli/pkg/i18n"
)

// printInstallInstructions prints operating-system-specific installation instructions.
func printInstallInstructions() {
switch runtime.GOOS {
case "darwin":
cli.Println(" %s", i18n.T("cmd.doctor.install_macos"))
cli.Println(" %s", i18n.T("cmd.doctor.install_macos_cask"))
cli.Println(" %s", cli.T("cmd.doctor.install_macos"))
cli.Println(" %s", cli.T("cmd.doctor.install_macos_cask"))
case "linux":
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_header"))
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_git"))
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_gh"))
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_php"))
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_node"))
cli.Println(" %s", i18n.T("cmd.doctor.install_linux_pnpm"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_header"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_git"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_gh"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_php"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_node"))
cli.Println(" %s", cli.T("cmd.doctor.install_linux_pnpm"))
default:
cli.Println(" %s", i18n.T("cmd.doctor.install_other"))
cli.Println(" %s", cli.T("cmd.doctor.install_other"))
}
}
9 changes: 6 additions & 3 deletions cmd/core/help/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@ import (
// AddHelpCommands registers the help command and subcommands.
//
// help.AddHelpCommands(c)
func AddHelpCommands(c *core.Core) {
c.Command("help", core.Command{
func AddHelpCommands(c *core.Core) core.Result {
if r := c.Command("help", core.Command{
Description: "Display help documentation",
Action: helpAction,
})
}); !r.OK {
return r
}
return core.Ok(nil)
}

func helpAction(opts core.Options) core.Result {
Expand Down
23 changes: 11 additions & 12 deletions cmd/core/pkgcmd/cmd_install.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ import (

"dappco.re/go"
"dappco.re/go/cli/pkg/cli"
"dappco.re/go/cli/pkg/i18n"
coreio "dappco.re/go/io"
"dappco.re/go/scm/repos"
)

func pkgInstallAction(opts core.Options) core.Result {
repoArg := opts.String("_arg")
if repoArg == "" {
return cli.Err(i18n.T("cmd.pkg.error.repo_required"))
return cli.Err(cli.T("cmd.pkg.error.repo_required"))
}
targetDir := opts.String("dir")
addToReg := opts.Bool("add")
Expand All @@ -29,7 +28,7 @@ func runPkgInstall(repoArg, targetDirectory string, addToRegistry bool) core.Res
// Parse org/repo argument.
parts := core.Split(repoArg, "/")
if len(parts) != 2 {
return cli.Err(i18n.T("cmd.pkg.error.invalid_repo_format"))
return cli.Err(cli.T("cmd.pkg.error.invalid_repo_format"))
}
org, repoName := parts[0], parts[1]

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

if coreio.Local.Exists(core.Path(repoPath, ".git")) {
cli.Println("%s %s", dimStyle.Render(i18n.Label("skip")), i18n.T("cmd.pkg.install.already_exists", map[string]string{"Name": repoName, "Path": repoPath}))
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}))
return core.Ok(nil)
}

if err := coreio.Local.EnsureDir(targetDirectory); err != nil {
return cli.Wrap(err, i18n.T("i18n.fail.create", "directory"))
return cli.Wrap(err, cli.T("i18n.fail.create", "directory"))
}

cli.Println("%s %s/%s", dimStyle.Render(i18n.T("cmd.pkg.install.installing_label")), org, repoName)
cli.Println("%s %s", dimStyle.Render(i18n.Label("target")), repoPath)
cli.Println("%s %s/%s", dimStyle.Render(cli.T("cmd.pkg.install.installing_label")), org, repoName)
cli.Println("%s %s", dimStyle.Render(cli.T("i18n.label.target")), repoPath)
cli.Blank()

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

if addToRegistry {
if r := addToRegistryFile(org, repoName); !r.OK {
cli.Println(" %s %s: %s", errorStyle.Render("x"), i18n.T("cmd.pkg.install.add_to_registry"), r.Error())
cli.Println(" %s %s: %s", errorStyle.Render("x"), cli.T("cmd.pkg.install.add_to_registry"), r.Error())
} else {
cli.Println(" %s %s", successStyle.Render("ok"), i18n.T("cmd.pkg.install.added_to_registry"))
cli.Println(" %s %s", successStyle.Render("ok"), cli.T("cmd.pkg.install.added_to_registry"))
}
}

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

return core.Ok(nil)
}

func addToRegistryFile(org, repoName string) core.Result {
registryPath, err := repos.FindRegistry(coreio.Local)
if err != nil {
return cli.Err(i18n.T("cmd.pkg.error.no_repos_yaml"))
return cli.Err(cli.T("cmd.pkg.error.no_repos_yaml"))
}

registry, err := repos.LoadRegistry(coreio.Local, registryPath)
Expand Down
Loading