Skip to content

feat: build one image per application, not one per project - #2

Merged
ttncode merged 2 commits into
mainfrom
feat/multi-image
Sep 11, 2026
Merged

feat: build one image per application, not one per project#2
ttncode merged 2 commits into
mainfrom
feat/multi-image

Conversation

@ttncode

@ttncode ttncode commented Sep 11, 2026

Copy link
Copy Markdown
Owner

What

app-build.yml and app-release.yml take an images array ({image, context, dockerfile} per application) and matrix over it. A new app-targets.yml resolves the input into that matrix so both workflows read the same list.

Why

A project generated with both a web and an api application published exactly one image — whichever the toolbox applied last. The other app passed CI and then vanished: never built, never pushed, never in the compose.yaml a client runs. That is the shape the scaffold wizard offers first.

The fan-out has to live here rather than in the generated call site: app-release.yml runs release-please and uploads the release assets, both of which must happen once. Calling it per application would cut a release per application.

Compatibility

The singular image/context/dockerfile inputs stay and resolve into the same matrix, so every project generated before this keeps working at v1 with no edit. Passing both shapes is refused rather than silently preferring one.

Build cache is now scoped per image so two applications in one run do not evict each other's layers.

A project generated with both a web and an api application published exactly
one image: whichever the toolbox applied last. The other app passed CI and
then vanished — never built, never pushed, never in the compose file a client
runs. It was the shape the wizard offers first.

app-build.yml and app-release.yml now take an `images` array and matrix over
it. release-please and the release assets still run once, which is why the
fan-out has to live here rather than in the generated call site: calling
app-release.yml per application would cut a release per application.

The singular image/context/dockerfile inputs stay, resolved into the same
matrix by app-targets.yml, so a project generated before this keeps working at
v1 with no edit.
`scaffold new demo` with no adapter generates a project that publishes
nothing. Under the previous validation its Build workflow failed on every
push until somebody added an application.
@ttncode
ttncode merged commit f4b4999 into main Sep 11, 2026
1 check passed
@ttncode
ttncode deleted the feat/multi-image branch September 11, 2026 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant