Skip to content

Commit 3764425

Browse files
authored
[CLI] devbox shell --pure (#1084)
## Summary I added a `--pure` flag for `devbox shell` to create an isolated env without variables leaking from the parent shell. Q: Should I add a --pure flag for `devbox run` and `devbox shellenv`? A: Yes Q2: Because the created shell is "pure" the devbox command is also not available inside the pure shell. Should that be an exception? A: Yes Note: in pure mode, the `$HOME` env variable has to leak in because the devbox binary relies on it. ## How was it tested? - compile - `export FOO=bar` - `./devbox shell --pure` - `echo $FOO` should show no value - Also `./devbox run --pure -- echo $FOO` should show no value
1 parent 194a32d commit 3764425

File tree

22 files changed

+230
-57
lines changed

22 files changed

+230
-57
lines changed

devbox.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"go.jetpack.io/devbox/internal/devconfig"
1212
"go.jetpack.io/devbox/internal/impl"
13+
"go.jetpack.io/devbox/internal/impl/devopt"
1314
"go.jetpack.io/devbox/internal/planner/plansdk"
1415
"go.jetpack.io/devbox/internal/services"
1516
)
@@ -56,12 +57,13 @@ type Devbox interface {
5657
}
5758

5859
// Open opens a devbox by reading the config file in dir.
59-
func Open(dir string, writer io.Writer) (Devbox, error) {
60-
return impl.Open(dir, writer, true)
61-
}
62-
63-
func OpenWithoutWarnings(dir string, writer io.Writer) (Devbox, error) {
64-
return impl.Open(dir, writer, false)
60+
func Open(opts *devopt.Opts) (Devbox, error) {
61+
return impl.Open(&devopt.Opts{
62+
Dir: opts.Dir,
63+
Pure: opts.Pure,
64+
ShowWarnings: opts.ShowWarnings,
65+
Writer: opts.Writer,
66+
})
6567
}
6668

6769
// InitConfig creates a default devbox config file if one doesn't already exist.

internal/boxcli/add.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/spf13/cobra"
1111
"go.jetpack.io/devbox"
1212
"go.jetpack.io/devbox/internal/boxcli/usererr"
13+
"go.jetpack.io/devbox/internal/impl/devopt"
1314
"go.jetpack.io/devbox/internal/nix"
1415
)
1516

@@ -49,7 +50,10 @@ func addCmd() *cobra.Command {
4950
}
5051

5152
func addCmdFunc(cmd *cobra.Command, args []string, flags addCmdFlags) error {
52-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
53+
box, err := devbox.Open(&devopt.Opts{
54+
Dir: flags.config.path,
55+
Writer: cmd.ErrOrStderr(),
56+
})
5357
if err != nil {
5458
return errors.WithStack(err)
5559
}

internal/boxcli/cloud.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"go.jetpack.io/devbox/internal/boxcli/usererr"
1515
"go.jetpack.io/devbox/internal/cloud"
1616
"go.jetpack.io/devbox/internal/envir"
17+
"go.jetpack.io/devbox/internal/impl/devopt"
1718
)
1819

1920
type cloudShellCmdFlags struct {
@@ -139,7 +140,10 @@ func runCloudShellCmd(cmd *cobra.Command, flags *cloudShellCmdFlags) error {
139140
return shellInceptionErrorMsg("devbox cloud shell")
140141
}
141142

142-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
143+
box, err := devbox.Open(&devopt.Opts{
144+
Dir: flags.config.path,
145+
Writer: cmd.ErrOrStderr(),
146+
})
143147
if err != nil {
144148
return errors.WithStack(err)
145149
}
@@ -152,7 +156,10 @@ func runCloudInit(cmd *cobra.Command, flags *cloudShellCmdFlags) error {
152156
return shellInceptionErrorMsg("devbox cloud init")
153157
}
154158

155-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
159+
box, err := devbox.Open(&devopt.Opts{
160+
Dir: flags.config.path,
161+
Writer: cmd.ErrOrStderr(),
162+
})
156163
if err != nil {
157164
return errors.WithStack(err)
158165
}

internal/boxcli/generate.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"go.jetpack.io/devbox"
1111
"go.jetpack.io/devbox/internal/cloud"
12+
"go.jetpack.io/devbox/internal/impl/devopt"
1213
)
1314

