CDK8s Projects

We support two types of projects for Kubernetes powered by the CDK8s: apps and libraries. Apps represent complete Kubernetes applications while libraries vend constructs which can be consumed by other libraries or by apps. Libraries are published to public or internal package managers (npm, PyPI, Maven, NuGet, etc) while apps are deployed into Kubernetes clusters.

This section describes features that are available in both CDK8s libraries and applications.

Integration Snapshot Tests

Files in the test/ tree with the .integ.ts suffix are recognized as integration snapshot tests.

Each test is a simple CDK8s app which exercises certain construct(s) within the project. A test is considered passing if the app can be successfully deployed.

To create/update the snapshot, developers are expected to execute the task integ:NAME:deploy with a kubectl configuration for their personal development environment, such as K3s, Microk8s, Kind, Rancher Desktop, or otherwise. This task will deploy the test app by applying it with kubectl. Upon successful deployment (i.e. the test passed), the snapshot will be captured and stored under a directory called xxx.integ.snapshot next to the test entrypoint. This directory should be committed to the repository.

During builds (either local or within a workflow), the task integ:NAME:assert will be executed. This task synthesizes the test app and compares the output to the captured snapshot. The build will fail if the output differs.

For each integration test, the following set of tasks are created:

Task Description
integ:NAME:deploy Deploys the test app and updates the snapshot.
integ:NAME:assert Synthesizes the test app and compares it with the snapshot (this is the task that runs during build)
integ:NAME:snapshot Synthesizes the test app and updates the snapshot (not recommended to use because it bypasses deployment).