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

Fixes and Improvements for terraform clean #870

Merged
merged 30 commits into from
Jan 30, 2025
Merged

Fixes and Improvements for terraform clean #870

merged 30 commits into from
Jan 30, 2025

Conversation

haitham911
Copy link
Collaborator

@haitham911 haitham911 commented Dec 19, 2024

Fixes and Improvements for terraform clean:

  • The --everything flag is redundant as it represents the default behavior. Remove it to simplify the command.

  • Add integration tests to verify the functionality of terraform apply and terraform clean.
    Ensure the tests cover scenarios for applying and cleaning up resources.

  • Bug Fix: atmos terraform clean --everything:
    Fix the issue where the output incorrectly states: component '' is not enabled and skipped.

  • Bug Fix: atmos terraform clean -s <stack>

  • Add tests for the following atmos terraform clean commands:
    atmos terraform clean
    atmos terraform clean <component>
    atmos terraform clean <component> -s <stack>

Ensure the --force flag is supported in all cases to bypass confirmation prompts.
image

references

Summary by CodeRabbit

Release Notes: Atmos Terraform Clean Command Update

  • New Features

    • Simplified atmos terraform clean command behavior
    • Removed --everything flag
    • Added --force flag to bypass confirmation
    • Introduced --skip-init flag to skip automatic execution of terraform init
    • Added --from-plan and --planfile flags for planfile usage
  • Documentation Updates

    • Clarified command usage and default behavior
    • Updated help text for Terraform clean command
    • Enhanced documentation for atmos terraform commands
  • Improvements

    • Enhanced command-line argument processing
    • Refined Terraform state file deletion logic
    • Improved error handling and logging
  • Tests

    • Added new tests for the atmos terraform clean command functionality

@haitham911 haitham911 requested a review from a team as a code owner December 19, 2024 02:58
@haitham911 haitham911 requested a review from osterman December 19, 2024 02:58
@mergify mergify bot added the triage Needs triage label Dec 19, 2024
Copy link
Contributor

coderabbitai bot commented Dec 19, 2024

📝 Walkthrough

Walkthrough

The pull request focuses on enhancing the functionality of the atmos terraform clean command. Key changes include the removal of the --everything flag, which simplifies the logic for cleaning Terraform state files and directories. Modifications span execution logic, documentation, and test cases, aiming to improve reliability and usability across various scenarios.

Changes

File Change Summary
internal/exec/terraform.go Modified shouldProcessStacks function to remove --everything flag checks and update logging conditions.
internal/exec/utils.go Enhanced command-line argument processing to explicitly recognize the "clean" command.
internal/exec/terraform_clean.go Removed everything parameter from initializeFilesToClear function and updated related logic.
website/docs/... Updated documentation for atmos terraform clean command, removing --everything references and clarifying default behavior.
tests/cli_terraform_test.go Added new test function TestCLITerraformClean with supporting helper functions.

Assessment against linked issues

Objective Addressed Explanation
Clean all components without specifying stack/component
Remove --everything flag complexity
Improve command usability
Handle global clean operation

Possibly related PRs

Suggested reviewers

  • aknysh
  • osterman
✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary or @auto-summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @auto-title anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
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: 0

🧹 Nitpick comments (1)
internal/exec/terraform.go (1)

Line range hint 78-98: Overall changes effectively address all reported bugs.

The modifications to stack processing and component validation logic successfully fix all three reported issues with the atmos terraform clean command. The changes are minimal, focused, and maintain the existing behavior for other commands.

Consider adding integration tests to cover these specific scenarios to prevent regression:

  1. atmos terraform clean --everything
  2. atmos terraform clean -s <stack>
  3. atmos terraform clean <component>
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe637fa and 6832ddd.

📒 Files selected for processing (1)
  • internal/exec/terraform.go (2 hunks)
🧰 Additional context used
📓 Learnings (1)
internal/exec/terraform.go (1)
Learnt from: haitham911
PR: cloudposse/atmos#727
File: internal/exec/terraform_clean.go:407-416
Timestamp: 2024-11-24T19:13:10.287Z
Learning: In `internal/exec/terraform_clean.go`, when `getStackTerraformStateFolder` returns an error in the `handleCleanSubCommand` function, the error is logged, and the process continues without returning the error.
🔇 Additional comments (2)
internal/exec/terraform.go (2)

96-98: LGTM! Component enabled check now correctly handles clean command.

The condition info.SubCommand != "clean" ensures that disabled components can still be cleaned up, while maintaining the validation for other commands.


78-83: LGTM! Stack processing logic aligns with command requirements.