1415
type generateCmdFlags struct {
@@ -129,7 +130,10 @@ func sshConfigCmd() *cobra.Command {
129130

130131
func runGenerateCmd(cmd *cobra.Command, flags *generateCmdFlags) error {
131132
// Check the directory exists.
132-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
133+
box, err := devbox.Open(&devopt.Opts{
134+
Dir: flags.config.path,
135+
Writer: cmd.ErrOrStderr(),
136+
})
133137
if err != nil {
134138
return errors.WithStack(err)
135139
}
@@ -149,7 +153,10 @@ func runGenerateDirenvCmd(cmd *cobra.Command, flags *generateCmdFlags) error {
149153
return devbox.PrintEnvrcContent(cmd.OutOrStdout())
150154
}
151155

152-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
156+
box, err := devbox.Open(&devopt.Opts{
157+
Dir: flags.config.path,
158+
Writer: cmd.ErrOrStderr(),
159+
})
153160
if err != nil {
154161
return errors.WithStack(err)
155162
}

internal/boxcli/global.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/pkg/errors"
1010
"github.com/spf13/cobra"
1111
"go.jetpack.io/devbox"
12+
"go.jetpack.io/devbox/internal/impl/devopt"
1213
"go.jetpack.io/devbox/internal/ux"
1314
)
1415

@@ -61,7 +62,10 @@ func listGlobalCmdFunc(cmd *cobra.Command, args []string) error {
6162
return errors.WithStack(err)
6263
}
6364

64-
box, err := devbox.Open(path, cmd.OutOrStdout())
65+
box, err := devbox.Open(&devopt.Opts{
66+
Dir: path,
67+
Writer: cmd.OutOrStdout(),
68+
})
6569
if err != nil {
6670
return errors.WithStack(err)
6771
}
@@ -115,7 +119,10 @@ func ensureGlobalEnvEnabled(cmd *cobra.Command, args []string) error {
115119
return errors.WithStack(err)
116120
}
117121

118-
box, err := devbox.Open(path, cmd.ErrOrStderr())
122+
box, err := devbox.Open(&devopt.Opts{
123+
Dir: path,
124+
Writer: cmd.ErrOrStderr(),
125+
})
119126
if err != nil {
120127
return err
121128
}

internal/boxcli/info.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/pkg/errors"
88
"github.com/spf13/cobra"
99
"go.jetpack.io/devbox"
10+
"go.jetpack.io/devbox/internal/impl/devopt"
1011
)
1112

1213
type infoCmdFlags struct {
@@ -32,7 +33,10 @@ func infoCmd() *cobra.Command {
3233
}
3334

3435
func infoCmdFunc(cmd *cobra.Command, pkg string, flags infoCmdFlags) error {
35-
box, err := devbox.Open(flags.config.path, cmd.OutOrStdout())
36+
box, err := devbox.Open(&devopt.Opts{
37+
Dir: flags.config.path,
38+
Writer: cmd.OutOrStdout(),
39+
})
3640
if err != nil {
3741
return errors.WithStack(err)
3842
}

internal/boxcli/install.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/pkg/errors"
1010
"github.com/spf13/cobra"
1111
"go.jetpack.io/devbox"
12+
"go.jetpack.io/devbox/internal/impl/devopt"
1213
)
1314

1415
func installCmd() *cobra.Command {
@@ -30,7 +31,10 @@ func installCmd() *cobra.Command {
3031

3132
func installCmdFunc(cmd *cobra.Command, flags runCmdFlags) error {
3233
// Check the directory exists.
33-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
34+
box, err := devbox.Open(&devopt.Opts{
35+
Dir: flags.config.path,
36+
Writer: cmd.ErrOrStderr(),
37+
})
3438
if err != nil {
3539
return errors.WithStack(err)
3640
}

internal/boxcli/midcobra/telemetry.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"go.jetpack.io/devbox/internal/boxcli/featureflag"
2020
"go.jetpack.io/devbox/internal/build"
2121
"go.jetpack.io/devbox/internal/envir"
22+
"go.jetpack.io/devbox/internal/impl/devopt"
2223
"go.jetpack.io/devbox/internal/telemetry"
2324
)
2425

@@ -222,7 +223,11 @@ func getPackagesAndCommitHash(c *cobra.Command) ([]string, string) {
222223
path = configFlag.Value.String()
223224
}
224225

225-
box, err := devbox.OpenWithoutWarnings(path, os.Stdout)
226+
box, err := devbox.Open(&devopt.Opts{
227+
Dir: path,
228+
Writer: os.Stdout,
229+
ShowWarnings: false,
230+
})
226231
if err != nil {
227232
return []string{}, ""
228233
}

internal/boxcli/plan.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/spf13/cobra"
1111

1212
"go.jetpack.io/devbox"
13+
"go.jetpack.io/devbox/internal/impl/devopt"
1314
)
1415

1516
type planCmdFlags struct {
@@ -35,7 +36,10 @@ func planCmd() *cobra.Command {
3536

3637
func runPlanCmd(cmd *cobra.Command, flags planCmdFlags) error {
3738
// Check the directory exists.
38-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
39+
box, err := devbox.Open(&devopt.Opts{
40+
Dir: flags.config.path,
41+
Writer: cmd.ErrOrStderr(),
42+
})
3943
if err != nil {
4044
return errors.WithStack(err)
4145
}

internal/boxcli/pull.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/pkg/errors"
1313
"github.com/spf13/cobra"
1414
"go.jetpack.io/devbox"
15+
"go.jetpack.io/devbox/internal/impl/devopt"
1516
)
1617

1718
type pullCmdFlags struct {
@@ -47,7 +48,10 @@ func pullCmdFunc(
4748
url string,
4849
flags *pullCmdFlags,
4950
) error {
50-
box, err := devbox.Open(flags.config.path, cmd.ErrOrStderr())
51+
box, err := devbox.Open(&devopt.Opts{
52+
Dir: flags.config.path,
53+
Writer: cmd.ErrOrStderr(),
54+
})
5155
if err != nil {
5256
return errors.WithStack(err)
5357
}

0 commit comments

Comments
 (0)