Releasing Hubuum Frontend¶
Hubuum Frontend releases publish a multi-architecture image, an OCI Helm chart, a digest-pinned Compose quickstart, checksums, and a GitHub Release.
Backend preview support¶
Frontend changes may support unreleased backend features while preserving the
supported released-server baseline in docs/compatibility.md.
| Backend target | Purpose |
|---|---|
| Released tag and immutable image digest | Required compatibility baseline and deployment default. |
| Specific main commit and immutable image digest | Reproducible preview contract checks. |
Moving :main image |
Scheduled detection of upcoming compatibility changes. |
Merge preview support only after checks pass against both pinned targets. Use
endpoint capabilities and explicit compatibility fallbacks to preserve older
server behavior; a development server's version string may still identify the
previous release. Record the OpenAPI source commit and tested image digest in
docs/compatibility.md, and refresh them together after checking contract drift.
Versioned schemas are now part of the released-server backend-contract check;
the former separate schema-preview workflow is retired. For other preview
features, dispatch Backend main compatibility with the recorded immutable
image digest and require that run to pass on the final release commit. The
scheduled moving-main check remains a separate early warning.
A frontend release may include preview support while retaining its released backend baseline. Release notes must identify preview features and their required backend snapshot. When a backend release is selected, compare its final contract, regenerate the API client, update compatibility and deployment pins, and rerun the full release verification below. If a change cannot preserve the current baseline, hold it or keep the feature disabled until the supported backend version is intentionally raised.
Prepare¶
- Let the repository's npm and GitHub Actions Dependabot updates finish, then merge or supersede every open Dependabot pull request. Update application, development, and action dependencies together rather than relying on green checks from their individual pull requests.
- From that combined dependency set, run:
release:dependencies queries the npm registry for installed dependencies
and the script-pinned Orval generator, verifies every external
workflow uses: pin against the latest stable action tag and commit, and
blocks on open Dependabot pull requests. It uses the current repository from
authenticated gh; set GITHUB_REPOSITORY=owner/repository when running it
outside a checkout recognized by gh.
npm can move a package's latest tag to an older maintenance line. The gate
requires the newer stable version from latest or the declared range's
wanted version, without requiring a downgrade. npm outdated can still
list such a package after it is current, as with Node.js types 26.5.1
when latest points to 22.20.2.
3. Prefer updating a dependency over deferring it. When a concrete
compatibility constraint makes that impossible, add an exact entry to
release-dependency-exceptions.json in the release pull request:
{
"exceptions": [
{
"ecosystem": "npm",
"dependency": "example-package",
"currentVersion": "1.2.3",
"targetVersion": "2.0.0",
"reason": "Version 2 requires a backend contract not yet supported.",
"trackingIssue": "https://github.com/hubuum/hubuum-frontend/issues/123",
"expiresOn": "2026-10-01",
"pullRequest": 456
}
]
}
Use github-actions for an action exception. pullRequest is optional, but
is required when an open Dependabot pull request must remain unresolved.
The gate rejects expired, imprecise, duplicate, and unused exceptions. Copy
the compatibility reason into the release pull request and its CHANGELOG
section so it is present in the generated release notes.
4. Update package.json, package-lock.json, the Helm chart, Compose defaults,
and CHANGELOG.md to the same release version. Merge this final combined
release change to main through one pull request only after its validate,
backend-contract, browser-quality,
visual-regression, authenticated-browser-smoke, authenticated-browser,
and package checks pass.
5. Wait for validate, backend-contract,
browser-quality, visual-regression, authenticated-browser-smoke, package, and
publish-main to pass on the exact merged main commit. The publisher
builds AMD64 and ARM64 images on matching native GitHub-hosted runners,
assembles the multi-architecture manifest, and publishes its attestation and
development chart.
6. Dispatch Release readiness on that exact main commit:
gh workflow run release-readiness.yml --ref main
gh run list --workflow release-readiness.yml --branch main --limit 1 \
--json databaseId,headSha,status,conclusion,url
This release-blocking workflow reruns dependency freshness and exception
validation, confirms the exact commit's full main CI run, and runs the
complete authenticated browser suite, live credential approvals, and approved
restore completion against the combined dependency set and pinned server.
Wait for its release-readiness job to succeed and confirm the listed head
SHA is the commit that will be tagged.
7. Check out that clean commit and run:
Publish¶
Create and push an annotated tag from the verified commit:
The tag workflow rechecks dependency freshness and unresolved Dependabot pull requests, requires the successful pre-tag Release readiness run and main CI run for that exact commit, builds AMD64 and ARM64 images on matching native runners, assembles and attests the release manifest, publishes the chart and quickstart bundle, and only then creates the GitHub Release. Do not create or move release tags manually after a failed publication; fix the workflow and rerun it against the same immutable tag.
Release images use vX.Y.Z, X.Y.Z, and sha-<commit> tags. The project does
not publish a latest image tag. Development snapshots continue to use
main and the full commit SHA.