From 3ebb3f785a4793998498571385cdcc5789eb2369 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:04:08 -0500 Subject: [PATCH 1/8] refactor(cli)!: rename 'provider configure' to 'provider init' --- cmd/provider/{configure.go => init.go} | 28 +++++++++---------- .../{configure_test.go => init_test.go} | 8 +++--- cmd/provider/provider.go | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) rename cmd/provider/{configure.go => init.go} (75%) rename cmd/provider/{configure_test.go => init_test.go} (83%) diff --git a/cmd/provider/configure.go b/cmd/provider/init.go similarity index 75% rename from cmd/provider/configure.go rename to cmd/provider/init.go index ccc8fc311..aa06d339d 100644 --- a/cmd/provider/configure.go +++ b/cmd/provider/init.go @@ -8,8 +8,8 @@ import ( "github.com/spf13/cobra" ) -// ConfigureCmd holds flags for the `provider configure` subcommand. -type ConfigureCmd struct { +// InitCmd holds flags for the `provider init` subcommand. +type InitCmd struct { *flags.GlobalFlags Reconfigure bool SingleMachine bool @@ -17,12 +17,12 @@ type ConfigureCmd struct { SkipInit bool } -// NewConfigureCmd creates the cobra command for `provider configure`. -func NewConfigureCmd(f *flags.GlobalFlags) *cobra.Command { - cmd := &ConfigureCmd{GlobalFlags: f} - configureCmd := &cobra.Command{ - Use: "configure [name]", - Short: "Re-run init and option resolution for an existing provider", +// NewInitCmd creates the cobra command for `provider init`. +func NewInitCmd(f *flags.GlobalFlags) *cobra.Command { + cmd := &InitCmd{GlobalFlags: f} + initCmd := &cobra.Command{ + Use: "init [name]", + Short: "Run or re-run init and option resolution for an existing provider", Args: cobra.MaximumNArgs(1), RunE: func(cobraCmd *cobra.Command, args []string) error { devsyConfig, err := config.LoadConfig(cmd.Context, cmd.Provider) @@ -63,14 +63,14 @@ func NewConfigureCmd(f *flags.GlobalFlags) *cobra.Command { ) }, } - configureCmd.Flags(). + initCmd.Flags(). BoolVar(&cmd.Reconfigure, "reconfigure", false, "Force re-resolution of all options") - configureCmd.Flags(). + initCmd.Flags(). BoolVar(&cmd.SingleMachine, "single-machine", false, "Use a single machine for all workspaces") - configureCmd.Flags(). + initCmd.Flags(). StringArrayVarP(&cmd.Options, "option", "o", []string{}, "Provider option in the form KEY=VALUE") - configureCmd.Flags(). + initCmd.Flags(). BoolVar(&cmd.SkipInit, "skip-init", false, "Skip provider init (testing only)") - _ = configureCmd.Flags().MarkHidden("skip-init") - return configureCmd + _ = initCmd.Flags().MarkHidden("skip-init") + return initCmd } diff --git a/cmd/provider/configure_test.go b/cmd/provider/init_test.go similarity index 83% rename from cmd/provider/configure_test.go rename to cmd/provider/init_test.go index b21c1f845..3e6a35ac3 100644 --- a/cmd/provider/configure_test.go +++ b/cmd/provider/init_test.go @@ -6,10 +6,10 @@ import ( "github.com/devsy-org/devsy/cmd/flags" ) -func TestNewConfigureCmd(t *testing.T) { - cmd := NewConfigureCmd(&flags.GlobalFlags{}) - if cmd.Use != "configure [name]" { - t.Errorf("Use: got %q want %q", cmd.Use, "configure [name]") +func TestNewInitCmd(t *testing.T) { + cmd := NewInitCmd(&flags.GlobalFlags{}) + if cmd.Use != "init [name]" { + t.Errorf("Use: got %q want %q", cmd.Use, "init [name]") } if cmd.Short == "" { t.Error("Short must be set") diff --git a/cmd/provider/provider.go b/cmd/provider/provider.go index 0fec418d5..6ec4a0445 100644 --- a/cmd/provider/provider.go +++ b/cmd/provider/provider.go @@ -13,9 +13,9 @@ func NewProviderCmd(flags *flags.GlobalFlags) *cobra.Command { } providerCmd.AddCommand(NewAddCmd(flags)) - providerCmd.AddCommand(NewConfigureCmd(flags)) providerCmd.AddCommand(NewDeleteCmd(flags)) providerCmd.AddCommand(NewGetCmd(flags)) + providerCmd.AddCommand(NewInitCmd(flags)) providerCmd.AddCommand(NewListCmd(flags)) providerCmd.AddCommand(NewRenameCmd(flags)) providerCmd.AddCommand(NewSetCmd(flags)) From db27f5b4b0294434b4d54735ab6677e852aab8cc Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:08:55 -0500 Subject: [PATCH 2/8] refactor(cli)!: rename 'provider update' to 'provider set-source' --- cmd/provider/add.go | 3 +- cmd/provider/provider.go | 2 +- cmd/provider/set_source.go | 105 ++++++++++++++++ .../{update_test.go => set_source_test.go} | 4 +- cmd/provider/update.go | 113 ------------------ 5 files changed, 109 insertions(+), 118 deletions(-) create mode 100644 cmd/provider/set_source.go rename cmd/provider/{update_test.go => set_source_test.go} (62%) delete mode 100644 cmd/provider/update.go diff --git a/cmd/provider/add.go b/cmd/provider/add.go index 754e35292..a74c74748 100644 --- a/cmd/provider/add.go +++ b/cmd/provider/add.go @@ -146,8 +146,7 @@ func (cmd *AddCmd) Run(ctx context.Context, devsyConfig *config.Config, args []s return writeDefaultProvider(cmd.Context, providerConfig.Name) } - log.Infof("To configure the provider, run the following command:") - log.Infof("devsy provider configure %s", providerConfig.Name) + log.Infof("To initialize the provider, run: devsy provider init %s", providerConfig.Name) return nil } diff --git a/cmd/provider/provider.go b/cmd/provider/provider.go index 6ec4a0445..0dfda7145 100644 --- a/cmd/provider/provider.go +++ b/cmd/provider/provider.go @@ -19,7 +19,7 @@ func NewProviderCmd(flags *flags.GlobalFlags) *cobra.Command { providerCmd.AddCommand(NewListCmd(flags)) providerCmd.AddCommand(NewRenameCmd(flags)) providerCmd.AddCommand(NewSetCmd(flags)) - providerCmd.AddCommand(NewUpdateCmd(flags)) + providerCmd.AddCommand(NewSetSourceCmd(flags)) providerCmd.AddCommand(NewUseCmd(flags)) providerCmd.AddCommand(NewVersionsCmd(flags)) return providerCmd diff --git a/cmd/provider/set_source.go b/cmd/provider/set_source.go new file mode 100644 index 000000000..fc9cfd9fb --- /dev/null +++ b/cmd/provider/set_source.go @@ -0,0 +1,105 @@ +package provider + +import ( + "context" + "fmt" + + "github.com/devsy-org/devsy/cmd/flags" + "github.com/devsy-org/devsy/pkg/config" + "github.com/devsy-org/devsy/pkg/log" + "github.com/devsy-org/devsy/pkg/workspace" + "github.com/spf13/cobra" +) + +// SetSourceCmd holds the cmd flags. +type SetSourceCmd struct { + *flags.GlobalFlags + + Use bool + Version string + Options []string +} + +// NewSetSourceCmd creates a new command. +func NewSetSourceCmd(flags *flags.GlobalFlags) *cobra.Command { + cmd := &SetSourceCmd{ + GlobalFlags: flags, + } + setSourceCmd := &cobra.Command{ + Use: "set-source [name] [name, GitHub link, URL or path]", + Short: "Set or change a provider's source (replaces the registered name, repo, URL, or path)", + RunE: func(cobraCmd *cobra.Command, args []string) error { + ctx := cobraCmd.Context() + devsyConfig, err := config.LoadConfig(cmd.Context, cmd.Provider) + if err != nil { + return err + } + + return cmd.Run(ctx, devsyConfig, args) + }, + } + + setSourceCmd.Flags(). + BoolVar(&cmd.Use, "use", true, "If enabled will automatically activate the provider") + setSourceCmd.Flags(). + StringVar(&cmd.Version, "version", "", "Pin the provider to a specific version tag") + setSourceCmd.Flags(). + StringArrayVarP(&cmd.Options, "option", "o", []string{}, "Provider option in the form KEY=VALUE") + return setSourceCmd +} + +func (cmd *SetSourceCmd) Run(ctx context.Context, devsyConfig *config.Config, args []string) error { + if cmd.Version != "" { + return cmd.runPinVersion(devsyConfig, args) + } + + if len(args) != 1 && len(args) != 2 { + return fmt.Errorf("specify either a local file, URL or Git repository. " + + "E.g. devsy provider set-source my-provider " + config.ProviderPrefix + "gcloud") + } + + providerSource := "" + if len(args) == 2 { + providerSource = args[1] + } + + providerConfig, err := workspace.UpdateProvider(devsyConfig, args[0], providerSource) + if err != nil { + return err + } + + log.Infof("updated provider: providerName=%s", providerConfig.Name) + if !cmd.Use { + log.Infof("To initialize the provider, run: devsy provider init %s", providerConfig.Name) + return nil + } + + if err := ConfigureProvider(ctx, ProviderOptionsConfig{ + Provider: providerConfig, + Context: devsyConfig.DefaultContext, + UserOptions: cmd.Options, + }); err != nil { + log.Errorf( + "Error initializing provider, retry with 'devsy provider init %s --reconfigure'", + providerConfig.Name, + ) + return fmt.Errorf("configure provider: %w", err) + } + + return writeDefaultProvider(cmd.Context, providerConfig.Name) +} + +func (cmd *SetSourceCmd) runPinVersion(devsyConfig *config.Config, args []string) error { + if len(args) == 0 { + return fmt.Errorf("provider name must be provided when using --version") + } + if len(args) > 1 { + return fmt.Errorf("--version and a source argument are mutually exclusive") + } + providerName := args[0] + if err := workspace.SetProviderVersion(devsyConfig, providerName, cmd.Version); err != nil { + return err + } + log.Infof("pinned provider %s to version %s", providerName, cmd.Version) + return nil +} diff --git a/cmd/provider/update_test.go b/cmd/provider/set_source_test.go similarity index 62% rename from cmd/provider/update_test.go rename to cmd/provider/set_source_test.go index e8a86e956..a4e362e81 100644 --- a/cmd/provider/update_test.go +++ b/cmd/provider/set_source_test.go @@ -6,8 +6,8 @@ import ( "github.com/devsy-org/devsy/cmd/flags" ) -func TestUpdateCmd_VersionFlag(t *testing.T) { - cmd := NewUpdateCmd(&flags.GlobalFlags{}) +func TestSetSourceCmd_VersionFlag(t *testing.T) { + cmd := NewSetSourceCmd(&flags.GlobalFlags{}) if cmd.Flag("version") == nil { t.Fatal("expected --version flag") } diff --git a/cmd/provider/update.go b/cmd/provider/update.go deleted file mode 100644 index 63a699198..000000000 --- a/cmd/provider/update.go +++ /dev/null @@ -1,113 +0,0 @@ -package provider - -import ( - "context" - "fmt" - - "github.com/devsy-org/devsy/cmd/flags" - "github.com/devsy-org/devsy/pkg/config" - "github.com/devsy-org/devsy/pkg/log" - "github.com/devsy-org/devsy/pkg/workspace" - "github.com/spf13/cobra" -) - -// UpdateCmd holds the cmd flags. -type UpdateCmd struct { - *flags.GlobalFlags - - Use bool - Version string - Options []string -} - -// NewUpdateCmd creates a new command. -func NewUpdateCmd(flags *flags.GlobalFlags) *cobra.Command { - cmd := &UpdateCmd{ - GlobalFlags: flags, - } - updateCmd := &cobra.Command{ - Use: "update [name] [name, GitHub link, URL or path]", - Short: "Updates a provider in Devsy", - RunE: func(cobraCmd *cobra.Command, args []string) error { - ctx := cobraCmd.Context() - devsyConfig, err := config.LoadConfig(cmd.Context, cmd.Provider) - if err != nil { - return err - } - - return cmd.Run(ctx, devsyConfig, args) - }, - } - - updateCmd.Flags(). - BoolVar(&cmd.Use, "use", true, "If enabled will automatically activate the provider") - updateCmd.Flags(). - StringVar(&cmd.Version, "version", "", "Pin the provider to a specific version tag") - updateCmd.Flags(). - StringArrayVarP(&cmd.Options, "option", "o", []string{}, "Provider option in the form KEY=VALUE") - return updateCmd -} - -func (cmd *UpdateCmd) Run(ctx context.Context, devsyConfig *config.Config, args []string) error { - if cmd.Version != "" { - if len(args) == 0 { - return fmt.Errorf("provider name must be provided when using --version") - } - if len(args) > 1 { - return fmt.Errorf("--version and a source argument are mutually exclusive") - } - providerName := args[0] - if err := workspace.SetProviderVersion(devsyConfig, providerName, cmd.Version); err != nil { - return err - } - log.Infof("pinned provider %s to version %s", providerName, cmd.Version) - return nil - } - - // Standard update mode: requires provider name and optional source - if len(args) != 1 && len(args) != 2 { - return fmt.Errorf("specify either a local file, URL or Git repository. " + - "E.g. devsy provider update my-provider " + config.ProviderPrefix + "gcloud") - } - - providerSource := "" - if len(args) == 2 { - providerSource = args[1] - } - - providerConfig, err := workspace.UpdateProvider( - devsyConfig, - args[0], - providerSource, - ) - if err != nil { - return err - } - - log.Infof("updated provider: providerName=%s", providerConfig.Name) - if cmd.Use { - err = ConfigureProvider(ctx, ProviderOptionsConfig{ - Provider: providerConfig, - Context: devsyConfig.DefaultContext, - UserOptions: cmd.Options, - Reconfigure: false, - SkipRequired: false, - SkipInit: false, - SkipSubOptions: false, - SingleMachine: nil, - }) - if err != nil { - log.Errorf( - "Error configuring provider, retry with 'devsy provider configure %s --reconfigure'", - providerConfig.Name, - ) - return fmt.Errorf("configure provider: %w", err) - } - - return writeDefaultProvider(cmd.Context, providerConfig.Name) - } - - log.Infof("To configure the provider, run the following command:") - log.Infof("devsy provider configure %s", providerConfig.Name) - return nil -} From 484a92e304b9a69214a77ea516f74eb513fe0bb6 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:12:00 -0500 Subject: [PATCH 3/8] refactor(cli)!: update in-tree references to renamed provider verbs --- pkg/provider/provider.go | 2 +- pkg/workspace/workspace.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index b197a1758..4e6783dbd 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -259,7 +259,7 @@ type ProviderBinary struct { } type ProviderCommands struct { - // Init is run directly after `devsy provider configure` + // Init is run directly after `devsy provider init` Init types.StrArray `json:"init,omitempty"` // Command executes a command on the server diff --git a/pkg/workspace/workspace.go b/pkg/workspace/workspace.go index 52f111d4a..abdad8f47 100644 --- a/pkg/workspace/workspace.go +++ b/pkg/workspace/workspace.go @@ -334,7 +334,7 @@ func createWorkspace( return nil, nil, nil, err } else if provider.State == nil || !provider.State.Initialized { return nil, nil, nil, fmt.Errorf( - "provider %q is not initialized, make sure to run 'devsy provider configure %s' "+ + "provider %q is not initialized, make sure to run 'devsy provider init %s' "+ "at least once before using this provider", provider.Config.Name, provider.Config.Name, From aa19b6c48b2c91e20e87243162e0443157eb80dc Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:14:16 -0500 Subject: [PATCH 4/8] feat(cli): add 'rm' alias to delete commands across groups --- cmd/agent/workspace/delete.go | 7 ++++--- cmd/context/delete.go | 5 +++-- cmd/machine/delete.go | 5 +++-- cmd/pro/provider/delete.go | 9 +++++---- cmd/provider/delete.go | 7 ++++--- cmd/provider/delete_test.go | 9 +++++++++ cmd/workspace/delete.go | 5 +++-- 7 files changed, 31 insertions(+), 16 deletions(-) diff --git a/cmd/agent/workspace/delete.go b/cmd/agent/workspace/delete.go index 4d4f7846f..23de15165 100644 --- a/cmd/agent/workspace/delete.go +++ b/cmd/agent/workspace/delete.go @@ -33,9 +33,10 @@ func NewDeleteCmd(flags *flags.GlobalFlags) *cobra.Command { GlobalFlags: flags, } deleteCmd := &cobra.Command{ - Use: "delete", - Short: "Cleans up a workspace on the remote server", - Args: cobra.NoArgs, + Use: "delete", + Aliases: []string{"rm"}, + Short: "Cleans up a workspace on the remote server", + Args: cobra.NoArgs, RunE: func(cobraCmd *cobra.Command, _ []string) error { return cmd.Run(cobraCmd.Context()) }, diff --git a/cmd/context/delete.go b/cmd/context/delete.go index 164fb0460..c6b039394 100644 --- a/cmd/context/delete.go +++ b/cmd/context/delete.go @@ -20,8 +20,9 @@ func NewDeleteCmd(flags *flags.GlobalFlags) *cobra.Command { GlobalFlags: flags, } deleteCmd := &cobra.Command{ - Use: "delete", - Short: "Delete a Devsy context", + Use: "delete", + Aliases: []string{"rm"}, + Short: "Delete a Devsy context", RunE: func(cobraCmd *cobra.Command, args []string) error { if len(args) > 1 { return fmt.Errorf("specify the context to delete") diff --git a/cmd/machine/delete.go b/cmd/machine/delete.go index 3476577f7..99d2de123 100644 --- a/cmd/machine/delete.go +++ b/cmd/machine/delete.go @@ -26,8 +26,9 @@ func NewDeleteCmd(flags *flags.GlobalFlags) *cobra.Command { GlobalFlags: flags, } deleteCmd := &cobra.Command{ - Use: "delete [name]", - Short: "Deletes an existing machine", + Use: "delete [name]", + Aliases: []string{"rm"}, + Short: "Deletes an existing machine", RunE: func(cobraCmd *cobra.Command, args []string) error { return cmd.Run(cobraCmd.Context(), args) }, diff --git a/cmd/pro/provider/delete.go b/cmd/pro/provider/delete.go index b103c5e07..075afbabb 100644 --- a/cmd/pro/provider/delete.go +++ b/cmd/pro/provider/delete.go @@ -24,10 +24,11 @@ func NewDeleteCmd(globalFlags *flags.GlobalFlags) *cobra.Command { GlobalFlags: globalFlags, } c := &cobra.Command{ - Hidden: true, - Use: "delete", - Short: "Runs delete on a workspace", - Args: cobra.NoArgs, + Hidden: true, + Use: "delete", + Aliases: []string{"rm"}, + Short: "Runs delete on a workspace", + Args: cobra.NoArgs, RunE: func(cobraCmd *cobra.Command, args []string) error { return cmd.Run(cobraCmd.Context(), os.Stdin, os.Stdout, os.Stderr) }, diff --git a/cmd/provider/delete.go b/cmd/provider/delete.go index 2ec41d6a1..f4f94f74e 100644 --- a/cmd/provider/delete.go +++ b/cmd/provider/delete.go @@ -29,9 +29,10 @@ func NewDeleteCmd(flags *flags.GlobalFlags) *cobra.Command { GlobalFlags: flags, } deleteCmd := &cobra.Command{ - Use: "delete [name]", - Short: "Deletes an existing provider", - Args: cobra.MaximumNArgs(1), + Use: "delete [name]", + Aliases: []string{"rm"}, + Short: "Deletes an existing provider", + Args: cobra.MaximumNArgs(1), RunE: func(cobraCmd *cobra.Command, args []string) error { return cmd.Run(cobraCmd.Context(), args) }, diff --git a/cmd/provider/delete_test.go b/cmd/provider/delete_test.go index ea9c4f79b..5e944f953 100644 --- a/cmd/provider/delete_test.go +++ b/cmd/provider/delete_test.go @@ -1,6 +1,7 @@ package provider import ( + "slices" "testing" "github.com/devsy-org/devsy/cmd/flags" @@ -14,3 +15,11 @@ func TestDeleteCmd_RejectsMultipleArgs(t *testing.T) { t.Fatal("expected error when passing multiple arguments to delete, got nil") } } + +func TestDeleteCmdHasRmAlias(t *testing.T) { + cmd := NewDeleteCmd(&flags.GlobalFlags{}) + found := slices.Contains(cmd.Aliases, "rm") + if !found { + t.Fatal("provider delete should expose 'rm' alias") + } +} diff --git a/cmd/workspace/delete.go b/cmd/workspace/delete.go index 895120508..b3efbb5be 100644 --- a/cmd/workspace/delete.go +++ b/cmd/workspace/delete.go @@ -26,8 +26,9 @@ func NewDeleteCmd(flags *flags.GlobalFlags) *cobra.Command { GlobalFlags: flags, } deleteCmd := &cobra.Command{ - Use: "delete [flags] [workspace-path|workspace-name]", - Short: "Deletes an existing workspace", + Use: "delete [flags] [workspace-path|workspace-name]", + Aliases: []string{"rm"}, + Short: "Deletes an existing workspace", Long: `Deletes an existing workspace. You can specify the workspace by its path or name. If the workspace is not found, you can use the --ignore-not-found flag to treat it as a successful delete.`, RunE: func(cobraCmd *cobra.Command, args []string) error { From 9a8f35462a4aee20374ea7da840637d2bb1cf400 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:15:47 -0500 Subject: [PATCH 5/8] feat(cli): add 'mv' alias to rename commands --- cmd/provider/rename.go | 7 ++++--- cmd/workspace/rename.go | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cmd/provider/rename.go b/cmd/provider/rename.go index fd9768aae..6a8b78b53 100644 --- a/cmd/provider/rename.go +++ b/cmd/provider/rename.go @@ -26,9 +26,10 @@ func NewRenameCmd(globalFlags *flags.GlobalFlags) *cobra.Command { } return &cobra.Command{ - Use: "rename ", - Short: "Rename a provider", - Args: cobra.ExactArgs(2), + Use: "rename ", + Aliases: []string{"mv"}, + Short: "Rename a provider", + Args: cobra.ExactArgs(2), RunE: func(cobraCmd *cobra.Command, args []string) error { return cmd.Run(cobraCmd.Context(), args) }, diff --git a/cmd/workspace/rename.go b/cmd/workspace/rename.go index fb52f5e5d..a620f4575 100644 --- a/cmd/workspace/rename.go +++ b/cmd/workspace/rename.go @@ -25,9 +25,10 @@ func NewRenameCmd(globalFlags *flags.GlobalFlags) *cobra.Command { } return &cobra.Command{ - Use: "rename ", - Short: "Rename a workspace", - Args: cobra.ExactArgs(2), + Use: "rename ", + Aliases: []string{"mv"}, + Short: "Rename a workspace", + Args: cobra.ExactArgs(2), RunE: func(cobraCmd *cobra.Command, args []string) error { return cmd.Run(cobraCmd.Context(), args) }, From bc9a4d9ac0ecc4b6313c8d55861b367a5f74e5ec Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:16:58 -0500 Subject: [PATCH 6/8] test(e2e): use renamed 'provider init' and 'provider set-source' verbs --- e2e/framework/command.go | 10 +++++----- e2e/tests/provider/provider.go | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/e2e/framework/command.go b/e2e/framework/command.go index 16b9c59eb..c34ac7dd7 100644 --- a/e2e/framework/command.go +++ b/e2e/framework/command.go @@ -246,7 +246,7 @@ func (f *Framework) DevsyProviderUse( extraArgs ...string, ) error { if len(extraArgs) > 0 { - configureArgs := []string{cmdProvider, "configure", provider} + configureArgs := []string{cmdProvider, "init", provider} if err := f.ExecCommand( ctx, false, @@ -254,7 +254,7 @@ func (f *Framework) DevsyProviderUse( "", append(configureArgs, extraArgs...), ); err != nil { - return fmt.Errorf("devsy provider configure failed: %s", err.Error()) + return fmt.Errorf("devsy provider init failed: %s", err.Error()) } } useArgs := []string{cmdProvider, cmdUse, provider} @@ -366,12 +366,12 @@ func (f *Framework) DevsyProviderOptionsJSON( return stdout, nil } -func (f *Framework) DevsyProviderUpdate(ctx context.Context, args ...string) error { - baseArgs := []string{cmdProvider, "update"} +func (f *Framework) DevsyProviderSetSource(ctx context.Context, args ...string) error { + baseArgs := []string{cmdProvider, "set-source"} baseArgs = append(baseArgs, args...) err := f.ExecCommand(ctx, false, false, "", baseArgs) if err != nil { - return fmt.Errorf("devsy provider update failed: %s", err.Error()) + return fmt.Errorf("devsy provider set-source failed: %s", err.Error()) } return nil } diff --git a/e2e/tests/provider/provider.go b/e2e/tests/provider/provider.go index bd8df86d6..65a9613c4 100644 --- a/e2e/tests/provider/provider.go +++ b/e2e/tests/provider/provider.go @@ -94,7 +94,7 @@ var _ = ginkgo.Describe( framework.ExpectNoError(err) cancel() - err = f.DevsyProviderUpdate( + err = f.DevsyProviderSetSource( ctx, "provider2", tempDir+"/provider2-update.yaml", From 46d732ef6cfb1ff158091b6251704d200c32eed0 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:19:18 -0500 Subject: [PATCH 7/8] feat(desktop)!: use renamed 'provider init' and 'provider set-source' verbs --- desktop/src/main/ipc.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index 3b0f0b208..26d88afe1 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -192,7 +192,7 @@ export function registerIpcHandlers(deps: IpcDependencies): { // own-properties, so a thrown Error with a .cliError attached would lose it. ipcMain.handle("provider_init", async (_event, args: { name: string }) => { try { - await cli.runRaw(["provider", "configure", args.name]) + await cli.runRaw(["provider", "init", args.name]) return { ok: true } as const } catch (err) { const cliError = (err as { cliError?: CLIError }).cliError @@ -208,7 +208,7 @@ export function registerIpcHandlers(deps: IpcDependencies): { const win = deps.getMainWindow() await cli.runStreaming( - ["provider", "configure", args.name], + ["provider", "init", args.name], (line, _stream, meta) => { const formatted = formatLogLine(line) win?.webContents.send("command-progress", { @@ -238,7 +238,7 @@ export function registerIpcHandlers(deps: IpcDependencies): { ) ipcMain.handle("provider_update", async (_event, args: { name: string }) => { - await cli.runRaw(["provider", "update", args.name, "--use=false"]) + await cli.runRaw(["provider", "set-source", args.name, "--use=false"]) }) ipcMain.handle("provider_options", async (_event, args: { name: string }) => { @@ -284,7 +284,7 @@ export function registerIpcHandlers(deps: IpcDependencies): { ipcMain.handle( "provider_set_version", async (_event, args: { name: string; tag: string }) => { - await cli.runRaw(["provider", "update", args.name, "--version", args.tag]) + await cli.runRaw(["provider", "set-source", args.name, "--version", args.tag]) }, ) From 1572eef3a9c5ac2f441b92c7d1fbb0467904c4d6 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Sun, 31 May 2026 09:20:43 -0500 Subject: [PATCH 8/8] docs!: update provider command references to renamed verbs --- docs/pages/managing-providers/add-provider.mdx | 4 ++-- .../{update-provider.mdx => set-source.mdx} | 16 ++++++++-------- .../managing-providers/what-are-providers.mdx | 2 +- docs/sidebars.js | 2 +- examples/ztunnel/README.md | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) rename docs/pages/managing-providers/{update-provider.mdx => set-source.mdx} (57%) diff --git a/docs/pages/managing-providers/add-provider.mdx b/docs/pages/managing-providers/add-provider.mdx index cba86b444..c3c84a8a1 100644 --- a/docs/pages/managing-providers/add-provider.mdx +++ b/docs/pages/managing-providers/add-provider.mdx @@ -118,7 +118,7 @@ devsy provider add -o KEY=value or ```sh -devsy provider configure -o KEY=value +devsy provider init -o KEY=value ``` @@ -204,7 +204,7 @@ In **the desktop app** the option is available in the option management interfac In **the CLI** you can set this option using: ```sh -devsy provider configure --single-machine +devsy provider init --single-machine ``` ## Default Provider diff --git a/docs/pages/managing-providers/update-provider.mdx b/docs/pages/managing-providers/set-source.mdx similarity index 57% rename from docs/pages/managing-providers/update-provider.mdx rename to docs/pages/managing-providers/set-source.mdx index 394212648..e4c08a228 100644 --- a/docs/pages/managing-providers/update-provider.mdx +++ b/docs/pages/managing-providers/set-source.mdx @@ -1,19 +1,19 @@ --- -title: Update a Provider -sidebar_label: Update a Provider +title: Set a provider's source +sidebar_label: Set a provider's source --- To update a provider to its latest version, you can use: ```sh -devsy provider update +devsy provider set-source ``` To update to a specific version, pass `--version `: ```sh -devsy provider update --version v0.2.0 +devsy provider set-source --version v0.2.0 ``` To list the available versions for an installed provider, use: @@ -26,12 +26,12 @@ devsy provider versions Similar to adding a provider, you can update via: ```sh -devsy provider update my-org/my-repo +devsy provider set-source my-org/my-repo ``` If you want to update (or downgrade) a specific version, you can do: ```sh -devsy provider update github.com/my-org/my-repo@v0.2.0 +devsy provider set-source github.com/my-org/my-repo@v0.2.0 ``` ## From URL @@ -39,12 +39,12 @@ devsy provider update github.com/my-org/my-repo@v0.2.0 You can also specify the URL to the `provider.yaml` file, for example: ```sh -devsy provider update http://path/to/my/provider.yaml +devsy provider set-source http://path/to/my/provider.yaml ``` ### From File Run the following command to update provider `provider-name`: ```sh -devsy provider update ../path-to-updated/provider.yaml +devsy provider set-source ../path-to-updated/provider.yaml ``` diff --git a/docs/pages/managing-providers/what-are-providers.mdx b/docs/pages/managing-providers/what-are-providers.mdx index 4d5009cc1..ccd340395 100644 --- a/docs/pages/managing-providers/what-are-providers.mdx +++ b/docs/pages/managing-providers/what-are-providers.mdx @@ -41,5 +41,5 @@ container on the target. You can head over the next sections on how to manage Devsy providers: - [Add a Provider](./add-provider.mdx) -- [Update a Provider](./update-provider.mdx) +- [Set a provider's source](./set-source.mdx) - [Remove a provider](./remove-provider.mdx) diff --git a/docs/sidebars.js b/docs/sidebars.js index ed188f97a..e12c1910b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -133,7 +133,7 @@ module.exports = { }, { type: "doc", - id: "managing-providers/update-provider", + id: "managing-providers/set-source", }, { type: "doc", diff --git a/examples/ztunnel/README.md b/examples/ztunnel/README.md index 68b5af22f..8540680ec 100644 --- a/examples/ztunnel/README.md +++ b/examples/ztunnel/README.md @@ -7,7 +7,7 @@ curl -L -o devsy "https://github.com/devsy-org/devsy/releases/latest/download/de Update the provider ```bash -devsy provider update kubernetes kubernetes +devsy provider set-source kubernetes kubernetes ``` Version deployed and version of source code matters. Make sure they match. Pull the latest version of the source code. And copy the devcontainer.json file to the source code. Or you can use the latest version of `gcr.io/istio-testing/build-tools` image.