The changes correctly handle all three use cases:

  1. clean --everything: No stack processing when component is empty
  2. clean -s <stack>: Stack check only when stack is provided
  3. clean <component>: No stack requirement when only component is provided

Let's verify the command behavior:

✅ Verification successful

Stack processing logic changes are correctly implemented and verified!

The code changes align perfectly with the intended behavior:

  • When no component is provided (ComponentFromArg == ""), stack processing is skipped, which correctly handles clean --everything
  • Stack validation (shouldCheckStack) only occurs when a stack is explicitly provided, fixing the clean -s <stack> case
  • The implementation in handleCleanSubCommand confirms proper handling of component-only cleaning without requiring a stack

The changes are supported by:

  • Clear error handling in handleCleanSubCommand
  • Proper integration with the command help system
  • Consistent behavior with the documented CLI usage at atmos.tools/cli/commands/terraform/clean
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Search for tests covering these scenarios

# Test: Look for clean command test cases
rg -A 5 "TestExecuteTerraform.*Clean" 

# Test: Search for clean command implementation details
ast-grep --pattern 'func $_(t *testing.T) {
  $$$
  clean
  $$$
}'

Length of output: 108


Script:

#!/bin/bash
# Let's try a broader search for test files and clean command implementation

# Search for test files related to terraform execution
fd "terraform.*test.*" --type f --exec rg -l "clean"

# Look for clean command implementation in terraform.go
rg -B 5 -A 10 "SubCommand == \"clean\"" internal/exec/terraform.go

# Search for any test functions that might test clean functionality
rg -B 2 -A 5 "func Test.*" --type go | rg -B 2 -A 5 -i "clean"

Length of output: 1832


Script:

#!/bin/bash
# Let's examine the handleCleanSubCommand function implementation

# Search for handleCleanSubCommand function
ast-grep --pattern 'func handleCleanSubCommand($$$) {
  $$$
}'

# Look for any related error handling or validation logic
rg -B 2 -A 5 "handleCleanSubCommand" --type go

# Check for any clean-related constants or types that might affect the behavior
rg "clean" -i --type go internal/exec/

Length of output: 4429

coderabbitai[bot]
coderabbitai bot previously approved these changes Dec 19, 2024
@mergify mergify bot removed the triage Needs triage label Dec 19, 2024
@aknysh aknysh added the patch A minor, backward compatible change label Dec 19, 2024
Copy link
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: 2

🔭 Outside diff range comments (2)
website/docs/cli/commands/terraform/usage.mdx (1)

Line range hint 62-66: Ensure consistency with the clean command documentation.

The description of the --everything flag's behavior should be consistent with the dedicated clean command documentation and clearly explain the confirmation prompt behavior.

-  Use the `--everything` flag is the default behavior to delete all the local Terraform state files and directories (including `terraform.tfstate.d`) for all components and stacks. 
-  Use the `--force` flag to bypass the safety confirmation prompt and force the deletion (use with caution).
-
-  :::warning
-  The `--everything` flag performs destructive operations that can lead to permanent state loss. Always ensure you have remote state configured in your components before proceeding.
-  :::
+  The command now defaults to the behavior of the `--everything` flag, which means it will:
+  - Delete all local Terraform state files and directories (including `terraform.tfstate.d`)
+  - Apply to all components and stacks
+  - Show a confirmation prompt before proceeding
+
+  Use the `--force` flag to bypass the safety confirmation prompt (use with extreme caution).
+
+  :::danger Data Loss Risk
+  This command performs destructive operations that can lead to permanent state loss:
+  1. Always ensure you have remote state configured in your components
+  2. Verify your state backups are current
+  3. Consider the impact on other team members
+  :::
internal/exec/help.go (1)

Line range hint 82-87: Fix typos and improve clarity in help text.

The help text contains typos and could be clearer about the default behavior.

-			"Use '--everything' flag —everything is the default behavior to delete the Terraform state files and and directories with confirm message.\n\n" +
-			"Use --force to forcefully delete Terraform state files and directories for the component.\n\n" +
-			"- If no component is specified, the command will apply to all components and stacks.\n" +
-			"- If no stack is specified, the command will apply to all stacks for the specified component.\n" +
-			"Use '--skip-lock-file' flag to skip deleting the '.terraform.lock.hcl' file.\n\n" +
-			"If no component or stack is specified, the clean operation will apply globally to all components.\n\n" +
+			"IMPORTANT: By default, this command will attempt to delete all Terraform state files and directories.\n" +
+			"A confirmation prompt will be shown before deletion.\n\n" +
+			"Flags:\n" +
+			"  --force        Bypass the confirmation prompt (use with extreme caution)\n" +
+			"  --skip-lock-file  Skip deleting the '.terraform.lock.hcl' file\n\n" +
+			"Scope:\n" +
+			"  - No component specified: Applies to all components and stacks\n" +
+			"  - No stack specified: Applies to all stacks for the specified component\n\n" +

