GA tries to follow the gitflow workflow. A good tutorial on gitflow is here. Releases are simply tagged commits on the 'master' branch. All development occurs in the 'develop' branch. New features are developed in feature branches that started from a branch of 'develop'. Complete features are merged back into develop.
Once enough new features exist, the develop branch is branched into a release branch. No new features should be added at this point. Once the release branch is ready, it gets merged into both 'master' and 'develop'. The 'master' branch is tagged with the new release number. A new tarball is created for the tag and added to the github release. These steps are detailed next.
Starting with the develop branch, create a new release branch.
git checkout develop
git checkout -b release/0.1.0 # <-- use the intended version number
The version number is in global/src/gacommon.h. The CHANGELOG.md keeps track of user-visible changes. Follow the formatting guidelines in the CHANGELOG.md file.
You must merge the release branch back into develop and master. If new features were added to develop, you might need to work through merge conflicts. The merge into master should be a fast forward merge and without conflicts.
git checkout develop
git merge release/0.1.0
When merging master, you can also tag the release. You must push the tag in addition to pushing the merged branch back to the origin.
git checkout master
git merge release/0.1.0
git push # pushes the merged master branch to origin
git tag v0.1.0
git push --tags # pushes the tag to origin, creates a github draft release
Pushing a tag creates a draft release. You must edit the draft release to finish the process. Select the tag you just created as the tag to build the release around. Copy-and-paste the latest changes from the CHANGELOG.md file from the earlier release step to create the release notes.
GitHub automatically creates zip and tar.gz archives. However, these do not contain the configure script.
- Download the tar.gz archive.
- Untar the archive.
- Run autogen.sh inside the new directory. This creates the missing generated files, e.g., configure, Makefile.in.
- Remove the created autotools directory. We don't want to bundle the autotools with our releases.
- Tar the archive back up.
- Add the new archive as an artifact of the release.