Skip to content
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

Add CD export and upgrade commands #985

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
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
52 changes: 52 additions & 0 deletions src/cmd/cli/command/cd.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,32 @@ var cdCancelCmd = &cobra.Command{
},
}

var cdExportCmd = &cobra.Command{
Use: "export",
Annotations: authNeededAnnotation, // need subscription
Args: cobra.NoArgs, // TODO: set MaximumNArgs(1),
Short: "Export the service stack state",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := getProvider(cmd.Context(), loader)
if err != nil {
return err
}

projectName, err := cliClient.LoadProjectNameWithFallback(cmd.Context(), loader, provider)
if err != nil {
return err
}

err = canIUseProvider(cmd.Context(), provider, projectName)
if err != nil {
return err
}

return cli.BootstrapCommand(cmd.Context(), projectName, client, provider, "export")
},
}

var cdTearDownCmd = &cobra.Command{
Use: "teardown",
Args: cobra.NoArgs,
Expand Down Expand Up @@ -198,3 +224,29 @@ var cdPreviewCmd = &cobra.Command{
return cli.Tail(cmd.Context(), provider, project.Name, tailOptions)
},
}

var cdUpgradeCmd = &cobra.Command{
Use: "upgrade",
Annotations: authNeededAnnotation, // need subscription
Args: cobra.NoArgs,
Short: "Upgrade the provider",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := getProvider(cmd.Context(), loader)
if err != nil {
return err
}

projectName, err := cliClient.LoadProjectNameWithFallback(cmd.Context(), loader, provider)
if err != nil {
return err
}

err = canIUseProvider(cmd.Context(), provider, projectName)
if err != nil {
return err
}

return cli.BootstrapCommand(cmd.Context(), projectName, client, provider, "upgrade")
},
}
2 changes: 2 additions & 0 deletions src/cmd/cli/command/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,15 @@ func SetupCommands(ctx context.Context, version string) {
RootCmd.AddCommand(cdCmd)
cdCmd.AddCommand(cdDestroyCmd)
cdCmd.AddCommand(cdDownCmd)
cdCmd.AddCommand(cdExportCmd)
cdCmd.AddCommand(cdRefreshCmd)
cdTearDownCmd.Flags().Bool("force", false, "force the teardown of the CD stack")
cdCmd.AddCommand(cdTearDownCmd)
cdListCmd.Flags().Bool("remote", false, "invoke the command on the remote cluster")
cdCmd.AddCommand(cdListCmd)
cdCmd.AddCommand(cdCancelCmd)
cdCmd.AddCommand(cdPreviewCmd)
cdCmd.AddCommand(cdUpgradeCmd)

// Eula command
tosCmd.Flags().Bool("agree-tos", false, "agree to the Defang terms of service")
Expand Down
34 changes: 23 additions & 11 deletions src/pkg/cli/client/byoc/baseclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,19 +84,31 @@ func DebugPulumi(ctx context.Context, env []string, cmd ...string) error {
localCmd := append([]string{"npm", "run", "dev"}, cmd...)
term.Debug(strings.Join(append(env, localCmd...), " "))

dir := os.Getenv("DEFANG_PULUMI_DIR")
if dir == "" {
if dir := os.Getenv("DEFANG_PULUMI_DIR"); dir != "" {
// Run the Pulumi command locally
env = append([]string{
"PATH=" + os.Getenv("PATH"),
"USER=" + pkg.GetCurrentUser(), // needed for Pulumi
}, env...)
if err := runLocalCommand(ctx, dir, env, localCmd...); err != nil {
return err
}
} else if os.Getenv("DEFANG_DOCKER") == "1" {
// Run the Pulumi command locally in a Docker container
dockerCmd := []string{"docker", "run", "--rm", "--entrypoint=node"}
for _, e := range env {
dockerCmd = append(dockerCmd, "-e", e)
}
dockerCmd = append(dockerCmd, "docker.io/defangio/cd-sandbox:public-do-beta", "lib/index.js")
dockerCmd = append(dockerCmd, cmd...)
term.Debug(strings.Join(dockerCmd, " "))

if err := runLocalCommand(ctx, "", env, dockerCmd...); err != nil {
return err
}
} else {
return nil // show the shell command, but use regular Pulumi command in cloud task
}

// Run the Pulumi command locally
env = append([]string{
"PATH=" + os.Getenv("PATH"),
"USER=" + pkg.GetCurrentUser(), // needed for Pulumi
}, env...)
if err := runLocalCommand(ctx, dir, env, localCmd...); err != nil {
return err
}
// We always return an error to stop the CLI from "tailing" the cloud logs
return errors.New("local pulumi command succeeded; stopping")
}
Expand Down
Loading