Issues fixed:

  1. Removed duplicate "and" in "state files and and directories"
  2. Fixed em dash usage
  3. Removed redundant information about global operation
  4. Improved formatting for better readability
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6832ddd and 0c90df5.

📒 Files selected for processing (4)
  • internal/exec/help.go (1 hunks)
  • internal/exec/utils.go (1 hunks)
  • website/docs/cli/commands/terraform/terraform-clean.mdx (1 hunks)
  • website/docs/cli/commands/terraform/usage.mdx (1 hunks)
🧰 Additional context used
📓 Learnings (3)
website/docs/cli/commands/terraform/terraform-clean.mdx (1)
Learnt from: osterman
PR: cloudposse/atmos#727
File: internal/exec/terraform.go:114-118
Timestamp: 2024-11-12T05:52:05.088Z
Learning: When `atmos terraform clean --everything` is used without specifying a component and without the `--force` flag, prompt the user for confirmation before deleting all components. Use the `--force` flag to skip the confirmation prompt.
website/docs/cli/commands/terraform/usage.mdx (1)
Learnt from: osterman
PR: cloudposse/atmos#727
File: internal/exec/terraform.go:114-118
Timestamp: 2024-11-12T05:52:05.088Z
Learning: When `atmos terraform clean --everything` is used without specifying a component and without the `--force` flag, prompt the user for confirmation before deleting all components. Use the `--force` flag to skip the confirmation prompt.
internal/exec/help.go (1)
Learnt from: osterman
PR: cloudposse/atmos#727
File: internal/exec/terraform.go:114-118
Timestamp: 2024-11-12T05:52:05.088Z
Learning: When `atmos terraform clean --everything` is used without specifying a component and without the `--force` flag, prompt the user for confirmation before deleting all components. Use the `--force` flag to skip the confirmation prompt.
🔇 Additional comments (1)
internal/exec/utils.go (1)

660-664: LGTM! This change makes --everything the default behavior for the clean command.

The modification correctly addresses the issue where atmos terraform clean --everything was not working as expected. Now the --everything flag is automatically appended for the clean command if not already present.

coderabbitai[bot]
coderabbitai bot previously approved these changes Dec 19, 2024
coderabbitai[bot]
coderabbitai bot previously approved these changes Dec 19, 2024
@osterman
Copy link
Member

@coderabbitai can you add integration tests?

Copy link
Contributor

coderabbitai bot commented Dec 19, 2024

Tip

For best results, initiate chat on the files or code changes.

@osterman: Here's a draft of minimal integration tests for the “terraform clean” command. The example below shows how you might structure a new test file named “terraform_clean_integration_test.go” in a dedicated integration tests folder (for instance, create a “test/integration” directory if it doesn't exist). This code invokes the “atmos terraform clean” command with different flag combinations, checking for exit codes and capturing stdout/stderr as needed.


Below is an illustrative snippet in Go:


package integration_test

import (
"fmt"
"os"
"os/exec"
"strings"
"testing"
)

func TestTerraformCleanEverything(t *testing.T) {
cmd := exec.Command("atmos", "terraform", "clean", "--everything")
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("Error running 'atmos terraform clean --everything': %v\nOutput: %s", err, string(output))
}
if !strings.Contains(string(output), "deleted") {
t.Errorf("Expected output to indicate successful deletion, got: %s", string(output))
}
}

func TestTerraformCleanSpecificStack(t *testing.T) {
// Replace “” with an actual valid stack name in your environment
stackName := ""
cmd := exec.Command("atmos", "terraform", "clean", "-s", stackName)
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("Error running 'atmos terraform clean -s %s': %v\nOutput: %s", stackName, err, string(output))
}
if !strings.Contains(string(output), "deleted") {
t.Errorf("Expected output to contain the word 'deleted', got: %s", string(output))
}
}

func TestTerraformCleanComponentNoStack(t *testing.T) {
// Replace “” with an actual valid component name in your environment
compName := ""
cmd := exec.Command("atmos", "terraform", "clean", compName)
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("Error running 'atmos terraform clean %s': %v\nOutput: %s", compName, err, string(output))
}
if !strings.Contains(string(output), "deleted") {
t.Errorf("Expected output to indicate a successful cleanup, got: %s", string(output))
}
}

