Complete the steps below to release a new version of ODK Central.
Legend
- 🚀 Major release only
- 🛠 Patch release only
- 🔎 Requires the second person (reviewer)
- Unmarked steps apply to both major and patch releases.
Releasing requires two people: one person to push PRs and complete other tasks and another person to review the PRs.
Steps
Get the repository
Release central-frontend
Applies when central-frontend has changed since the last release. Major releases always include central-frontend; for patches, skip this section if no central-frontend changes are included.
Release central-backend
Applies when central-backend has changed since the last release. Major releases always include central-backend; for patches, skip this section if no central-backend changes are included.
Update submodules
Merge
Release central
Update API docs
Announce the release
Update news
Update the next branch
Do this once the news PR has been merged.
Complete the steps below to release a new version of ODK Central.
Releasing requires two people: one person to push PRs and complete other tasks and another person to review the PRs.
Steps
vXXXX.X.Y). The same version is used forcentral,central-backend, andcentral-frontend, so thecentralrelease URL (https://github.com/getodk/central/releases/tag/vXXXX.X.Y) can be referenced from thecentral-frontendandcentral-backendrelease bodies.odk-centrallabel.Get the repository
centralrepository locally.git pullnextbranch.centralrepository, check out themasterbranch. Otherwise, a different branch will be used for the patch (possiblynext); check out that branch.Release
central-frontendnpm run versionincentral-frontend. This consumes the.changeset/files, bumps package versions, and updates eachCHANGELOG.md.release-version-bumps) and open a PR targetingmaster.CHANGELOG.mdentries match what's expected from the.changeset/files.central-frontend, create a minimal GitHub release on the merged commit. The tag push is what triggers.github/workflows/wf-publish.ymlto publish packages to npm — full release notes live only in thecentralrelease.v*.*.*(no pre-release suffix).centralrelease, e.g.,See release notes at https://github.com/getodk/central/releases/tag/vX.Y.Z.wf-publish.ymlto complete, then verify:centralrelease.Release
central-backendmastercommit ofcentral-backend.v*.*.*(no pre-release suffix).XXXX.X.0in the tag and release title.centralrelease, e.g.,See release notes at https://github.com/getodk/central/releases/tag/vX.Y.Z.Update submodules
cdinto the directory and run:git fetchgit switch -d origin/masterorgit checkout origin/masterupdate-submodules). Create a new PR for the branch.nextbranch.centralrepository is the submodule updates, target themasterbranch. Otherwise, a different branch will be used for the patch (possiblynext); target that branch.Merge
nextbranch, use the existing release PR to mergenextinto themasterbranch.nextbranch after merging.centralrepository, then there should be a PR for the patch as a whole. Merge it.nextbranch, don't delete thenextbranch after merging.Release
centralCreate a GitHub release for
central. This will also create a Git tag.XXXX.X.0in the tag and release title.Add release notes to the release.
📋 Release notes template — expand, fill in links, and paste into the GitHub release
Update API docs
docsrepository. Using a new branch in your fork of thedocsrepository, copycentral-backend/docs/api.yamltodocs/docs/_static/api-spec/central.yaml. Create a new PR for the branch.future releaselabel.Announce the release
Update news
central/docs/news.html, branching off themasterbranch.masterbranch.Update the
nextbranchnextbranch to the tip of themasterbranch. Themasterbranch will be ahead of thenextbranch, so this doesn't require a force-push.nextbranch that isn't on themasterbranch, then merge themasterbranch into thenextbranch. If there has not been a commit, then reset thenextbranch to the tip of themasterbranch.