Skip to content
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
116 changes: 83 additions & 33 deletions src/cmd/cli/command/cd.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ var cdCmd = &cobra.Command{
Short: "Manually run a command with the CD task (for BYOC only)",
Hidden: true,
PersistentPreRun: func(cmd *cobra.Command, args []string) {
ctx := cmd.Context()
var utc, _ = cmd.Flags().GetBool("utc")
var json, _ = cmd.Flags().GetBool("json")

Expand All @@ -24,7 +25,8 @@ var cdCmd = &cobra.Command{

if json {
os.Setenv("DEFANG_JSON", "1")
verbose = true
ctx = withVerbose(ctx, true)
cmd.SetContext(ctx)
}
},
}
Expand All @@ -35,23 +37,30 @@ var cdDestroyCmd = &cobra.Command{
Args: cobra.NoArgs, // TODO: set MaximumNArgs(1),
Short: "Destroy the service stack",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := newProviderChecked(cmd.Context(), loader)
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localVerbose := getVerbose(ctx)
localNonInteractive := getNonInteractive(ctx)

loader := configureLoader(cmd, localNonInteractive)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

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

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

return cli.BootstrapCommand(cmd.Context(), projectName, verbose, provider, "destroy")
return cli.BootstrapCommand(ctx, projectName, localVerbose, provider, "destroy")
},
}

Expand All @@ -61,23 +70,30 @@ var cdDownCmd = &cobra.Command{
Args: cobra.NoArgs, // TODO: set MaximumNArgs(1),
Short: "Refresh and then destroy the service stack",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := newProviderChecked(cmd.Context(), loader)
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localVerbose := getVerbose(ctx)
localNonInteractive := getNonInteractive(ctx)

loader := configureLoader(cmd, localNonInteractive)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

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

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

return cli.BootstrapCommand(cmd.Context(), projectName, verbose, provider, "down")
return cli.BootstrapCommand(ctx, projectName, localVerbose, provider, "down")
},
}

Expand All @@ -87,23 +103,30 @@ var cdRefreshCmd = &cobra.Command{
Args: cobra.NoArgs, // TODO: set MaximumNArgs(1),
Short: "Refresh the service stack",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := newProviderChecked(cmd.Context(), loader)
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localVerbose := getVerbose(ctx)
localNonInteractive := getNonInteractive(ctx)

loader := configureLoader(cmd, localNonInteractive)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

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

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

return cli.BootstrapCommand(cmd.Context(), projectName, verbose, provider, "refresh")
return cli.BootstrapCommand(ctx, projectName, localVerbose, provider, "refresh")
},
}

Expand All @@ -113,23 +136,30 @@ var cdCancelCmd = &cobra.Command{
Args: cobra.NoArgs, // TODO: set MaximumNArgs(1),
Short: "Cancel the current CD operation",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
provider, err := newProviderChecked(cmd.Context(), loader)
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localVerbose := getVerbose(ctx)
localNonInteractive := getNonInteractive(ctx)

loader := configureLoader(cmd, localNonInteractive)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

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

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

return cli.BootstrapCommand(cmd.Context(), projectName, verbose, provider, "cancel")
return cli.BootstrapCommand(ctx, projectName, localVerbose, provider, "cancel")
},
}

Expand All @@ -138,15 +168,21 @@ var cdTearDownCmd = &cobra.Command{
Args: cobra.NoArgs,
Short: "Destroy the CD cluster without destroying the services",
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localNonInteractive := getNonInteractive(ctx)

force, _ := cmd.Flags().GetBool("force")

loader := configureLoader(cmd)
provider, err := newProviderChecked(cmd.Context(), loader)
loader := configureLoader(cmd, localNonInteractive)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

return cli.TearDown(cmd.Context(), provider, force)
return cli.TearDown(ctx, provider, force)
},
}

Expand All @@ -156,23 +192,30 @@ var cdListCmd = &cobra.Command{
Aliases: []string{"list"},
Short: "List all the projects and stacks in the CD cluster",
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localVerbose := getVerbose(ctx)
localNonInteractive := getNonInteractive(ctx)

remote, _ := cmd.Flags().GetBool("remote")

provider, err := newProviderChecked(cmd.Context(), nil)
provider, err := newProviderChecked(ctx, nil, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

if remote {
err = canIUseProvider(cmd.Context(), provider, "", 0)
err = canIUseProvider(ctx, localClient, provider, "", localStack, 0)
if err != nil {
return err
}

// FIXME: this needs auth because it spawns the CD task
return cli.BootstrapCommand(cmd.Context(), "", verbose, provider, "list")
return cli.BootstrapCommand(ctx, "", localVerbose, provider, "list")
}
return cli.BootstrapLocalList(cmd.Context(), provider)
return cli.BootstrapLocalList(ctx, provider)
},
}

Expand All @@ -182,22 +225,29 @@ var cdPreviewCmd = &cobra.Command{
Annotations: authNeededAnnotation, // FIXME: because it still needs a delegated domain
Short: "Preview the changes that will be made by the CD task",
RunE: func(cmd *cobra.Command, args []string) error {
loader := configureLoader(cmd)
project, err := loader.LoadProject(cmd.Context())
ctx := cmd.Context()
localClient := getClient(ctx)
localProviderID := getProviderID(ctx)
localStack := getStack(ctx)
localMode := getMode(ctx)
localNonInteractive := getNonInteractive(ctx)

loader := configureLoader(cmd, localNonInteractive)
project, err := loader.LoadProject(ctx)
if err != nil {
return err
}

provider, err := newProviderChecked(cmd.Context(), loader)
provider, err := newProviderChecked(ctx, loader, localClient, localProviderID, localStack, localNonInteractive)
if err != nil {
return err
}

err = canIUseProvider(cmd.Context(), provider, project.Name, 1) // 1 SDU for BYOC preview
err = canIUseProvider(ctx, localClient, provider, project.Name, localStack, 1) // 1 SDU for BYOC preview
if err != nil {
return err
}

return cli.Preview(cmd.Context(), project, client, provider, mode)
return cli.Preview(ctx, project, localClient, provider, localMode)
},
}
Loading
Loading