Maintainers¶
Release a version¶
flowchart LR
Freeze("Freeze commit<br/>on release/x.y.z") --> PR("Pull request<br/>to main")
PR -->|release gate<br/>says GO| Merge("Rebase<br/>and merge")
Merge --> Tag("Tag<br/>vX.Y.Z")
Tag --> Images("Images pushed<br/>to ghcr.io")
Images --> Deploy(["GitHub Release,<br/>then deploy"])
classDef orange fill:#FF57221F,stroke:#FF5722,stroke-width:2px
classDef teal fill:#0096881F,stroke:#009688,stroke-width:1.5px
classDef green fill:#43A0471F,stroke:#43A047,stroke-width:1.5px
class Freeze,PR,Merge orange
class Tag,Images teal
class Deploy green
- Audit. Run the quality audit on the release branch and fix what blocks.
- Freeze. On
release/x.y.z, make one commitchore(release): freeze [x.y.z]that:- renames
[Unreleased]to[x.y.z] - YYYY-MM-DDinCHANGELOG.md, - sets
versioninfrontend/package.json.
- renames
- Pull request. Open
release/x.y.z→main. The release gate runs and posts GO, GO CONDITIONAL or NO-GO as a comment.mainneeds one approval. - Merge with Rebase and merge.
-
Tag
main: -
Images. The tag starts
release.yml. It builds thelocalandremoteimages for amd64 and arm64 and pushesX.Y.Z-*,X.Y-*andlatest-*toghcr.io/scub-france/docling-studio. Thelocalimage includes the Ask packages. -
GitHub Release. The workflow does not create it. Create it from the tag, with the version's section of
CHANGELOG.mdas notes: -
Deploy with the deployment checklist.
-
Next version. Create the next release branch from
main, and its milestone on GitHub:
What the release gate checks¶
It runs on every pull request to main and posts a verdict: GO, GO CONDITIONAL (only the dependency audit or the audit script failed), or NO-GO.
| Check | What it runs |
|---|---|
| Lint and type-check | Ruff, ESLint, vue-tsc |
| Unit tests | pytest, Vitest |
| Dependency audit | pip-audit, npm audit |
| Audit script | profiles/fastapi-vue/commands.sh |
| Docker build | Both images |
| Smoke test | The remote image answers /api/health |
| Image scan | Trivy. Critical findings block. |
| Image size | Compared with the previous release. Warning only. |
| End-to-end | API (@smoke, @regression, @e2e) and UI (@critical) |
Known gaps in the workflow today: the unit-test steps pipe into tee without pipefail, so they cannot fail; the audit script is not in the repository; the Python audit never reports anything as critical. Lint and tests are still enforced by the CI checks required on main.
Hotfix¶
- Branch
hotfix/<issue>-<slug>frommain. - Fix, add a test, open a pull request to
main, squash it. - Tag the next patch version on
main, for examplev0.7.4: the images follow. - Make sure the fix also lands in the open release branch.
Checklists and references¶
| Topic | Page |
|---|---|
| Merging pull requests | Merge policy |
| Commit messages | Commit conventions |
| Reviewing | Code review checklist |
| Coding rules | Coding standards |
| Architecture decisions | ADR guide |
| Deploying, rolling back | Deployment checklist, Rollback playbook |
| Incidents, security, monitoring | Incident response, Security response, Monitoring |
| Triaging issues | Issue triage |
| Quality audit | Audit master and its 12 checklists |
| Downloads from HuggingFace | HuggingFace dependency map |