Skip to content

feat: add deployment mode selection to parameter collection#2135

Open
lionello wants to merge 7 commits into
mainfrom
lio/pulumi-config
Open

feat: add deployment mode selection to parameter collection#2135
lionello wants to merge 7 commits into
mainfrom
lio/pulumi-config

Conversation

@lionello
Copy link
Copy Markdown
Member

@lionello lionello commented May 29, 2026

Description

  • add new defang recipe … commands, with list, show, activate, deactivate
  • before spawning CD job, look up recipe using new GetRecipe gRPC and attach PulumiConfig (if any) to the ProjectUpdate

Linked Issues

This needs https://github.com/DefangLabs/defang-mvp/pull/3027 and DefangLabs/pulumi-defang#279

Part of https://github.com/DefangLabs/defang-global/issues/75

Checklist

  • I have performed a self-review of my code
  • I have added appropriate tests
  • I have updated the Defang CLI docs and/or README to reflect my changes, if necessary

Summary by CodeRabbit

  • New Features

    • New "recipe" CLI: list, show, activate, and deactivate recipes.
    • Deployment modes renamed and exposed as selectable "recipes" during stack setup and config.
    • Selected recipe is now recorded and sent with deployments and previews; estimates reflect the chosen recipe.
    • Improved provider UX with better Azure detection and defaulting.
  • Tests

    • Tests updated to cover recipe-based flows and UI changes.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 29, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a Recipe type and migrates mode handling from Mode to Recipe across stacks, compose/deploy, estimate/validation, client APIs, CLI commands, and tests; adds recipe CRUD client methods and CLI commands; includes Recipe in BYOC deploy payloads and persisted deployment records.

Changes

Recipe type and workflow migration