func TestTerraformCleanComponentAndStack(t *testing.T) {
// Replace these placeholders with valid component and stack names in your environment
compName := ""
stackName := ""
cmd := exec.Command("atmos", "terraform", "clean", compName, "-s", stackName)
output, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("Error running 'atmos terraform clean %s -s %s': %v\nOutput: %s", compName, stackName, err, string(output))
}
if !strings.Contains(string(output), "deleted") {
t.Errorf("Expected output to indicate a successful cleanup, got: %s", string(output))
}
}


You can adjust the checks (e.g., the success string “deleted”) to something more reliable or parse logs or state files directly. If needed, you can also run prior setup steps in each test—such as creating dummy Terraform resources—to validate the cleanup more comprehensively.

Hope this helps you get started!

🔗 Analysis chain
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Let's search for existing Go test files in the repository to see how integration tests are structured.
fd _test.go

# Also, let's see if there's a directory named 'test' or 'integration' which might indicate integration tests.
fd test
fd integration

Length of output: 3303


Script:

#!/bin/bash
# Let's search for clues on how integration tests might be structured or referenced in the codebase
# by looking for mentions of "integration test" or relevant references in existing test files or docs.

rg -A 5 -B 5 "integration test"
rg -A 5 -B 5 "IntegrationTest"
rg -A 5 -B 5 "integration testing"
rg -A 5 -B 5 "end-to-end test"

Length of output: 2658

Copy link
Member

@aknysh aknysh left a comment

Choose a reason for hiding this comment

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

@haitham911 in the docs, we have the following examples

# Delete all Terraform-related files for all components (with confirmation)
atmos terraform clean 
# Force delete all Terraform-related files for all components (no confirmation)
atmos terraform clean --force
atmos terraform clean top-level-component1 -s tenant1-ue2-dev
atmos terraform clean infra/vpc -s tenant1-ue2-staging
atmos terraform clean infra/vpc -s tenant1-ue2-staging --skip-lock-file
atmos terraform clean test/test-component -s tenant1-ue2-dev
atmos terraform clean test/test-component-override-2 -s tenant2-ue2-prod
atmos terraform clean test/test-component-override-3 -s tenant1-ue2-dev

when you specify a component and a stack, it works.

the command atmos terraform clean --force works too.

but atmos terraform clean does not, it throws the error

'stack' is required. Usage: atmos terraform <command> <component> -s <stack>

please review it and make it behave according to the examples

Please also update the PT description in ##what - some items in there are not corerct, for example

atmos terraform clean -s also just outputs the help
atmos terraform clean -s does work

but it does not, it throws the error

flag needs an argument: 's' in -s

Please update the items in the description to reflect the actual behavior and what was done in the PR

Copy link
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: 1

🧹 Nitpick comments (1)
tests/cli_terraform_test.go (1)

77-92: Improve error handling in helper functions.

The error handling could be more descriptive and provide better debugging information.

 func runTerraformApply(t *testing.T, binaryPath, environment string) {
     cmd := exec.Command(binaryPath, "terraform", "apply", "station", "-s", environment)
     envVars := os.Environ()
     envVars = append(envVars, "ATMOS_COMPONENTS_TERRAFORM_APPLY_AUTO_APPROVE=true")
     cmd.Env = envVars

     var stdout, stderr bytes.Buffer
     cmd.Stdout = &stdout
     cmd.Stderr = &stderr
     err := cmd.Run()
-    t.Log(stdout.String())
+    output := stdout.String()
+    t.Logf("Apply command output for environment %s:\n%s", environment, output)
     if err != nil {
-        t.Fatalf("Failed to run terraform apply station -s %s: %v", environment, stderr.String())
+        t.Fatalf("Failed to run terraform apply for environment %s:\nCommand: %v\nError: %v\nStderr: %s\nStdout: %s",
+            environment, cmd.Args, err, stderr.String(), output)
     }
 }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2cf9f38 and 319cd71.

