3 KiB
Dev Overlay
Patch the cluster's platform OCI artifact with your local changes without rebuilding or uploading the entire packages tree.
Why not make image-packages?
make image-packages (from packages/core/installer/Makefile) pushes the entire packages/ directory from your current working tree as a new OCI artifact. This has two problems:
-
Image version leakage. Your working tree inherits image versions from the branch you're on (e.g.
cozystack-controller:v1.1.0on main), which differ from the pinned versions in the cluster's release (e.g.v1.1.4). Uploading the whole tree overwrites them all. -
Single-branch only. If you develop features across multiple branches (branch A changes component A, branch B changes component B), you can only upload from one branch at a time. The old workaround was to create a "frankenstein" branch by merging all feature branches onto a release tag — manual and error-prone.
How dev-overlay works
Instead of replacing the entire artifact, dev-overlay patches it with only the files you changed:
- Pulls the existing overlay from the registry (or the cluster's base OCI on first run)
- Runs
git diff origin/main -- packages/against your working tree to find changed files - Copies only those files into the artifact, deletes removed files, cleans up renames
- Pushes the patched artifact and points the operator at its digest
Because the diff is against origin/main (or a ref you choose), files you didn't touch — including values with pinned image versions — are never overwritten. The cluster keeps its release versions.
Accumulation across branches
Changes from multiple branches stack on top of each other:
# On branch A (changes component A)
make dev-overlay
# Switch to branch B (changes component B)
make dev-overlay
After both runs, the overlay contains changes from both A and B. Files that only A touched are preserved when B runs (B's diff doesn't mention them). If both branches modify the same file, the last applied version wins.
Usage
cd packages/core/installer
# Preview what would be applied
make dev-overlay-diff
# Apply changes (defaults to diffing against origin/main)
make dev-overlay
# Override the diff base
make dev-overlay DEV_BASE_TAG=some-commit-hash
Resetting
To discard all overlay changes, delete the overlay tag from the registry and restore the operator to the original platform source. There is no automated undo — just point the operator back at the base artifact.
How DEV_BASE_TAG affects correctness
DEV_BASE_TAG (default: origin/main) is the git ref your changes are diffed against. For image versions to be preserved correctly, it must be a ref where inherited values match your working tree:
- Your branch has
image: v1.1.0(inherited from main) origin/mainalso hasimage: v1.1.0- No diff detected — cluster keeps its
v1.1.4
If you rebase onto a newer main that bumped a version, origin/main tracks that automatically. If you need a fixed point, pass a specific commit hash.