-
-
Notifications
You must be signed in to change notification settings - Fork 102
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix vendor pull directory creation issue (#782)
* folder creation vendor fix * display error logic * Revert "display error logic" This reverts commit 1b5f112. * restore condition to continue vendor process if not exists * handle empty stack yaml file configuration (#791) * fix: handle empty stack YAML configuration and adjust file content retrieval * fix: return existing content from GetFileContent instead of an empty string * fix: remove unnecessary blank lines in ProcessYAMLConfigFile and GetFileContent functions * Set Default Schema to Remote Schema (#777) * feat: set default Atmos manifest URL if not specified in configuration * feat: log trace message when using default Atmos JSON Schema file * fix: improve error message for missing Atmos JSON Schema file * Update internal/exec/validate_stacks.go * fix: change log level from trace to info for default Atmos JSON Schema message * fix: change log level from info to trace for default Atmos JSON Schema message --------- Co-authored-by: Erik Osterman (CEO @ Cloud Posse) <[email protected]> Co-authored-by: Andriy Knysh <[email protected]> * added better error handling * added vendor config integration tests * explain package name choose Co-authored-by: Erik Osterman (CEO @ Cloud Posse) <[email protected]> --------- Co-authored-by: Andriy Knysh <[email protected]> Co-authored-by: Haitham Rageh <[email protected]> Co-authored-by: Erik Osterman (CEO @ Cloud Posse) <[email protected]>
- Loading branch information
1 parent
cf830c5
commit 0ea2472
Showing
2 changed files
with
146 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
// The package name `vendor` is reserved in Go for dependency management. | ||
// To avoid conflicts, the name `vender` was chosen as an alternative. | ||
package vender | ||
|
||
import ( | ||
"os" | ||
"path" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
|
||
e "github.com/cloudposse/atmos/internal/exec" | ||
"github.com/cloudposse/atmos/pkg/schema" | ||
) | ||
|
||
func TestVendorConfigScenarios(t *testing.T) { | ||
testDir := t.TempDir() | ||
|
||
// Initialize CLI config with required paths | ||
cliConfig := schema.CliConfiguration{ | ||
BasePath: testDir, | ||
Components: schema.Components{ | ||
Terraform: schema.Terraform{ | ||
BasePath: "components/terraform", | ||
}, | ||
}, | ||
} | ||
cliConfig.Logs.Level = "Trace" | ||
|
||
// Setup test component directory | ||
componentPath := path.Join(testDir, "components", "terraform", "myapp") | ||
err := os.MkdirAll(componentPath, 0755) | ||
assert.Nil(t, err) | ||
|
||
// Test Case 1: vendor.yaml exists and component is defined in it | ||
t.Run("vendor.yaml exists with defined component", func(t *testing.T) { | ||
// Create vendor.yaml | ||
vendorYaml := `apiVersion: atmos/v1 | ||
kind: AtmosVendorConfig | ||
metadata: | ||
name: test-vendor-config | ||
spec: | ||
sources: | ||
- component: myapp | ||
source: github.com/cloudposse/terraform-null-label.git//exports?ref={{.Version}} | ||
version: 0.25.0 | ||
included_paths: | ||
- "**/*.tf" | ||
` | ||
vendorYamlPath := path.Join(testDir, "vendor.yaml") | ||
err := os.WriteFile(vendorYamlPath, []byte(vendorYaml), 0644) | ||
assert.Nil(t, err) | ||
|
||
// Test vendoring with component flag | ||
vendorConfig, exists, configFile, err := e.ReadAndProcessVendorConfigFile(cliConfig, vendorYamlPath) | ||
assert.Nil(t, err) | ||
assert.True(t, exists) | ||
assert.NotEmpty(t, configFile) | ||
|
||
// Verify the component exists in vendor config | ||
var found bool | ||
for _, source := range vendorConfig.Spec.Sources { | ||
if source.Component == "myapp" { | ||
found = true | ||
break | ||
} | ||
} | ||
assert.True(t, found, "Component 'myapp' should be defined in vendor.yaml") | ||
|
||
// Clean up | ||
err = os.Remove(vendorYamlPath) | ||
assert.Nil(t, err) | ||
}) | ||
|
||
// Test Case 2: No vendor.yaml but component.yaml exists | ||
t.Run("component.yaml exists without vendor.yaml", func(t *testing.T) { | ||
// Create component.yaml | ||
componentYaml := `apiVersion: atmos/v1 | ||
kind: ComponentVendorConfig | ||
metadata: | ||
name: myapp-vendor-config | ||
spec: | ||
source: | ||
uri: github.com/cloudposse/terraform-null-label.git//exports?ref={{.Version}} | ||
version: 0.25.0 | ||
` | ||
componentYamlPath := path.Join(componentPath, "component.yaml") | ||
err := os.WriteFile(componentYamlPath, []byte(componentYaml), 0644) | ||
assert.Nil(t, err) | ||
|
||
// Test component vendoring | ||
componentConfig, compPath, err := e.ReadAndProcessComponentVendorConfigFile(cliConfig, "myapp", "terraform") | ||
assert.Nil(t, err) | ||
assert.NotNil(t, componentConfig) | ||
assert.Equal(t, componentPath, compPath) | ||
|
||
// Clean up | ||
err = os.Remove(componentYamlPath) | ||
assert.Nil(t, err) | ||
}) | ||
|
||
// Test Case 3: Neither vendor.yaml nor component.yaml exists | ||
t.Run("no vendor.yaml or component.yaml", func(t *testing.T) { | ||
// Test vendoring with component flag | ||
vendorYamlPath := path.Join(testDir, "vendor.yaml") | ||
_, exists, _, err := e.ReadAndProcessVendorConfigFile(cliConfig, vendorYamlPath) | ||
assert.Nil(t, err) | ||
assert.False(t, exists) | ||
|
||
// Test component vendoring | ||
_, _, err = e.ReadAndProcessComponentVendorConfigFile(cliConfig, "myapp", "terraform") | ||
assert.Error(t, err) | ||
assert.Contains(t, err.Error(), "does not exist") | ||
}) | ||
|
||
// Test Case 4: No component specified with vendor.yaml | ||
t.Run("no component specified with vendor.yaml", func(t *testing.T) { | ||
// Create vendor.yaml | ||
vendorYaml := `apiVersion: atmos/v1 | ||
kind: AtmosVendorConfig | ||
metadata: | ||
name: test-vendor-config | ||
spec: | ||
sources: | ||
- component: myapp | ||
source: github.com/cloudposse/terraform-null-label.git//exports?ref={{.Version}} | ||
version: 0.25.0 | ||
` | ||
vendorYamlPath := path.Join(testDir, "vendor.yaml") | ||
err := os.WriteFile(vendorYamlPath, []byte(vendorYaml), 0644) | ||
assert.Nil(t, err) | ||
|
||
// Test vendoring without component flag | ||
vendorConfig, exists, configFile, err := e.ReadAndProcessVendorConfigFile(cliConfig, vendorYamlPath) | ||
assert.Nil(t, err) | ||
assert.True(t, exists) | ||
assert.NotEmpty(t, configFile) | ||
assert.NotNil(t, vendorConfig.Spec.Sources) | ||
|
||
// Clean up | ||
err = os.Remove(vendorYamlPath) | ||
assert.Nil(t, err) | ||
}) | ||
} |