📒 Files selected for processing (2)
  • internal/exec/terraform.go (2 hunks)
  • tests/cli_terraform_test.go (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • internal/exec/terraform.go
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Build (windows-latest, windows)
  • GitHub Check: Summary
🔇 Additional comments (2)
tests/cli_terraform_test.go (2)

28-33: Add cleanup in defer block to ensure test resources are cleaned.

The defer block only restores the working directory. Add cleanup of test resources to prevent test interference.

 defer func() {
+    // Clean up test resources
+    cmd := exec.Command(binaryPath, "terraform", "clean", "--force")
+    var stdout, stderr bytes.Buffer
+    cmd.Stdout = &stdout
+    cmd.Stderr = &stderr
+    if err := cmd.Run(); err != nil {
+        t.Logf("Warning: Cleanup failed: %v\n%s", err, stderr.String())
+    }
     // Change back to the original working directory after the test
     if err := os.Chdir(startingDir); err != nil {
         t.Fatalf("Failed to change back to the starting directory: %v", err)
     }
 }()

47-50: Verify command outputs to ensure correct error messages.

The test runs all required scenarios but doesn't verify the command outputs mentioned in PR objectives:

  1. --everything flag output
  2. Stack-only command help message
  3. Component-only command error message

Add output verification:

 runTerraformCleanForce(t, binaryPath)
+// Verify outputs
+func verifyCommandOutput(t *testing.T, cmd *exec.Cmd, expectedOutput string) {
+    var stdout bytes.Buffer
+    cmd.Stdout = &stdout
+    _ = cmd.Run()
+    if !strings.Contains(stdout.String(), expectedOutput) {
+        t.Errorf("Expected output to contain %q, got: %s", expectedOutput, stdout.String())
+    }
+}

Copy link
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: 1

🧹 Nitpick comments (3)
tests/cli_terraform_test.go (3)

28-33: Add cleanup in defer block to ensure test resources are cleaned.

The defer block only changes back to the original directory. Add cleanup to ensure test resources are removed even if the test fails.

 defer func() {
+    // Clean up test resources
+    cleanCmd := exec.Command(binaryPath, "terraform", "clean", "--force")
+    _ = cleanCmd.Run()
     // Change back to the original working directory after the test
     if err := os.Chdir(startingDir); err != nil {
         t.Fatalf("Failed to change back to the starting directory: %v", err)
     }
 }()

47-55: Organize clean command tests into subtests.

Group related test cases using t.Run() for better organization and independent execution.

-    // Force clean everything
-    runTerraformCleanCommand(t, binaryPath, "--force")
-    // Clean everything
-    runTerraformCleanCommand(t, binaryPath)
-    // Clean specific component
-    runTerraformCleanCommand(t, binaryPath, "station")
-    // Clean component with stack
-    runTerraformCleanCommand(t, binaryPath, "station", "-s", "dev")
+    testCases := []struct {
+        name string
+        args []string
+    }{
+        {"ForceCleanEverything", []string{"--force"}},
+        {"CleanEverything", nil},
+        {"CleanSpecificComponent", []string{"station"}},
+        {"CleanComponentWithStack", []string{"station", "-s", "dev"}},
+    }
+    
+    for _, tc := range testCases {
+        t.Run(tc.name, func(t *testing.T) {
+            runTerraformCleanCommand(t, binaryPath, tc.args...)
+        })
+    }

171-174: Improve error messages in clean command execution.

The error message could be more descriptive by including the command that failed.

 	if err != nil {
-		t.Fatalf("Failed to run terraform clean: %v", stderr.String())
+		t.Fatalf("Failed to run 'atmos %s': %v", strings.Join(cmdArgs, " "), stderr.String())
 	}
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 319cd71 and 0034639.

📒 Files selected for processing (1)
  • tests/cli_terraform_test.go (1 hunks)
🧰 Additional context used
🪛 golangci-lint (1.62.2)
tests/cli_terraform_test.go

151-151: func runCLITerraformClean is unused

(unused)

⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: Build (windows-latest, windows)
  • GitHub Check: Summary
🔇 Additional comments (1)
tests/cli_terraform_test.go (1)

111-150: 🛠️ Refactor suggestion

Consolidate duplicate clean command functions.

The functions runTerraformClean and runCLITerraformCleanComponent can be replaced with runTerraformCleanCommand.

Remove these functions and update their callers to use runTerraformCleanCommand:

-    runTerraformClean(t, binaryPath)
+    runTerraformCleanCommand(t, binaryPath, "--force")

-    runCLITerraformCleanComponent(t, binaryPath, environment)
+    runTerraformCleanCommand(t, binaryPath, "station", "-s", environment, "--force")

Likely invalid or redundant comment.

@haitham911 haitham911 changed the title Fix terraform clean bugs Fixes and Improvements for terraform clean Jan 30, 2025
@aknysh aknysh added minor New features that do not break anything and removed patch A minor, backward compatible change labels Jan 30, 2025
Copy link
Member

@aknysh aknysh left a comment

Choose a reason for hiding this comment

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

thanks @haitham911

@aknysh aknysh merged commit 75d6c46 into main Jan 30, 2025
45 checks passed
@aknysh aknysh deleted the DEV-2859 branch January 30, 2025 15:56
Copy link

These changes were released in v1.157.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
minor New features that do not break anything
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

atmos terraform clean does not work properly
4 participants