Layer / File(s) Summary
Recipe type definition and Mode deprecation
src/pkg/modes/recipe.go, src/pkg/modes/mode.go, src/pkg/modes/mode_test.go
Introduces Recipe with parsing, Set, String, Type, Mode, FromMode; marks Mode deprecated and updates mode tests.
Stacks Parameters and serialization
src/pkg/stacks/stacks.go, src/pkg/stacks/stacks_test.go, src/pkg/stacks/manager.go, src/pkg/session/session.go
Changes Parameters/ListItem to use modes.Recipe; updates ToMap/paramsFromMap to parse/emit recipe strings; manager/session use RecipeUnspecified as sentinel and derive params from remote mode via FromMode.
Stack wizard and selector prompting
src/pkg/stacks/wizard.go, src/pkg/stacks/selector_test.go, src/pkg/stacks/wizard_test.go, src/cmd/cli/command/stack.go
Elicits deployment recipe in wizard for non-Defang providers (RequestEnum: mode), stores parsed Recipe, and fixes prompt return path; tests updated.
Recipe Fabric client APIs and mocks
src/pkg/cli/client/client.go, src/pkg/cli/client/grpc.go, src/pkg/cli/client/mock.go, src/pkg/cli/client/provider.go, src/pkg/cli/common.go
Adds GetRecipe, ListRecipes, PutRecipe to FabricClient/GrpcClient; extends mock client; adds Recipe to DeployRequest and deployment params.
Recipe CLI command group and helpers
src/cmd/cli/command/commands.go, src/cmd/cli/command/recipe.go, src/pkg/cli/recipeShow.go, src/pkg/cli/recipeList.go, src/pkg/cli/recipeActivate.go
Registers recipe command with list, show, activate, deactivate subcommands and implements RecipeShow, RecipeList, RecipeActivate wired to Fabric client.
CLI globals, provider detection, validation, and estimate defaults
src/cmd/cli/command/globals.go, src/cmd/cli/command/estimate.go, src/cmd/cli/command/globals_test.go, src/cmd/cli/command/estimate_test.go
Uses RecipeUnspecified sentinel, defaults stack mode to RecipeAffordable in estimate flow, adds Azure provider detection and help text, and updates tests.
Validation and estimate flows
src/pkg/cli/compose/validation.go, src/pkg/cli/compose/validation_test.go, src/pkg/cli/estimate.go
Migrates ValidateProject/validateService to accept modes.Recipe, updates HA checks, threads Recipe into RunEstimate/GeneratePreview/PrintEstimate, and retrieves Recipe via Fabric for previews.
ComposeUp deployment threading and persistence
src/pkg/cli/composeUp.go, src/cmd/cli/command/compose.go, src/pkg/cli/composeUp_test.go, src/pkg/cli/composeUp_dockerfile_test.go
ComposeUp now accepts ComposeUpParams.Mode as modes.Recipe, validates against recipe, computes compatibility via recipe.Mode(), fetches recipe metadata, sets DeployRequest.Mode and DeployRequest.Recipe, and persists recipe metadata; tests updated.
BYOC provider deployment payloads
src/pkg/cli/client/byoc/aws/byoc.go, src/pkg/cli/client/byoc/azure/byoc.go, src/pkg/cli/client/byoc/do/byoc.go, src/pkg/cli/client/byoc/gcp/byoc.go
Adds Recipe to marshaled defangv1.ProjectUpdate payloads sent to CD jobs.
Agent stack creation tools
src/pkg/agent/tools/create_aws_stack.go, src/pkg/agent/tools/create_azure_stack.go, src/pkg/agent/tools/create_gcp_stack.go
Use modes.ParseRecipe directly when building new stacks (removes per-tool parse-error early returns).
Agent estimate interfaces and tests
src/pkg/agent/tools/default_tool_cli.go, src/pkg/agent/tools/interfaces.go, src/pkg/agent/tools/estimate.go, src/pkg/agent/tools/*_test.go
Switches RunEstimate/PrintEstimate signatures to accept modes.Recipe; updates mocks and tests; HandleEstimateTool parses deployment_mode via ParseRecipe.
Tests and small fixes
src/cmd/cli/command/stack.go, src/pkg/cli/tail_test.go, many *_test.go updates
Adds explicit nil return in prompt helper, scanner.Err() check in tail test, and updates numerous tests to use modes.Recipe* constants and adjusted expectations.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Possibly related PRs

  • DefangLabs/defang#2131: The main PR’s new recipe CLI/features and client/grpc plumbing directly depend on added Recipe RPCs and message usage.
  • DefangLabs/defang#2134: Also recipe-centric; touches the same proto deploy/recipe fields and overlaps on deployment metadata changes.

Suggested reviewers

  • edwardrf
  • jordanstephens

"I'm a rabbit with a code-filled hat,
Recipes guide deploys — how about that?
Modes retired, enums now cheer,
Stacks and CLI whisper 'recipes here',
Hop, test, merge — deploys clap! 🐇"

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.62% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly describes the main change: adding deployment mode selection to parameter collection, which is a key objective of this changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch lio/pulumi-config

Comment @coderabbitai help to get the list of available commands and usage tips.

@lionello lionello requested a review from edwardrf June 2, 2026 15:27
@lionello lionello marked this pull request as ready for review June 2, 2026 23:05
@lionello lionello requested a review from jordanstephens as a code owner June 2, 2026 23:05
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
src/cmd/cli/command/estimate.go (1)

88-100: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Remove the duplicate Azure case.

case pkg.AzureInEnv() != "" already exists at Lines 92-93, so the second occurrence at Lines 98-99 is unreachable dead code. Either drop it or correct it if a different provider was intended.

🧹 Proposed cleanup
 	case pkg.GcpInEnv() != "":
 		defaultOption = client.ProviderGCP.String()
-	case pkg.AzureInEnv() != "":
-		defaultOption = client.ProviderAzure.String()
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cmd/cli/command/estimate.go` around lines 88 - 100, The switch in
estimate.go contains a duplicate Azure branch, making the later case
unreachable. Remove the repeated pkg.AzureInEnv() check from the default option
selection, or replace it with the intended provider case if another environment
was meant; verify the logic in the provider selection block around defaultOption
so each provider is handled only once.
src/pkg/agent/tools/create_aws_stack.go (1)

20-31: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Validate params.Mode instead of silently accepting unknown values
src/pkg/agent/tools/create_aws_stack.go uses modes.ParseRecipe(params.Mode) inline (no error handling). In src/pkg/modes/recipe.go, ParseRecipe(str string) Recipe has no error return; it uppercases the input, maps only a few legacy aliases, and otherwise falls through to return Recipe(upper) for unrecognized strings. This removes the prior “invalid mode” error behavior from modes.Parse. Restore explicit validation/error handling (or ensure unknown recipes are rejected downstream) before persisting/using the stack.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pkg/agent/tools/create_aws_stack.go` around lines 20 - 31,
HandleCreateAWSStackTool currently calls modes.ParseRecipe(params.Mode) with no
validation; restore explicit validation by parsing the mode then checking it
against the known/allowed Recipe values (e.g., via a new or existing validator
like modes.IsValid/knownRecipes or by updating modes.ParseRecipe to return an
error). If the parsed Recipe is not one of the recognized recipes, return a
descriptive error from HandleCreateAWSStackTool instead of persisting the stack;
otherwise proceed to build newStack (referencing newStack and modes.ParseRecipe)
and call createAndLoadStack as before.
src/pkg/cli/common.go (1)

56-124: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Drop putDeploymentParams.Recipe in putDeploymentAndStack (common.go)

  • src/pkg/cli/common.go defines putDeploymentParams.Recipe, but putDeploymentAndStack never reads it and never sets Stack.Recipe / Deployment.Recipe in the PutStackRequest and PutDeploymentRequest.
  • src/pkg/cli/composeUp.go does populate Recipe: deployRequest.Recipe, and the protobufs (io.defang.v1.Stack / io.defang.v1.Deployment) include a recipe field (with mode marked deprecated), so wiring req.Recipe through would prevent losing recipe metadata in the stored deployment/stack.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pkg/cli/common.go` around lines 56 - 124, putDeploymentAndStack currently
ignores putDeploymentParams.Recipe so recipe metadata is never saved; update the
function to pass req.Recipe into both the Stack and Deployment in the
PutStackRequest and PutDeploymentRequest (set Stack.Recipe = req.Recipe and
Deployment.Recipe = req.Recipe), ensuring the same recipe populated by
composeUp.go (deployRequest.Recipe) is persisted; locate these fields in
putDeploymentAndStack and add the Recipe assignments to the created
defangv1.Stack and defangv1.Deployment objects.
🧹 Nitpick comments (3)
src/cmd/cli/command/recipe.go (2)

76-93: 💤 Low value

Rename variable for consistency.

The variable is named recipeUnarchiveCmd but represents the activate command. Consider renaming to recipeActivateCmd for consistency with the function name and command semantics.

♻️ Proposed change
-	var recipeUnarchiveCmd = &cobra.Command{
+	var recipeActivateCmd = &cobra.Command{
 		Use:         "activate [RECIPE_NAME...]",
 		Aliases:     []string{"restore", "enable", "undelete", "unarchive"},
 		Annotations: authNeededAlways,
 		Args:        cobra.MinimumNArgs(1),
 		Short:       "Activates a recipe in the current workspace",
 		RunE: func(cmd *cobra.Command, args []string) error {
 			ctx := cmd.Context()
 			var errs []error
 			for _, name := range args {
 				errs = append(errs, cli.RecipeActivate(ctx, global.Client, name, true))
 			}
 			return errors.Join(errs...)
 		},
 	}
-	return recipeUnarchiveCmd
+	return recipeActivateCmd
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cmd/cli/command/recipe.go` around lines 76 - 93, The local variable
recipeUnarchiveCmd in makeRecipeActivateCmd should be renamed to
recipeActivateCmd to match the function/command semantics; update its
declaration and the final return statement to use recipeActivateCmd, and ensure
any internal references (the cobra.Command literal and its RunE closure) remain
unchanged so only the variable identifier is renamed.

58-73: 💤 Low value

Rename variable for consistency.

The variable is named recipeArchiveCmd but represents the deactivate command. Consider renaming to recipeDeactivateCmd for consistency with the function name and command semantics.

♻️ Proposed change
-	var recipeArchiveCmd = &cobra.Command{
+	var recipeDeactivateCmd = &cobra.Command{
 		Use:         "deactivate [RECIPE_NAME...]",
 		Aliases:     []string{"remove", "rm", "delete", "del", "disable", "archive"},
 		Annotations: authNeededAlways,
 		Args:        cobra.MinimumNArgs(1),
 		Short:       "Deactivates a recipe in the current workspace",
 		RunE: func(cmd *cobra.Command, args []string) error {
 			ctx := cmd.Context()
 			var errs []error
 			for _, name := range args {
 				errs = append(errs, cli.RecipeActivate(ctx, global.Client, name, false))
 			}
 			return errors.Join(errs...)
 		},
 	}
-	return recipeArchiveCmd
+	return recipeDeactivateCmd
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/cmd/cli/command/recipe.go` around lines 58 - 73, The variable
recipeArchiveCmd is misnamed for the deactivate command; rename it to
recipeDeactivateCmd and update its declaration, any references (including the
return statement) to use recipeDeactivateCmd so the symbol matches the command
semantics and the function name; ensure the variable name change is applied
consistently within this function block (the cobra.Command variable and the
final return).
src/pkg/cli/composeUp.go (1)

138-140: 💤 Low value

Clarify the recipe override and simplify mode conversion.

After the compatibility check, if newMode is not ModeUnspecified, you override the user-provided recipe with a new one derived from the mode via modes.FromMode(newMode.Value()). This pattern has two concerns:

  1. Redundant conversion: newMode is already a modes.Mode, so calling .Value() to get defangv1.DeploymentMode and then passing it back to FromMode is a round-trip. Consider storing a direct Mode-to-Recipe mapping or checking if modes.FromMode(newMode) is valid (without the .Value() step).

  2. Potential information loss: If the original recipe carries any custom configuration beyond just the mode name, this override discards it. The subsequent GetRecipe call fetches backend config by name, but clarify in a comment whether user-provided recipe details (if any exist) are intentionally replaced by the compatibility-derived mode.

♻️ Optional: simplify or document the override

Document the intent:

 if newMode != modes.ModeUnspecified {
+    // Replace recipe with mode-based one to enforce compatibility;
+    // backend GetRecipe will supply full config.
     recipe = modes.FromMode(newMode.Value())
 }

Or refactor if a direct conversion exists:

-recipe = modes.FromMode(newMode.Value())
+recipe = modes.RecipeFromMode(newMode) // if such a helper exists
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pkg/cli/composeUp.go` around lines 138 - 140, The current override
replaces the entire user-provided recipe by calling recipe =
modes.FromMode(newMode.Value()), which both does a redundant .Value() round-trip
and discards any custom recipe fields; change this to directly convert the
modes.Mode without .Value() (e.g., call modes.FromMode(newMode) or use a small
Mode->Recipe mapping) and when applying the result only override the recipe's
mode/name (not the whole recipe) so user-specified configuration is preserved;
also add a short comment near newMode, recipe, modes.FromMode and GetRecipe
clarifying that only the mode/name is being canonicalized for compatibility, not
wholesale replacement of user recipe data.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/cmd/cli/command/recipe.go`:
- Line 11: Rename the incorrectly named variable stackCmd to recipeCmd so the
command variable reflects its purpose; find the declaration "var stackCmd =
&cobra.Command{", rename the identifier to "recipeCmd" everywhere it is
referenced (including any uses in init/register functions) and ensure any
related help/usage text remains unchanged.

In `@src/pkg/cli/composeUp.go`:
- Around line 143-155: The deploy request mixes the local recipe.Mode() and the
backend-fetched rresp.Recipe, which can produce conflicting Mode values; after
calling fabric.GetRecipe (GetRecipe) check that rresp.Recipe is non-nil and that
rresp.Recipe.Mode equals recipe.Mode().Value(), and if they differ return an
error indicating the mismatch, or else set deployRequest.DeployRequest.Mode from
the fetched rresp.Recipe.Mode so both deployRequest.Mode and Recipe
(rresp.Recipe) use the same source of truth; update the code paths that build
the deployRequest (the DeployRequest struct and any early return) accordingly.

In `@src/pkg/cli/recipeShow.go`:
- Around line 13-19: resp.Recipe may be nil after fabric.GetRecipe; before
accessing resp.Recipe.PulumiConfig in recipeShow.go, add a nil-guard: check that
resp != nil && resp.Recipe != nil and handle the nil case (return a clear error
from the surrounding function or print a “recipe not found” message) instead of
dereferencing; update the code around the GetRecipe call and the subsequent
term.Println usage to avoid a panic and return the appropriate error when Recipe
is nil.

In `@src/pkg/modes/recipe.go`:
- Around line 22-39: The Set method currently accepts any string and ParseRecipe
returns Recipe(upper) for unknown inputs, letting typos become ModeUnspecified
downstream; update ParseRecipe to validate against known constants
(RecipeAffordable, RecipeBalanced, RecipeHighAvailability, etc.) and have
Recipe.Set call ParseRecipe and return a descriptive error when the input is
unrecognized (instead of nil), or alternatively provide a separate
ParseRecipeAllowFreeForm used only by the agent; ensure Recipe.Mode() still maps
properly but that CLI pflag.Value parsing and DEFANG_MODE reading fail fast on
invalid values.

In `@src/pkg/stacks/stacks.go`:
- Around line 72-80: modes.ParseRecipe currently uppercases and maps aliases but
returns Recipe(upper) for unknown inputs, allowing invalid modes to slip
through; update ParseRecipe to validate the uppercased value against known
recipes and return modes.RecipeUnspecified for any unrecognized string (while
preserving case-insensitive matching and legacy alias mapping), add a unit test
that calls modes.ParseRecipe with an invalid value and asserts
RecipeUnspecified, and ensure callers (e.g., the Parameters construction in
stacks.go where recipe is set) continue to treat RecipeUnspecified as the
sentinel for unspecified/invalid mode.

---

Outside diff comments:
In `@src/cmd/cli/command/estimate.go`:
- Around line 88-100: The switch in estimate.go contains a duplicate Azure
branch, making the later case unreachable. Remove the repeated pkg.AzureInEnv()
check from the default option selection, or replace it with the intended
provider case if another environment was meant; verify the logic in the provider
selection block around defaultOption so each provider is handled only once.

In `@src/pkg/agent/tools/create_aws_stack.go`:
- Around line 20-31: HandleCreateAWSStackTool currently calls
modes.ParseRecipe(params.Mode) with no validation; restore explicit validation
by parsing the mode then checking it against the known/allowed Recipe values
(e.g., via a new or existing validator like modes.IsValid/knownRecipes or by
updating modes.ParseRecipe to return an error). If the parsed Recipe is not one
of the recognized recipes, return a descriptive error from
HandleCreateAWSStackTool instead of persisting the stack; otherwise proceed to
build newStack (referencing newStack and modes.ParseRecipe) and call
createAndLoadStack as before.

In `@src/pkg/cli/common.go`:
- Around line 56-124: putDeploymentAndStack currently ignores
putDeploymentParams.Recipe so recipe metadata is never saved; update the
function to pass req.Recipe into both the Stack and Deployment in the
PutStackRequest and PutDeploymentRequest (set Stack.Recipe = req.Recipe and
Deployment.Recipe = req.Recipe), ensuring the same recipe populated by
composeUp.go (deployRequest.Recipe) is persisted; locate these fields in
putDeploymentAndStack and add the Recipe assignments to the created
defangv1.Stack and defangv1.Deployment objects.

---

Nitpick comments:
In `@src/cmd/cli/command/recipe.go`:
- Around line 76-93: The local variable recipeUnarchiveCmd in
makeRecipeActivateCmd should be renamed to recipeActivateCmd to match the
function/command semantics; update its declaration and the final return
statement to use recipeActivateCmd, and ensure any internal references (the
cobra.Command literal and its RunE closure) remain unchanged so only the
variable identifier is renamed.
- Around line 58-73: The variable recipeArchiveCmd is misnamed for the
deactivate command; rename it to recipeDeactivateCmd and update its declaration,
any references (including the return statement) to use recipeDeactivateCmd so
the symbol matches the command semantics and the function name; ensure the
variable name change is applied consistently within this function block (the
cobra.Command variable and the final return).

In `@src/pkg/cli/composeUp.go`:
- Around line 138-140: The current override replaces the entire user-provided
recipe by calling recipe = modes.FromMode(newMode.Value()), which both does a
redundant .Value() round-trip and discards any custom recipe fields; change this
to directly convert the modes.Mode without .Value() (e.g., call
modes.FromMode(newMode) or use a small Mode->Recipe mapping) and when applying
the result only override the recipe's mode/name (not the whole recipe) so
user-specified configuration is preserved; also add a short comment near
newMode, recipe, modes.FromMode and GetRecipe clarifying that only the mode/name
is being canonicalized for compatibility, not wholesale replacement of user
recipe data.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b363f9dc-d3d7-47e2-b66a-eeefa9d62564

📥 Commits

Reviewing files that changed from the base of the PR and between 3dfee36 and 10f9f4c.

📒 Files selected for processing (54)
  • src/cmd/cli/command/commands.go
  • src/cmd/cli/command/compose.go
  • src/cmd/cli/command/estimate.go
  • src/cmd/cli/command/estimate_test.go
  • src/cmd/cli/command/globals.go
  • src/cmd/cli/command/globals_test.go
  • src/cmd/cli/command/recipe.go
  • src/cmd/cli/command/stack.go
  • src/cmd/cli/command/stack_test.go
  • src/pkg/agent/tools/create_aws_stack.go
  • src/pkg/agent/tools/create_azure_stack.go
  • src/pkg/agent/tools/create_gcp_stack.go
  • src/pkg/agent/tools/current_stack_test.go
  • src/pkg/agent/tools/default_tool_cli.go
  • src/pkg/agent/tools/deploy.go
  • src/pkg/agent/tools/estimate.go
  • src/pkg/agent/tools/estimate_test.go
  • src/pkg/agent/tools/interfaces.go
  • src/pkg/agent/tools/select_stack_test.go
  • src/pkg/agent/tools/services_test.go
  • src/pkg/cli/client/byoc/aws/byoc.go
  • src/pkg/cli/client/byoc/azure/byoc.go
  • src/pkg/cli/client/byoc/do/byoc.go
  • src/pkg/cli/client/byoc/gcp/byoc.go
  • src/pkg/cli/client/client.go
  • src/pkg/cli/client/grpc.go
  • src/pkg/cli/client/mock.go
  • src/pkg/cli/client/provider.go
  • src/pkg/cli/common.go
  • src/pkg/cli/compose/validation.go
  • src/pkg/cli/compose/validation_test.go
  • src/pkg/cli/composeUp.go
  • src/pkg/cli/composeUp_dockerfile_test.go
  • src/pkg/cli/composeUp_test.go
  • src/pkg/cli/estimate.go
  • src/pkg/cli/preview_test.go
  • src/pkg/cli/recipeActivate.go
  • src/pkg/cli/recipeList.go
  • src/pkg/cli/recipeShow.go
  • src/pkg/cli/stacks.go
  • src/pkg/cli/stacks_test.go
  • src/pkg/cli/tail_test.go
  • src/pkg/modes/mode.go
  • src/pkg/modes/mode_test.go
  • src/pkg/modes/recipe.go
  • src/pkg/session/session.go
  • src/pkg/session/session_test.go
  • src/pkg/stacks/manager.go
  • src/pkg/stacks/manager_test.go
  • src/pkg/stacks/selector_test.go
  • src/pkg/stacks/stacks.go
  • src/pkg/stacks/stacks_test.go
  • src/pkg/stacks/wizard.go
  • src/pkg/stacks/wizard_test.go
💤 Files with no reviewable changes (1)
  • src/cmd/cli/command/stack.go

Comment thread src/cmd/cli/command/recipe.go Outdated
Comment thread src/pkg/cli/composeUp.go
Comment thread src/pkg/cli/recipeShow.go
Comment thread src/pkg/modes/recipe.go
Comment thread src/pkg/stacks/stacks.go
Comment thread src/pkg/agent/tools/create_aws_stack.go
Comment thread src/pkg/cli/estimate.go Outdated
Comment thread src/pkg/cli/recipeActivate.go Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants