diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index b68f5f2..d3228ef 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -49,6 +49,13 @@ jobs: layerform config set-context test-cloud -t cloud --url https://demo.layerform.dev --email foo@bar.com --password strongpass layerform config set-context test-local -t local --dir test + - name: layerform config set-context + run: | + # fails if command succeeds + ! layerform config select-context test-does-not-exist # context does not exist + + layerform config set-context test-local -t local --dir test && layerform config select-context test-local + - name: Configure run: | layerform configure --file examples/local/layerform.json diff --git a/cmd/cli/select_context.go b/cmd/cli/select_context.go new file mode 100644 index 0000000..af2fbd6 --- /dev/null +++ b/cmd/cli/select_context.go @@ -0,0 +1,55 @@ +package cli + +import ( + "fmt" + "os" + + "github.com/ergomake/layerform/internal/lfconfig" + "github.com/pkg/errors" + "github.com/spf13/cobra" +) + +func init() { + configCmd.AddCommand(configSelectContextCmd) +} + +var configSelectContextCmd = &cobra.Command{ + Use: "select-context ", + Short: "Select a context entry from layerform config file", + Long: `Select a context entry from layerform config file. + + Selecting a name that does not exist will return error.`, + Example: `# Select a context +layerform config select-context local-example`, + Args: cobra.ExactArgs(1), + Run: func(cmd *cobra.Command, args []string) { + name := args[0] + + cfg, err := lfconfig.Load("") + if err != nil && !errors.Is(err, os.ErrNotExist) { + fmt.Fprintf(os.Stderr, "%s\n", errors.Wrap(err, "fail to open config file")) + os.Exit(1) + } + + _, ok := cfg.Contexts[name] + if !ok { + fmt.Fprintf( + os.Stderr, + "context %s does not exist\n", + name, + ) + os.Exit(1) + } + + cfg.CurrentContext = name + + err = cfg.Save() + if err != nil { + fmt.Fprintf(os.Stderr, "%s\n", errors.Wrap(err, "fail to save config file")) + os.Exit(1) + } + + fmt.Fprintf(os.Stdout, "Context \"%s\" selected.\n", name) + }, + SilenceErrors: true, +}