Release process¶
XCSoar uses two separate version changes for each minor release: marking the current version as released and starting development of the next version. Keeping these operations separate ensures that development builds, release artifacts, and release notes all use the same version.
Version files¶
The release manager must keep these files in sync:
VERSION.txtContains the version used by the build system. A build whose commit is not tagged with the matching
v<version>tag gets a Git commit suffix.NEWS.txtContains the cumulative release notes. The first block describes the version currently under development. See Policy for release-note guidelines.
debian/changelogContains a top stanza for the current version.
android/AndroidManifest.xml.templateContains the baseline Android
versionNameandversionCode. CI replaces these values for master and tag builds, but the checked-in values must still matchVERSION.txt.
The Android version code is calculated as:
major * 10000000 + minor * 100000 + patch * 10000 + build
patch and build are zero for a normal minor release. For example,
version 7.46 uses version code 74600000. CI uses its run number for the
build field on master and zero for a release tag.
Preparing a minor release¶
Finalise the release notes in the first
NEWS.txtblock. Follow the section, wording, and issue-reference conventions in Policy.Verify that
VERSION.txt, the firstNEWS.txtversion, the firstdebian/changelogstanza, and the AndroidversionNameall contain the version being released.Verify that the Android
versionCodematches the formula above.Replace
not yet releasedin theNEWS.txtversion heading with the release date inYYYY-MM-DDformat.Refresh the maintainer timestamp in the existing
debian/changelogstanza. Do not add another stanza for the same version.Check that the release-note extractor finds the intended block:
./tools/changelog.sh v7.46
Build and test the release as appropriate for the supported targets.
Commit the release metadata. The current commit-message pattern is:
NEWS.txt, debian/changelog: Mark v7.46 released
At this point VERSION.txt and the Android manifest template do not change;
they have contained the release version throughout its development cycle.
Tagging and publication¶
Create an annotated v<version> tag on the release commit and push it:
git tag -a v7.46 -m "v7.46"
git push upstream v7.46
The tag version must match VERSION.txt. The native-build workflow uses
the tag to extract the corresponding NEWS.txt block, create the GitHub
release, build release artifacts, and run the configured publication jobs.
Release branches are maintained according to the branch policy in
Policy.
Starting the next development cycle¶
After publishing a minor release, bump master to the next minor version in one commit:
Increment
VERSION.txt.Add
Version <next> - not yet releasedand a blank line at the top ofNEWS.txt.Add a new top stanza to
debian/changelogfor the next version. Refresh its timestamp when that version is eventually released.Update
versionNameand the baselineversionCodeinandroid/AndroidManifest.xml.template.Verify the changes with
git diff --checkand an appropriate build.
The current commit-message pattern is:
VERSION.txt, NEWS, debian, android: Bump to v7.47 development
Do not update src/Version.hpp for a release bump. Its declarations use
the value supplied by the build system from VERSION.txt.
Patch releases¶
Patch releases use all three version components, for example 7.46.1.
Apply the same consistency checks and include the patch component in the
Android version code. Make patch-release changes on the current minor branch
as described in Policy.