diff --git a/internal/chart/v3/chart.go b/internal/chart/v3/chart.go index 48f006e79..a466b1f70 100644 --- a/internal/chart/v3/chart.go +++ b/internal/chart/v3/chart.go @@ -162,7 +162,7 @@ func (ch *Chart) CRDObjects() []CRD { // Find all resources in the crds/ directory for _, f := range ch.Files { if strings.HasPrefix(f.Name, "crds/") && hasManifestExtension(f.Name) { - mycrd := CRD{Name: f.Name, Filename: filepath.Join(ch.ChartFullPath(), f.Name), File: f} + mycrd := CRD{Name: f.Name, Filename: filepath.ToSlash(filepath.Join(ch.ChartFullPath(), f.Name)), File: f} crds = append(crds, mycrd) } } diff --git a/internal/chart/v3/chart_test.go b/internal/chart/v3/chart_test.go index 07cbf4b39..5b1773842 100644 --- a/internal/chart/v3/chart_test.go +++ b/internal/chart/v3/chart_test.go @@ -227,3 +227,53 @@ func TestCRDObjects(t *testing.T) { crds := chrt.CRDObjects() is.Equal(expected, crds) } + +func TestCRDObjectsWithSubchart(t *testing.T) { + modTime := time.Now() + + // Create a subchart + subchart := &Chart{ + Metadata: &Metadata{ + Name: "subchart", + }, + Files: []*common.File{ + { + Name: "crds/subchartcrd.yaml", + ModTime: modTime, + Data: []byte("subchart crd"), + }, + }, + } + + // Create a parent chart with a dependency + parentChart := &Chart{ + Metadata: &Metadata{ + Name: "parent", + }, + Files: []*common.File{ + { + Name: "crds/parentcrd.yaml", + ModTime: modTime, + Data: []byte("parent crd"), + }, + }, + } + + parentChart.AddDependency(subchart) + + is := assert.New(t) + crds := parentChart.CRDObjects() + + // Verify we have CRDs from both parent and subchart + is.Equal(2, len(crds)) + + // Verify parent CRD has forward slashes (not backslashes) + is.Equal("crds/parentcrd.yaml", crds[0].Name) + is.Equal("parent/crds/parentcrd.yaml", crds[0].Filename) + is.NotContains(crds[0].Filename, "\\", "CRD filename should use forward slashes, not backslashes") + + // Verify subchart CRD has forward slashes (not backslashes) + is.Equal("crds/subchartcrd.yaml", crds[1].Name) + is.Equal("parent/charts/subchart/crds/subchartcrd.yaml", crds[1].Filename) + is.NotContains(crds[1].Filename, "\\", "CRD filename should use forward slashes, not backslashes") +}