Guardian of the container cascade — event-driven image lifecycle management
Project description
CascadeGuard
Guardian of the container cascade. Event-driven image & tooling lifecycle management that integrates with your build & deployment tooling to eliminate vulnerability to supply chain attacks.
Quick Start
# Install (macOS / Linux)
curl -sSL https://raw.githubusercontent.com/cascadeguard/cascadeguard/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/cascadeguard/cascadeguard/main/install.ps1 | iex
Then in your state repository:
cg images init # Scaffold from seed repo (includes workflows)
cg images validate # Validate images.yaml
cg images check # Discover base images, check drift and upstream tags
Requires Python 3.11+. Both cg and cascadeguard are installed as aliases.
How It Works
- Image Enrollment: Images are defined in
images.yamlin a state repository - State Files: Detailed configuration for each image in
base-images/andimages/directories - Kubernetes Manifest Generation: Uses CDK8s under the hood to generate manifests for popular kubernetes based tools like Kargo, ArgoCD, etc
Using CascadeGuard
1. Install
# macOS / Linux
curl -sSL https://raw.githubusercontent.com/cascadeguard/cascadeguard/main/install.sh | sh
2. Set up your state repository
Scaffold a new state repository from the seed repo:
mkdir my-images && cd my-images && git init
cg images init
Or create an images.yaml and .cascadeguard.yaml manually:
# .cascadeguard.yaml
defaults:
registry: ghcr.io/myorg
local:
dir: images # folder containing per-image Dockerfiles
ci:
platform: github
# images.yaml — managed images inherit registry from .cascadeguard.yaml
- name: nginx
dockerfile: images/nginx/Dockerfile
image: nginx
tag: stable-alpine-slim
# Upstream-tracked images (CVE monitoring only, no build)
- name: memcached
enabled: false
namespace: library
3. Validate, generate, and build
# Validate images.yaml (applies config defaults before checking)
cg images validate
# Enrol a new image
cg images enrol --name myapp --registry ghcr.io --repository org/myapp
# Check for base image drift and new upstream tags
cg images check
cg images check --format json # JSON output for CI consumption
cg images check --image myapp # Scope to a single image
# Generate CI/CD pipeline files (GitHub Actions)
cg build generate
# Generate CI with explicit platform or dry-run
cg build generate --platform github --dry-run
See cascadeguard-exemplar for a complete working example.
Config Inheritance
Common fields can be set once in .cascadeguard.yaml under defaults instead of repeating them on every image:
| Key | Description |
|---|---|
defaults.registry |
Default container registry (e.g. ghcr.io/cascadeguard) |
defaults.repository |
Default repository prefix |
defaults.local.dir |
Default folder containing per-image Dockerfiles |
Per-image values in images.yaml always override the defaults.
Generating CI/CD Pipelines
cg build generate reads images.yaml and emits four GitHub Actions workflow files under .github/workflows/:
| File | Trigger | Purpose |
|---|---|---|
build-image.yaml |
workflow_call |
Reusable single-image build, scan (Grype + Trivy), SBOM, and Cosign signing |
ci.yaml |
push to main, pull_request |
Matrix build of all images; pushes and signs on merge to main |
scheduled-scan.yaml |
Nightly cron + workflow_dispatch |
Re-scans all published images; opens a GitHub Issue on new CVEs |
release.yaml |
Tag push (v*) |
Builds, signs, and pushes all images; creates a GitHub Release with changelog |
cg build generate
cg build generate --dry-run # preview without writing
Commit the generated files. Adding a new image to images.yaml and re-running cg build generate will automatically include it in every pipeline.
Overview
CascadeGuard automates the process of monitoring base images and shared build steps (github action workflows & steps, Gitlab pipelines, etc), discovering Dockerfile dependencies, package vulnerabilities and orchestrating intelligent pinning & container image rebuilds.
Licensing
CascadeGuard is licensed under the Business Source License 1.1 (BUSL-1.1).
You are free to use, copy, modify, and distribute CascadeGuard for non-production purposes. Production use is permitted provided you are not offering CascadeGuard to third parties as a commercial container image lifecycle management service or a managed image rebuild service.
Each version of CascadeGuard automatically converts to the Apache License 2.0 four years after its first public release.
For commercial licensing enquiries, contact licensing@cascadeguard.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cascadeguard-0.1.0.tar.gz.
File metadata
- Download URL: cascadeguard-0.1.0.tar.gz
- Upload date:
- Size: 68.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eae695fb3dd708d46fa45eefcb077330f4b59f2cb1aadf74532f52eb9843dd6f
|
|
| MD5 |
13007a5761207c5efef5fd7fef337d2f
|
|
| BLAKE2b-256 |
317afce7f36aa33e1850ce650c37d73337041f1ff3c947c249b343cb920d4c0f
|
Provenance
The following attestation bundles were made for cascadeguard-0.1.0.tar.gz:
Publisher:
pypi-publish.yaml on cascadeguard/cascadeguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cascadeguard-0.1.0.tar.gz -
Subject digest:
eae695fb3dd708d46fa45eefcb077330f4b59f2cb1aadf74532f52eb9843dd6f - Sigstore transparency entry: 1280959313
- Sigstore integration time:
-
Permalink:
cascadeguard/cascadeguard@01176f3f03058b57a5971bda41bdbcd6a4a2bb00 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cascadeguard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yaml@01176f3f03058b57a5971bda41bdbcd6a4a2bb00 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file cascadeguard-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cascadeguard-0.1.0-py3-none-any.whl
- Upload date:
- Size: 47.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
748e3495efedd439881ceb79e4281bc53f72839426c7a58308856b6816f0e482
|
|
| MD5 |
9f4cf1de292c6006fb9ae33f80a5747a
|
|
| BLAKE2b-256 |
279b6f5a123ba803ff460a1813c2c59dcb4b5dc08558c7c962ad1a8ab73d4ab1
|
Provenance
The following attestation bundles were made for cascadeguard-0.1.0-py3-none-any.whl:
Publisher:
pypi-publish.yaml on cascadeguard/cascadeguard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cascadeguard-0.1.0-py3-none-any.whl -
Subject digest:
748e3495efedd439881ceb79e4281bc53f72839426c7a58308856b6816f0e482 - Sigstore transparency entry: 1280959319
- Sigstore integration time:
-
Permalink:
cascadeguard/cascadeguard@01176f3f03058b57a5971bda41bdbcd6a4a2bb00 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/cascadeguard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yaml@01176f3f03058b57a5971bda41bdbcd6a4a2bb00 -
Trigger Event:
workflow_dispatch
-
Statement type: