Skip to content

[envsec] Add environment flag #1679

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 11, 2023
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
5 changes: 3 additions & 2 deletions internal/boxcli/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,9 @@ func addCmd() *cobra.Command {

func addCmdFunc(cmd *cobra.Command, args []string, flags addCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
10 changes: 6 additions & 4 deletions internal/boxcli/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,9 @@ func runCloudShellCmd(cmd *cobra.Command, flags *cloudShellCmdFlags) error {
}

box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -157,8 +158,9 @@ func runCloudInit(cmd *cobra.Command, flags *cloudShellCmdFlags) error {
}

box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
13 changes: 12 additions & 1 deletion internal/boxcli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,28 @@ import (

// to be composed into xyzCmdFlags structs
type configFlags struct {
path string
path string
environment string
}

func (flags *configFlags) register(cmd *cobra.Command) {
cmd.Flags().StringVarP(
&flags.path, "config", "c", "", "path to directory containing a devbox.json config file",
)
cmd.Flags().StringVar(
&flags.environment, "environment", "dev", "environment to use, when supported (e.g. envsec supports dev, prod, preview.)",
)
}

func (flags *configFlags) registerPersistent(cmd *cobra.Command) {
cmd.PersistentFlags().StringVarP(
&flags.path, "config", "c", "", "path to directory containing a devbox.json config file",
)
cmd.PersistentFlags().StringVar(
&flags.environment, "environment", "dev", "environment to use, when supported (e.g. envsec supports dev, prod, preview.)",
)
}

func (flags *configFlags) Environment() string {
return flags.environment
}
10 changes: 6 additions & 4 deletions internal/boxcli/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,9 @@ func sshConfigCmd() *cobra.Command {
func runGenerateCmd(cmd *cobra.Command, flags *generateCmdFlags) error {
// Check the directory exists.
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -166,8 +167,9 @@ func runGenerateDirenvCmd(cmd *cobra.Command, flags *generateCmdFlags) error {
}

box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,9 @@ func infoCmd() *cobra.Command {

func infoCmdFunc(cmd *cobra.Command, pkg string, flags infoCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ func installCmd() *cobra.Command {
func installCmdFunc(cmd *cobra.Command, flags runCmdFlags) error {
// Check the directory exists.
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ func pullCmd() *cobra.Command {

func pullCmdFunc(cmd *cobra.Command, url string, flags *pullCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/push.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ func pushCmd() *cobra.Command {

func pushCmdFunc(cmd *cobra.Command, url string, flags pushCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/rm.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ func removeCmd() *cobra.Command {

func runRemoveCmd(cmd *cobra.Command, args []string, flags removeCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
10 changes: 6 additions & 4 deletions internal/boxcli/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ func runCmd() *cobra.Command {
func listScripts(cmd *cobra.Command, flags runCmdFlags) []string {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
Pure: flags.pure,
IgnoreWarnings: true,
Expand Down Expand Up @@ -99,10 +100,11 @@ func runScriptCmd(cmd *cobra.Command, args []string, flags runCmdFlags) error {

// Check the directory exists.
box, err := devbox.Open(&devopt.Opts{
Dir: path,
Stderr: cmd.ErrOrStderr(),
Pure: flags.pure,
Env: env,
Dir: path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
Pure: flags.pure,
Env: env,
})
if err != nil {
return redact.Errorf("error reading devbox.json: %w", err)
Expand Down
27 changes: 16 additions & 11 deletions internal/boxcli/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,9 @@ func servicesCmd(persistentPreRunE ...cobraFunc) *cobra.Command {

func listServices(cmd *cobra.Command, flags servicesCmdFlags) error {
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -147,9 +148,10 @@ func startServices(cmd *cobra.Command, services []string, flags servicesCmdFlags
return err
}
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Env: env,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Env: env,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -169,9 +171,10 @@ func stopServices(
return err
}
box, err := devbox.Open(&devopt.Opts{
Dir: servicesFlags.config.path,
Env: env,
Stderr: cmd.ErrOrStderr(),
Dir: servicesFlags.config.path,
Environment: servicesFlags.config.environment,
Env: env,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -193,9 +196,10 @@ func restartServices(
return err
}
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Env: env,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Env: env,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand All @@ -217,6 +221,7 @@ func startProcessManager(
box, err := devbox.Open(&devopt.Opts{
Dir: servicesFlags.config.path,
Env: env,
Environment: servicesFlags.config.environment,
CustomProcessComposeFile: flags.processComposeFile,
Stderr: cmd.ErrOrStderr(),
})
Expand Down
9 changes: 5 additions & 4 deletions internal/boxcli/shell.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,11 @@ func runShellCmd(cmd *cobra.Command, flags shellCmdFlags) error {
}
// Check the directory exists.
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Env: env,
Pure: flags.pure,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Env: env,
Environment: flags.config.environment,
Pure: flags.pure,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
1 change: 1 addition & 0 deletions internal/boxcli/shellenv.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ func shellEnvFunc(
}
box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
PreservePathStack: flags.preservePathStack,
Pure: flags.pure,
Expand Down
5 changes: 3 additions & 2 deletions internal/boxcli/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,9 @@ func updateCmdFunc(cmd *cobra.Command, args []string, flags *updateCmdFlags) err
}

box, err := devbox.Open(&devopt.Opts{
Dir: flags.config.path,
Stderr: cmd.ErrOrStderr(),
Dir: flags.config.path,
Environment: flags.config.environment,
Stderr: cmd.ErrOrStderr(),
})
if err != nil {
return errors.WithStack(err)
Expand Down
4 changes: 2 additions & 2 deletions internal/devconfig/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ import (

func (c *Config) ComputedEnv(
ctx context.Context,
projectDir string,
projectDir, environment string,
) (map[string]string, error) {
env := map[string]string{}
var err error
if c.IsEnvsecEnabled() {
env, err = envsec.Env(ctx, projectDir)
env, err = envsec.Env(ctx, projectDir, environment)
if err != nil {
ux.Fwarning(os.Stderr, "Error reading secrets from envsec: %s\n\n", err)
env = map[string]string{}
Expand Down
19 changes: 18 additions & 1 deletion internal/impl/devbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const (
type Devbox struct {
cfg *devconfig.Config
env map[string]string
environment string
lockfile *lock.File
nix nix.Nixer
projectDir string
Expand All @@ -84,9 +85,15 @@ func Open(opts *devopt.Opts) (*Devbox, error) {
return nil, errors.WithStack(err)
}

environment, err := validateEnvironment(opts.Environment)
if err != nil {
return nil, err
}

box := &Devbox{
cfg: cfg,
env: opts.Env,
environment: environment,
nix: &nix.Nix{},
projectDir: projectDir,
pluginManager: plugin.NewManager(),
Expand Down Expand Up @@ -1089,7 +1096,7 @@ func (d *Devbox) configEnvs(
ctx context.Context,
existingEnv map[string]string,
) (map[string]string, error) {
env, err := d.cfg.ComputedEnv(ctx, d.ProjectDir())
env, err := d.cfg.ComputedEnv(ctx, d.ProjectDir(), d.environment)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1245,3 +1252,13 @@ func (d *Devbox) RunXPaths(ctx context.Context) (string, error) {
}
return runxBinPath, nil
}

func validateEnvironment(environment string) (string, error) {
if environment == "" {
return "dev", nil
}
if environment == "dev" || environment == "prod" || environment == "preview" {
return environment, nil
}
return "", usererr.New("invalid environment %q", environment)
}
1 change: 1 addition & 0 deletions internal/impl/devopt/devboxopts.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
type Opts struct {
Dir string
Env map[string]string
Environment string
PreservePathStack bool
Pure bool
IgnoreWarnings bool
Expand Down
9 changes: 4 additions & 5 deletions internal/integrations/envsec/envsec.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ var (
binPathCache string
)

func Env(ctx context.Context, projectDir string) (map[string]string, error) {
func Env(ctx context.Context, projectDir, environment string) (map[string]string, error) {
defer debug.FunctionTimer().End()

if envCache != nil {
Expand All @@ -29,8 +29,7 @@ func Env(ctx context.Context, projectDir string) (map[string]string, error) {
return nil, err
}

var err error
envCache, err = envsecList(ctx, projectDir)
envCache, err := envsecList(ctx, projectDir, environment)

return envCache, err
}
Expand Down Expand Up @@ -76,7 +75,7 @@ func EnsureInitialized(ctx context.Context, projectDir string) error {

func envsecList(
ctx context.Context,
projectDir string,
projectDir, environment string,
) (map[string]string, error) {
binPath, err := EnsureInstalled(ctx)
if err != nil {
Expand All @@ -85,7 +84,7 @@ func envsecList(
cmd := exec.Command(
binPath, "ls", "--show",
"--format", "json",
"--environment", "dev",
"--environment", environment,
"--json-errors")
cmd.Dir = projectDir
var bufErr bytes.Buffer
Expand Down