Skip to content
Merged
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
19 changes: 10 additions & 9 deletions pkg/lib/kptops/render_executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -707,15 +707,6 @@ func (pn *pkgNode) runPipeline(ctx context.Context, hctx *hydrationContext, inpu
hctx.runnerOptions.FullDisplayName = resolveFullDisplayName(pn.pkg, hctx.runnerOptions.LogOptions)

pr := printer.FromContextOrDie(ctx)
// TODO: the DisplayPath is a relative file path. It cannot represent the
// package structure. We should have function to get the relative package
// path here.
// ^^^^^ did they mean something like pn.pkg.UniquePath.RelativePath()?
prOpts := printer.NewOpt().
Path(pn.pkg.UniquePath).
DisplayPath(pn.pkg.DisplayPath).
DisplayName(hctx.runnerOptions.FullDisplayName)
pr.OptPrintf(prOpts, "\n")

pl, err := pn.pkg.Pipeline()
if err != nil {
Expand All @@ -729,6 +720,16 @@ func (pn *pkgNode) runPipeline(ctx context.Context, hctx *hydrationContext, inpu
return input, nil
}

// TODO: the DisplayPath is a relative file path. It cannot represent the
// package structure. We should have function to get the relative package
// path here.
// ^^^^^ did they mean something like pn.pkg.UniquePath.RelativePath()?
prOpts := printer.NewOpt().
Path(pn.pkg.UniquePath).
DisplayPath(pn.pkg.DisplayPath).
DisplayName(hctx.runnerOptions.FullDisplayName)
pr.OptPrintf(prOpts, "\n")

// perform runtime validation for pipeline
if err := pn.pkg.ValidatePipeline(); err != nil {
return nil, err
Expand Down
167 changes: 155 additions & 12 deletions pkg/lib/kptops/render_executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,44 +261,88 @@ func setupRendererTest(t *testing.T, renderBfs bool) (*Renderer, *bytes.Buffer,
assert.NoError(t, err)

childPkgPath := "/root/subpkg/child"
err = mockFileSystem.Mkdir(subPkgPath)
err = mockFileSystem.Mkdir(childPkgPath)
assert.NoError(t, err)

siblingPkgPath := "/root/sibling"
err = mockFileSystem.Mkdir(subPkgPath)
err = mockFileSystem.Mkdir(siblingPkgPath)
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(rootPkgPath, "Kptfile"), fmt.Appendf(nil, `
apiVersion: kpt.dev/v1
err = mockFileSystem.WriteFile(filepath.Join(rootPkgPath, "Kptfile"), fmt.Appendf(nil, `apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: root-package
annotations:
kpt.dev/bfs-rendering: %t
kpt.dev/bfs-rendering: "%t"
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: root
`, renderBfs))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(subPkgPath, "Kptfile"), []byte(`
apiVersion: kpt.dev/v1
err = mockFileSystem.WriteFile(filepath.Join(rootPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: root-cm
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(subPkgPath, "Kptfile"), []byte(`apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: sub-package
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: sub
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(siblingPkgPath, "Kptfile"), []byte(`
apiVersion: kpt.dev/v1
err = mockFileSystem.WriteFile(filepath.Join(subPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: sub-cm
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(siblingPkgPath, "Kptfile"), []byte(`apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: sibling-package
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: sibling
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(childPkgPath, "Kptfile"), []byte(`
apiVersion: kpt.dev/v1
err = mockFileSystem.WriteFile(filepath.Join(siblingPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: sibling-cm
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(childPkgPath, "Kptfile"), []byte(`apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: child-package
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: child
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(childPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: child-cm
`))
assert.NoError(t, err)

Expand Down Expand Up @@ -345,13 +389,112 @@ func TestRenderer_Execute_RenderOrder(t *testing.T) {
fnResults, err := renderer.Execute(ctx)
assert.NoError(t, err)
assert.NotNil(t, fnResults)
assert.Equal(t, 0, len(fnResults.Items))
assert.Equal(t, 4, len(fnResults.Items))

output := outputBuffer.String()
assertOrder(t, output, tc.orderedOutput...)
})
}
}
func TestRunPipeline_SubpkgNameDisplay(t *testing.T) {
tests := []struct {
name string
subPkgKptfile string
expectSubPkgName bool
}{
{
name: "does not print subpkg name when pipeline is empty",
subPkgKptfile: `apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: sub-package
`,
expectSubPkgName: false,
},
{
name: "prints subpkg name when pipeline is not empty",
subPkgKptfile: `apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: sub-package
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
tier: backend
`,
expectSubPkgName: true,
},
}

for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
var outputBuffer bytes.Buffer
ctx := context.Background()
ctx = printer.WithContext(ctx, printer.New(&outputBuffer, &outputBuffer))

mockFileSystem := filesys.MakeFsInMemory()

rootPkgPath := rootString
err := mockFileSystem.Mkdir(rootPkgPath)
assert.NoError(t, err)

subPkgPath := subPkgString
err = mockFileSystem.Mkdir(subPkgPath)
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(rootPkgPath, "Kptfile"), []byte(`apiVersion: kpt.dev/v1
kind: Kptfile
metadata:
name: root-package
pipeline:
mutators:
- image: ghcr.io/kptdev/krm-functions-catalog/set-labels:latest
configMap:
app: myapp
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(rootPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: root-cm
`))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(subPkgPath, "Kptfile"), []byte(tc.subPkgKptfile))
assert.NoError(t, err)

err = mockFileSystem.WriteFile(filepath.Join(subPkgPath, "resources.yaml"), []byte(`apiVersion: v1
kind: ConfigMap
metadata:
name: sub-cm
`))
assert.NoError(t, err)

renderer := &Renderer{
PkgPath: rootPkgPath,
FileSystem: mockFileSystem,
RunnerOptions: func() runneroptions.RunnerOptions {
opts := runneroptions.RunnerOptions{}
opts.InitDefaults(runneroptions.GHCRImagePrefix)
return opts
}(),
}

_, err = renderer.Execute(ctx)
assert.NoError(t, err)

output := outputBuffer.String()
assert.Contains(t, output, `Package "root":`)
if tc.expectSubPkgName {
assert.Contains(t, output, `Package "root/subpkg":`)
} else {
assert.NotContains(t, output, `Package "root/subpkg":`)
}
})
}
}

func assertOrder(t *testing.T, output string, expected ...string) {
indices := make([]int, len(expected))
Expand Down