Packer
One command cuts a version, packs the Docker image, and publishes the catalog on the site.
python3 scripts/pack.py --bump minor \
--title "Psycho" \
--note "Factor-1 weight ablation" \
--note "Grain verification tiers" \
--docker --deploy --publish-site --deploy-site
Why it exists
VERSION lived in core/constants.py, the landing hardcoded v0.7.0 in three places, Fly tagged images as opaque deployment hashes, and CHANGELOG.md drifted to a fictional 1.0.0. The packer makes one write and three surfaces agree: API /health, /api/v2/system/release, and https://indb.tech/#releases.
What it touches
| Path | Role |
|---|---|
core/constants.py VERSION |
running version |
releases/manifest.json |
version catalog in the database image |
releases/X.Y.Z.json |
one file per cut |
../site/app/data/releases.json |
site build reads this |
../site/public/releases.json |
same catalog, static |
It does not git commit, git push, or --force Fly. --tag only creates vX.Y.Z locally.
Flags
| Flag | Effect |
|---|---|
--version 0.8.0 |
exact semver |
--bump major\|minor\|patch |
from current VERSION |
--title / --note |
catalog copy (--note repeatable) |
--docker |
docker build -t indb:VERSION -t indb:latest |
--export |
portable dist/indb-VERSION/ (scripts/image.py) |
--deploy |
fly deploy --app indb |
--docs |
fly deploy docs |
--publish-site |
write the two site JSON files |
--deploy-site |
fly deploy --app indb-presentation |
--tag |
git tag -a vVERSION |
--dry-run |
print the plan, write nothing |
Order for a real cut
--dry-runand read the notes- pack with
--docker --publish-site --deploy --docs --deploy-sitewhen the image is the one you want live- commit and push when you decide the cut is the commit