Skip to content

Commit e054005

Browse files
committed
🔽 Reduced dependencies
1 parent 4623eb6 commit e054005

File tree

28 files changed

+272
-432
lines changed

28 files changed

+272
-432
lines changed

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
> âš¡ CLI companion to charge the **Kloud Workspace** batteries
44
55
[![Stars](https://img.shields.io/github/stars/kloudkit?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2Ij4KPHBhdGggZD0iTTIzNS4yNCw4NC4zOGwtMjguMDYsMjMuNjgsOC41NiwzNS4zOWExMy4zNCwxMy4zNCwwLDAsMS01LjA5LDEzLjkxLDEzLjU0LDEzLjU0LDAsMCwxLTE1LC42OUwxNjQsMTM5bC0zMS42NSwxOS4wNmExMy41MSwxMy41MSwwLDAsMS0xNS0uNjksMTMuMzIsMTMuMzIsMCwwLDEtNS4xLTEzLjkxbDguNTYtMzUuMzlMOTIuNzYsODQuMzhhMTMuMzksMTMuMzksMCwwLDEsNy42Ni0yMy41OGwzNi45NC0yLjkyLDE0LjIxLTMzLjY2YTEzLjUxLDEzLjUxLDAsMCwxLDI0Ljg2LDBsMTQuMjEsMzMuNjYsMzYuOTQsMi45MmExMy4zOSwxMy4zOSwwLDAsMSw3LjY2LDIzLjU4Wk04OC4xMSwxMTEuODlhOCw4LDAsMCwwLTExLjMyLDBMMTguMzQsMTcwLjM0YTgsOCwwLDAsMCwxMS4zMiwxMS4zMmw1OC40NS01OC40NUE4LDgsMCwwLDAsODguMTEsMTExLjg5Wm0tLjUsNjEuMTlMMzQuMzQsMjI2LjM0YTgsOCwwLDAsMCwxMS4zMiwxMS4zMmw1My4yNi01My4yN2E4LDgsMCwwLDAtMTEuMzEtMTEuMzFabTczLTEtNTQuMjksNTQuMjhhOCw4LDAsMCwwLDExLjMyLDExLjMybDU0LjI4LTU0LjI4YTgsOCwwLDAsMC0xMS4zMS0xMS4zMloiIHN0eWxlPSJmaWxsOiAjQ0FEM0Y1OyIvPgo8L3N2Zz4%3D&logoColor=c6d0f5&labelColor=414559&color=yellow)](https://github.com/kloudkit/ws-meta/stargazers)
6-
[![Docker](https://img.shields.io/badge/latest-a?style=for-the-badge&logo=docker&logoColor=c6d0f5&label=docker&labelColor=414559&color=ef9f76)](https://github.com/kloudkit/workspace/pkgs/container/workspace)
6+
[![Docker](https://img.shields.io/badge/latest-a?style=for-the-badge&logo=docker&logoColor=c6d0f5&label=docker&labelColor=414559&color=ef9f76)](https://github.com/orgs/kloudkit/packages/container/package/workspace)
77
[![Documentation](https://img.shields.io/badge/Browse-a?style=for-the-badge&logo=readthedocs&logoColor=c6d0f5&label=Documentation&labelColor=414559&color=85c1dc)](https://ws.kloudkit.com)
88
[![License](https://img.shields.io/github/license/kloudkit/ws-cli?style=for-the-badge&logo=opensourceinitiative&logoColor=c6d0f5&labelColor=414559&color=8caaee)](https://github.com/kloudkit/ws-cli/blob/main/LICENSE)
99

‎cmd/feature/info.go‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package feature
22

33
import (
44
"fmt"
5-
"strings"
65

76
"github.com/kloudkit/ws-cli/internals/features"
87
"github.com/kloudkit/ws-cli/internals/styles"
@@ -25,15 +24,15 @@ var infoCmd = &cobra.Command{
2524
fmt.Fprintf(
2625
cmd.OutOrStdout(),
2726
"\n%s\n %s\n\n",
28-
styles.InfoBadge().Render(strings.ToUpper(feature.Name)),
27+
styles.Title().Render(feature.Name),
2928
feature.Description,
3029
)
3130

3231
if len(feature.Vars) > 0 {
3332
fmt.Fprintf(
3433
cmd.OutOrStdout(),
3534
"%s\n",
36-
styles.Badge().Render("Options"),
35+
styles.Header().Render("Options"),
3736
)
3837

3938
listItems := make([]any, len(feature.Vars))

‎cmd/feature/install.go‎

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package feature
22

33
import (
4-
"context"
54
"fmt"
65
"os"
6+
"os/exec"
77
"path/filepath"
88
"slices"
99
"sort"
10+
"strings"
1011

11-
"github.com/apenella/go-ansible/v2/pkg/execute"
12-
"github.com/apenella/go-ansible/v2/pkg/playbook"
1312
"github.com/kloudkit/ws-cli/internals/features"
1413
"github.com/kloudkit/ws-cli/internals/styles"
1514
"github.com/spf13/cobra"
@@ -42,19 +41,26 @@ var installCmd = &cobra.Command{
4241
}
4342

4443
func runAnsiblePlaybook(featurePath string, vars map[string]any) error {
45-
playbookCmd := &playbook.AnsiblePlaybookCmd{
46-
Playbooks: []string{featurePath},
47-
PlaybookOptions: &playbook.AnsiblePlaybookOptions{
48-
ExtraVars: vars,
49-
},
44+
args := []string{featurePath}
45+
46+
if len(vars) > 0 {
47+
var extraVars []string
48+
for key, value := range vars {
49+
extraVars = append(extraVars, fmt.Sprintf("%s=%v", key, value))
50+
}
51+
args = append(args, "--extra-vars", strings.Join(extraVars, " "))
5052
}
5153

52-
exec := execute.NewDefaultExecute(execute.WithCmd(playbookCmd))
54+
cmd := exec.Command("ansible-playbook", args...)
55+
cmd.Stdout = os.Stdout
56+
cmd.Stderr = os.Stderr
5357

54-
return exec.Execute(context.Background())
58+
return cmd.Run()
5559
}
5660

5761
func installFeatureByName(cmd *cobra.Command, featureName, featuresDir string) error {
62+
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", styles.Title().Render(fmt.Sprintf("Installing %s", featureName)))
63+
5864
rawVars, _ := cmd.Flags().GetStringToString("opt")
5965

6066
vars := make(map[string]any, len(rawVars))

‎cmd/feature/list.go‎

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

33
import (
44
"fmt"
5-
"strings"
65

76
"github.com/kloudkit/ws-cli/internals/features"
87
"github.com/kloudkit/ws-cli/internals/styles"
@@ -26,30 +25,25 @@ var listCmd = &cobra.Command{
2625
return nil
2726
}
2827

29-
fmt.Fprintf(
30-
cmd.OutOrStdout(),
31-
"\n%s\n\n",
32-
styles.InfoBadge().Render(fmt.Sprintf("%d FEATURES AVAILABLE", len(availableFeatures))),
33-
)
34-
35-
featuresTable := styles.Table("NAME", "DESCRIPTION", "OPTIONS")
28+
fmt.Fprintf(cmd.OutOrStdout(), "%s\n", styles.TitleWithCount("Features available", len(availableFeatures)))
3629

30+
maxNameLen := 0
3731
for _, feature := range availableFeatures {
38-
var options string
39-
if len(feature.Vars) > 0 {
40-
var styledVars []string
41-
for _, v := range feature.Vars {
42-
styledVars = append(styledVars, styles.Key().UnsetBold().Render(v))
43-
}
44-
options = strings.Join(styledVars, ", ")
45-
} else {
46-
options = styles.Muted().Render("-")
32+
if len(feature.Name) > maxNameLen {
33+
maxNameLen = len(feature.Name)
4734
}
35+
}
36+
37+
var featureItems []any
38+
for _, feature := range availableFeatures {
39+
item := styles.Key().Width(maxNameLen).Render(feature.Name) +
40+
styles.Muted().Render(" — ") +
41+
styles.Value().Render(feature.Description)
4842

49-
featuresTable.Row(feature.Name, feature.Description, options)
43+
featureItems = append(featureItems, item)
5044
}
5145

52-
fmt.Fprintln(cmd.OutOrStdout(), featuresTable.String())
46+
fmt.Fprintln(cmd.OutOrStdout(), styles.List(featureItems...))
5347

5448
return nil
5549
},

‎cmd/info/env.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func showEnvironment(writer io.Writer) {
2020
}
2121
}
2222

23-
fmt.Fprintf(writer, "\n%s\n\n", styles.InfoBadge().Render(fmt.Sprintf("%d WORKSPACE VARIABLES", len(wsVars))))
23+
fmt.Fprintf(writer, "%s\n", styles.TitleWithCount("Workspace variables", len(wsVars)))
2424

2525
sort.Slice(wsVars, func(i, j int) bool {
2626
return wsVars[i][0] < wsVars[j][0]

‎cmd/info/extensions.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func fetchExtensions() [][]string {
3232
func showExtensions(writer io.Writer) {
3333
extensions := fetchExtensions()
3434

35-
fmt.Fprintf(writer, "\n%s\n\n", styles.InfoBadge().Render(fmt.Sprintf("%d EXTENSIONS", len(extensions))))
35+
fmt.Fprintf(writer, "%s\n", styles.TitleWithCount("Extensions", len(extensions)))
3636

3737
fmt.Fprintln(writer)
3838

‎cmd/info/info.go‎

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ func readJson(content map[string]any, key string) string {
4444
func showVersion(writer io.Writer) {
4545
content := readJsonFile()
4646

47-
fmt.Fprintf(writer, "\n%s\n\n", styles.InfoBadge().Render("VERSIONS"))
48-
49-
fmt.Fprintln(writer)
47+
fmt.Fprintf(writer, "%s\n", styles.Title().Render("Versions"))
5048

5149
t := styles.Table().Rows(
5250
[]string{"workspace", readJson(content, "version")},

‎cmd/info/uptime.go‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,26 @@ func showUptime(writer io.Writer) {
5555
started, running, err := readStartup()
5656

5757
if err != nil {
58-
fmt.Fprintf(writer, "%s\n\n", styles.WarningBadge().Render("WARNING"))
58+
fmt.Fprintf(writer, "%s\n", styles.Title().Render("Warning"))
5959
fmt.Fprintf(writer, "%s\n", styles.Warning().Render("Could not read workspace startup time"))
6060
return
6161
}
6262

63-
var statusBadge string
63+
var statusValue string
6464
if running.Hours() < 1 {
65-
statusBadge = styles.InfoBadge().Render("RECENTLY STARTED")
65+
statusValue = "Recently started"
6666
} else if running.Hours() < 36 {
67-
statusBadge = styles.SuccessBadge().Render("ACTIVE")
67+
statusValue = "Active"
6868
} else {
69-
statusBadge = styles.Highlighted().Render("LONG RUNNING")
69+
statusValue = "Long running"
7070
}
71-
fmt.Fprintf(writer, "\n%s\n\n", statusBadge)
71+
72+
fmt.Fprintf(writer, "%s\n", styles.Title().Render("Uptime"))
7273

7374
t := styles.Table().Rows(
7475
[]string{"Started at", styles.Code().Render(started.Format("2006-01-02 15:04:05 MST"))},
7576
[]string{"Running for", styles.Value().Render(humanizeDuration(running))},
77+
[]string{"Status", styles.Value().Render(statusValue)},
7678
)
7779

7880
fmt.Fprintf(writer, "%s\n\n", t.Render())

‎cmd/info/version.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package info
22

3-
var Version = "0.0.33"
3+
var Version = "0.0.35"

‎cmd/root.go‎

Lines changed: 9 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package cmd
22

33
import (
4-
"fmt"
4+
"context"
55
"os"
66

7+
"github.com/charmbracelet/fang"
78
"github.com/kloudkit/ws-cli/cmd/clip"
89
"github.com/kloudkit/ws-cli/cmd/feature"
910
"github.com/kloudkit/ws-cli/cmd/info"
@@ -24,56 +25,21 @@ var rootCmd = &cobra.Command{
2425
SilenceErrors: true,
2526
}
2627

27-
var noColor bool
28-
29-
var versionCmd = &cobra.Command{
30-
Use: "version",
31-
Short: "Display the installed workspace version",
32-
RunE: func(cmd *cobra.Command, args []string) error {
33-
fmt.Fprintln(cmd.OutOrStdout(), styles.Value().Render(info.Version))
34-
return nil
35-
},
36-
}
37-
3828
func Execute() {
39-
if err := rootCmd.Execute(); err != nil {
40-
41-
fmt.Fprintf(os.Stderr, "%s %s\n",
42-
styles.ErrorBadge().Render("ERROR"),
43-
styles.Error().Render(err.Error()),
44-
)
45-
46-
// Add usage hint for command resolution errors
47-
// if strings.Contains(err.Error(), "unknown command") {
48-
// fmt.Fprintf(os.Stderr, "Run '%s --help' for usage.\n", rootCmd.Use)
49-
// }
29+
ctx := context.Background()
5030

51-
// Print the original error again to maintain the expected behavior
52-
// fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
31+
fangOptions := []fang.Option{
32+
fang.WithColorSchemeFunc(styles.FrappeColorScheme),
33+
fang.WithVersion(info.Version),
34+
fang.WithoutManpage(),
35+
}
5336

37+
if err := fang.Execute(ctx, rootCmd, fangOptions...); err != nil {
5438
os.Exit(1)
5539
}
5640
}
5741

5842
func init() {
59-
rootCmd.PersistentFlags().BoolVar(&noColor, "no-color", false, "Disable color output")
60-
61-
rootCmd.SetHelpTemplate(styles.HelpTemplate())
62-
rootCmd.SetUsageTemplate(styles.UsageTemplate())
63-
rootCmd.SetFlagErrorFunc(func(cmd *cobra.Command, err error) error {
64-
return err
65-
})
66-
67-
cobra.OnInitialize(func() {
68-
if _, exists := os.LookupEnv("WS_LOGGING_NO_COLOR"); exists {
69-
styles.ColorEnabled = false
70-
}
71-
72-
if noColor {
73-
styles.ColorEnabled = false
74-
}
75-
})
76-
7743
rootCmd.AddCommand(
7844
clip.ClipCmd,
7945
feature.FeatureCmd,
@@ -83,6 +49,5 @@ func init() {
8349
info.InfoCmd,
8450
log.LogCmd,
8551
logs.LogsCmd,
86-
versionCmd,
8752
)
8853
}

0 commit comments

Comments
 (0)