-
Notifications
You must be signed in to change notification settings - Fork 2
Technical Release Process
-
pytestpasses,ruff check .is clean. -
python manage.py generate_docshas been run and its output committed. -
python manage.py migratehas been run against a scratch PostgreSQL database. The test suite disables migrations, so it cannot catch a broken one; see testing.md. -
CHANGELOG.mdentries under## [Unreleased]are consolidated : one line per entry, one block per category, and noChangedorFixeddescribing somethingAddedin the same release.
The changelog promotion is the one commit that goes directly on main, with
exactly this message:
git commit -m 'Bump version `v0.36.0`'
git tag v0.36.0
git push origin main --tagsPromoting means moving the ## [Unreleased] entries under a new
## [0.36.0] - YYYY-MM-DD heading and adding the comparison link at the bottom
of the file.
| Workflow | Result |
|---|---|
docker-publish.yml |
Builds and pushes frousselet/cairn to Docker Hub with semver tags (0.36.0, 0.36, 0) and latest. APP_VERSION is baked into /etc/app-version, which is what the interface footer shows |
docs.yml |
Builds the wiki from docs/ and pushes it to the wiki repository |
Both need repository secrets. The image needs DOCKERHUB_USERNAME and
DOCKERHUB_TOKEN. The wiki needs WIKI_DEPLOY_KEY, and the choice of
credential there is worth understanding rather than copying.
A wiki is a separate git repository (<repo>.wiki.git) that GitHub gates
differently from the code. GITHUB_TOKEN, the credential a workflow gets for
free, generally cannot write to it, and fine-grained personal access tokens
have no wiki permission at all, so they cannot either, however they are
configured.
That leaves two options, and they are not equivalent:
| Credential | Reach |
|---|---|
Classic PAT with the repo scope |
Write access to every repository the account owns |
| Deploy key with write access | This repository alone, wiki included |
A classic PAT stored as a repository secret is a standing grant over your whole account, readable by any workflow that runs in this repository. Publishing documentation does not warrant that. Use a deploy key.
ssh-keygen -t ed25519 -N '' -C cairn-wiki -f /tmp/cairn-wiki
gh repo deploy-key add /tmp/cairn-wiki.pub --title 'Wiki publication' --allow-write
gh secret set WIKI_DEPLOY_KEY < /tmp/cairn-wiki
shred -u /tmp/cairn-wiki /tmp/cairn-wiki.pubThe private key goes into the secret and is then destroyed locally; it is never
displayed. Through the web interface the same two halves are
Settings -> Deploy keys -> Add deploy key (tick Allow write access, paste
the .pub) and Settings -> Secrets and variables -> Actions (name it
WIKI_DEPLOY_KEY, paste the private key).
A deploy key has no expiry. Rotate it by deleting the old key and repeating the four commands.
The wiki also has to have been initialised once, by creating any page in the web interface, before a workflow can clone it.
Without the secret the workflow prints these steps and fails rather than dying on an opaque git error, and the documentation can still be published by hand:
python scripts/build_wiki.py --out build/wiki --version v0.36.0Always create it, immediately after pushing the tag. The notes are that
version's CHANGELOG.md section, ending with the full comparison link.
gh release create v0.36.0 --title "v0.36.0" --notes "$(cat <<'NOTES'
### Added
...
**Full changelog**: https://github.com/frousselet/cairn/compare/v0.35.0...v0.36.0
NOTES
)"Check that the wiki actually updated : the workflow reports what it pushed, and the Home page footer carries the version it was built from. A wiki still showing the previous version means the publication step failed, and it fails silently from a reader's point of view.
Built from docs/ at v0.36.0. Edits made here are overwritten by the next release : open a pull request against the source instead.
- Administration
- Ask Cairn
- Assets and suppliers
- Compliance
- The dashboard
- Finding your way
- Getting started
- Incidents
- How records move
- Organisational context
- Reports and management review
- Risks
- Trust Center
- Architecture
- Configuration
- Contributing
- The documentation system
- Installation
- Internationalisation
- Operations
- Release process
- Security
- Testing
- Adding an assistant provider
- Adding a dashboard widget
- Adding a domain entity
- Declaring a lifecycle
- Adding an MCP tool
- Adding a REST endpoint
- Adding a report
- Interface conventions
- Dashboard widgets
- Lifecycles
- MCP tools
- MCP tool parameters : Assets
- MCP tool parameters : Compliance
- MCP tool parameters : Governance and context
- MCP tool parameters : General
- MCP tool parameters : Incidents
- MCP tool parameters : Reports and management review
- MCP tool parameters : Risks
- MCP tool parameters : System and administration
- MCP tool parameters : Trust Center
- Management commands
- Models
- Permissions
- REST endpoints
- Environment variables
- MCP server
- REST API
- Assistant module (Ask Cairn)
- Module 0: User Management and Access Control
- Module 1: Context and Organization
- Module 2: Asset Management
- Module 3: Compliance
- Module 4: Risk Management
- Module 4 bis - EBIOS Risk Manager
- Module 5 : Trust Center
- Module 6 : Security Incident Management
- Management review : ISO 27001:2022 compliance (clause 9.3)