Changelog - 2026-10-20
The build stamp is baked at compile and resolved from git at start
New Feature Breaking ChangeIn one line. Pass define: await BuildInfoStamp.define() to the compile and call await BuildInfoStamp.register() at the entrypoint; no src/_build_info.ts is generated, so a clean checkout typechecks, tests and boots.
typescript
// scripts/compile.ts
import { BunCompiler } from '@venizia/dev-configs/compilers';
import { BuildInfoStamp } from '@venizia/ignis-boot/build-info';
await BunCompiler.compile({ entrypoint: './src/index.ts', define: await BuildInfoStamp.define() });typescript
// src/index.ts
import { BuildInfoStamp } from '@venizia/ignis-boot/build-info';
await BuildInfoStamp.register();What changed
BuildInfoStampin@venizia/ignis-boot/build-info.define()returns thedefinerecord for a compile.register()uses the baked stamp when the compile defined it, else resolves it from git throughBuildInfoResolver, then callsBuildInfoRegistry.set. It setscommit,branchandbuiltAt;serviceandversionstay withgetAppInfo().BunCompiler.compiletakesdefine. It is aRecord<string, string>passed toBun.build, so a compile script can bake any constant.ignis-build-infois removed. The bin,BuildInfoEmitter,generateBuildInfo,BuildInfoFormats,IBuildInfoOptions,IBuildInfoResultandTBuildInfoFormatare gone.BuildInfoResolverandBuildInfoEnvironmentKeysstay.
Who is affected
- A service that runs
ignis-build-info generateand imports_build_info. Follow the steps below. The old recipe breaks as soon as you update@venizia/ignis-boot, because the bin no longer exists. - A frontend or shell build that used
--format json. Write the record fromBuildInfoResolverin your build script. The guide shows it. - A service that never stamped its build. No action needed.
Breaking changes
WARNING
The ignis-build-info binary and its file emitter are removed with no deprecation step. A build script or Dockerfile that calls ignis-build-info generate fails.
Before:
bash
bunx ignis-build-info generate --out src/_build_info.tstypescript
// src/index.ts
import { BUILD_INFO } from './_build_info';
import { BuildInfoRegistry } from '@venizia/ignis-helpers/core';
BuildInfoRegistry.set({ buildInfo: BUILD_INFO });After:
- Delete the
ignis-build-info generateline from the build, andsrc/_build_info.tsfrom.gitignore. - Pass
define: await BuildInfoStamp.define()toBunCompiler.compile(orBun.build). - Replace the
BuildInfoRegistry.setlines in the entrypoint:
typescript
import { BuildInfoStamp } from '@venizia/ignis-boot/build-info';
await BuildInfoStamp.register();Details
- Why the file went. The generated, gitignored file left a clean checkout unable to typecheck, test or boot until something generated it. The compile now carries the stamp, and a run from source asks git, so there is nothing to generate and nothing to forget.
- The name is shared.
define()returns{ IGNIS_BUILD_INFO: '<JSON>' }andregister()reads that name.BuildInfoStamp.GLOBAL_NAMEholds it. A test bundles a real entrypoint and runs it to prove they agree. - No scanner in your binary.
@venizia/ignis-boot/build-infoimports no TypeScript. - CI variables. The resolver reads the same variables as before (
APP_ENV_BUILD_*,APP_BUILD_*, then provider names). Export them in the step that compiles.
See Stamping a build for the full how-to.
| File | Package |
|---|---|
src/build-info/stamp.ts | boot |
src/compilers/bun.ts | dev-configs |