Skip to content

Commit 2e60598

Browse files
committed
Initial vscode UI commit
1 parent c0331c7 commit 2e60598

File tree

9 files changed

+3330
-1689
lines changed

9 files changed

+3330
-1689
lines changed

internal/boxcli/services.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ type serviceStopFlags struct {
2727
allProjects bool
2828
}
2929

30+
type serviceListFlags struct {
31+
json bool
32+
}
33+
3034
func (flags *serviceUpFlags) register(cmd *cobra.Command) {
3135
cmd.Flags().StringVar(
3236
&flags.processComposeFile,
@@ -48,10 +52,15 @@ func (flags *serviceStopFlags) register(cmd *cobra.Command) {
4852
&flags.allProjects, "all-projects", false, "stop all running services across all your projects.\nThis flag cannot be used simultaneously with the [services] argument")
4953
}
5054

55+
func (flags *serviceListFlags) register(cmd *cobra.Command) {
56+
cmd.Flags().BoolVar(&flags.json, "json", false, "Outputs the list of services as json")
57+
}
58+
5159
func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command {
5260
flags := servicesCmdFlags{}
5361
serviceUpFlags := serviceUpFlags{}
5462
serviceStopFlags := serviceStopFlags{}
63+
serviceListFlags := serviceListFlags{}
5564
servicesCommand := &cobra.Command{
5665
Use: "services",
5766
Short: "Interact with devbox services.",
@@ -86,7 +95,7 @@ func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command {
8695
Short: "List available services",
8796
Args: cobra.ExactArgs(0),
8897
RunE: func(cmd *cobra.Command, args []string) error {
89-
return listServices(cmd, flags)
98+
return listServices(cmd, flags, serviceListFlags)
9099
},
91100
}
92101

@@ -135,6 +144,7 @@ func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command {
135144
servicesCommand.Flag("run-in-current-shell").Hidden = true
136145
serviceUpFlags.register(upCommand)
137146
serviceStopFlags.register(stopCommand)
147+
serviceListFlags.register(lsCommand)
138148
servicesCommand.AddCommand(attachCommand)
139149
servicesCommand.AddCommand(lsCommand)
140150
servicesCommand.AddCommand(upCommand)
@@ -157,7 +167,7 @@ func attachServices(cmd *cobra.Command, flags servicesCmdFlags) error {
157167
return box.AttachToProcessManager(cmd.Context())
158168
}
159169

160-
func listServices(cmd *cobra.Command, flags servicesCmdFlags) error {
170+
func listServices(cmd *cobra.Command, flags servicesCmdFlags, serviceListFlags serviceListFlags) error {
161171
box, err := devbox.Open(&devopt.Opts{
162172
Dir: flags.config.path,
163173
Environment: flags.config.environment,
@@ -166,8 +176,8 @@ func listServices(cmd *cobra.Command, flags servicesCmdFlags) error {
166176
if err != nil {
167177
return errors.WithStack(err)
168178
}
169-
170-
return box.ListServices(cmd.Context(), flags.runInCurrentShell)
179+
println(serviceListFlags.json)
180+
return box.ListServices(cmd.Context(), flags.runInCurrentShell, serviceListFlags.json)
171181
}
172182

173183
func startServices(cmd *cobra.Command, services []string, flags servicesCmdFlags) error {

internal/devbox/services.go

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,23 @@ import (
77
"text/tabwriter"
88

99
"go.jetpack.io/devbox/internal/boxcli/usererr"
10+
"go.jetpack.io/devbox/internal/cuecfg"
1011
"go.jetpack.io/devbox/internal/devbox/devopt"
1112
"go.jetpack.io/devbox/internal/services"
1213
)
1314

15+
type ServicesList struct {
16+
ProcessComposeRunnning bool `json:"status"`
17+
ProcessComposePort int `json:"port,omitempty"`
18+
Services []Service `json:"processes"`
19+
}
20+
21+
type Service struct {
22+
Name string `json:"name"`
23+
Status string `json:"status"`
24+
ExitCode int `json:"exitCode"`
25+
}
26+
1427
func (d *Devbox) StartServices(
1528
ctx context.Context, runInCurrentShell bool, serviceNames ...string,
1629
) error {
@@ -94,9 +107,14 @@ func (d *Devbox) StopServices(ctx context.Context, runInCurrentShell, allProject
94107
return nil
95108
}
96109

97-
func (d *Devbox) ListServices(ctx context.Context, runInCurrentShell bool) error {
110+
func (d *Devbox) ListServices(ctx context.Context, runInCurrentShell bool, printJSON bool) error {
98111
if !runInCurrentShell {
99-
return d.runDevboxServicesScript(ctx, []string{"ls", "--run-in-current-shell"})
112+
args := []string{"ls", "--run-in-current-shell"}
113+
if printJSON {
114+
args = append(args, "--json")
115+
}
116+
117+
return d.runDevboxServicesScript(ctx, args)
100118
}
101119

102120
svcSet, err := d.Services()
@@ -110,13 +128,55 @@ func (d *Devbox) ListServices(ctx context.Context, runInCurrentShell bool) error
110128
}
111129

112130
if !services.ProcessManagerIsRunning(d.projectDir) {
113-
fmt.Fprintln(d.stderr, "No services currently running. Run `devbox services up` to start them:")
114-
fmt.Fprintln(d.stderr, "")
115-
for _, s := range svcSet {
116-
fmt.Fprintf(d.stderr, " %s\n", s.Name)
131+
if printJSON {
132+
serviceList := ServicesList{
133+
ProcessComposeRunnning: false,
134+
}
135+
for _, s := range svcSet {
136+
serviceList.Services = append(serviceList.Services, Service{
137+
Name: s.Name,
138+
Status: "Stopped",
139+
})
140+
}
141+
json, err := cuecfg.MarshalJSON(serviceList)
142+
if err != nil {
143+
return err
144+
}
145+
fmt.Print(string(json))
146+
} else {
147+
fmt.Fprintln(d.stderr, "No services currently running. Run `devbox services up` to start them:")
148+
for _, s := range svcSet {
149+
fmt.Fprintf(d.stderr, " %s\n", s.Name)
150+
}
117151
}
118152
return nil
119153
}
154+
155+
if printJSON {
156+
processComposePort, err := services.GetProcessManagerPort(d.projectDir)
157+
if err != nil {
158+
return err
159+
}
160+
serviceList := ServicesList{
161+
ProcessComposeRunnning: true,
162+
ProcessComposePort: processComposePort,
163+
}
164+
pcSvcs, err := services.ListServices(ctx, d.projectDir, d.stderr)
165+
if err != nil {
166+
return err
167+
}
168+
for _, s := range pcSvcs {
169+
serviceList.Services = append(serviceList.Services, Service{
170+
Name: s.Name,
171+
Status: s.Status,
172+
})
173+
}
174+
json, err := cuecfg.MarshalJSON(serviceList)
175+
if err != nil {
176+
return err
177+
}
178+
fmt.Print(string(json))
179+
}
120180
tw := tabwriter.NewWriter(d.stderr, 3, 2, 8, ' ', tabwriter.TabIndent)
121181
pcSvcs, err := services.ListServices(ctx, d.projectDir, d.stderr)
122182
if err != nil {

vscode-extension/.yarnrc.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nodeLinker: node-modules

vscode-extension/assets/icon.svg

Lines changed: 6 additions & 0 deletions
Loading

vscode-extension/devbox.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.13.6/.schema/devbox.schema.json",
3+
"packages": ["nodejs@18"],
4+
"env": {
5+
"DEVBOX_COREPACK_ENABLED": "true"
6+
},
7+
"shell": {
8+
"init_hook": [
9+
"echo 'Welcome to devbox!' > /dev/null"
10+
],
11+
"scripts": {
12+
"test": [
13+
"echo \"Error: no test specified\" && exit 1"
14+
]
15+
}
16+
}
17+
}

vscode-extension/devbox.lock

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"lockfile_version": "1",
3+
"packages": {
4+
"nodejs@18": {
5+
"last_modified": "2024-11-03T14:18:04Z",
6+
"plugin_version": "0.0.2",
7+
"resolved": "github:NixOS/nixpkgs/4ae2e647537bcdbb82265469442713d066675275#nodejs_18",
8+
"source": "devbox-search",
9+
"version": "18.20.4",
10+
"systems": {
11+
"aarch64-darwin": {
12+
"outputs": [
13+
{
14+
"name": "out",
15+
"path": "/nix/store/ff45m4hpbl8i2bayxdhbcjkwjicbb2dl-nodejs-18.20.4",
16+
"default": true
17+
},
18+
{
19+
"name": "libv8",
20+
"path": "/nix/store/n7c7pk11g9bzn9j6why7kj04kk2yrwj5-nodejs-18.20.4-libv8"
21+
}
22+
],
23+
"store_path": "/nix/store/ff45m4hpbl8i2bayxdhbcjkwjicbb2dl-nodejs-18.20.4"
24+
},
25+
"aarch64-linux": {
26+
"outputs": [
27+
{
28+
"name": "out",
29+
"path": "/nix/store/1xqxhg5b1i6i86hlb7904g9zb8vi9hq2-nodejs-18.20.4",
30+
"default": true
31+
},
32+
{
33+
"name": "libv8",
34+
"path": "/nix/store/b8cwjhvvdik7hmjd3g8c7kk0rlqfcx9x-nodejs-18.20.4-libv8"
35+
}
36+
],
37+
"store_path": "/nix/store/1xqxhg5b1i6i86hlb7904g9zb8vi9hq2-nodejs-18.20.4"
38+
},
39+
"x86_64-darwin": {
40+
"outputs": [
41+
{
42+
"name": "out",
43+
"path": "/nix/store/xb02svcck3mkxz780p8n9f7qhwjvf6qa-nodejs-18.20.4",
44+
"default": true
45+
},
46+
{
47+
"name": "libv8",
48+
"path": "/nix/store/yrr7dkr23ndzjgs7q7fvq8jn02bl90vx-nodejs-18.20.4-libv8"
49+
}
50+
],
51+
"store_path": "/nix/store/xb02svcck3mkxz780p8n9f7qhwjvf6qa-nodejs-18.20.4"
52+
},
53+
"x86_64-linux": {
54+
"outputs": [
55+
{
56+
"name": "out",
57+
"path": "/nix/store/i1a80zpva0bhmiam0qqrg6p6jawnxzk8-nodejs-18.20.4",
58+
"default": true
59+
},
60+
{
61+
"name": "libv8",
62+
"path": "/nix/store/cvl1nl18i145xn51g02cp24axyzjmrlh-nodejs-18.20.4-libv8"
63+
}
64+
],
65+
"store_path": "/nix/store/i1a80zpva0bhmiam0qqrg6p6jawnxzk8-nodejs-18.20.4"
66+
}
67+
}
68+
}
69+
}
70+
}

vscode-extension/package.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,33 @@
2121
"onStartupFinished"
2222
],
2323
"main": "./out/extension.js",
24+
"packageManager": "yarn@4.5.1+sha512.341db9396b6e289fecc30cd7ab3af65060e05ebff4b3b47547b278b9e67b08f485ecd8c79006b405446262142c7a38154445ef7f17c1d5d1de7d90bf9ce7054d",
2425
"contributes": {
26+
"viewsContainers": {
27+
"activitybar": [
28+
{
29+
"id": "devbox",
30+
"title": "Devbox",
31+
"icon": "assets/icon.svg"
32+
}
33+
]
34+
},
35+
"views": {
36+
"devbox": [
37+
{
38+
"id": "devboxPackages",
39+
"name": "Packages"
40+
},
41+
{
42+
"id": "devboxScripts",
43+
"name": "Scripts"
44+
},
45+
{
46+
"id": "devboxServices",
47+
"name": "Services"
48+
}
49+
]
50+
},
2551
"commands": [
2652
{
2753
"command": "devbox.setupDevContainer",
@@ -160,6 +186,7 @@
160186
"dependencies": {
161187
"@types/node": "16.x",
162188
"form-data": "^4.0.0",
189+
"json5": "^2.2.3",
163190
"node-fetch": "^2",
164191
"which": "^3.0.0"
165192
}

0 commit comments

Comments
 (0)