A handy script for a release manager to create all steps of a release
Requirements (are automatically installed with command below):
- appdirs
- gnupg
- pygithub
The easiest way is to install with pip
pip install git+ssh://git@github.com/RIOT-OS/RIOT-release-manager.git
But you can of course also clone the GitHub repository and run the setup.py script.
You need to have write permissions in the RIOT-OS/RIOT repository and your SSH public key assigned to your account.
For more help check
riot-release-manager -h
riot-release-manager feature-freeze YYYY.MM
Where YYYY.MM is the new release. If the release cycle shifted (i.e. the next release is not in three month ago) you can also provide a second YYYY.MM parameter that indicates this release name for the YYYY.MM-devel tag.
This command
- Creates the YYYY.MM-devel annotated tag towards the next release
- Creates the YYYY.MM-branch release branch for the current release
- Creates the YYYY.MM-RC1 release candidate tag on the release branch
- Creates an issue for testing the release specs for the release candidate in the RIOT-OS/Release-Specs repository
Note:* This command expects the HEAD of YYYY.MM-branch to be different from YYYY.MM-RCx (where x denotes the number the most recent release candidate version)
riot-release-manager rc YYYY.MM
This command
- Creates the YYYY.MM-RCy release candidate tag in the release branch (where y denotes the number of the next release candidate version after the most recent)
- Creates a new issue for testing the release specs for the release candidate in the RIOT-OS/Release-Specs repository
- Closes the issue for testing the previous release candidate in the RIOT-OS/Release-Specs
riot-release-manager set-milestones YYYY.MM --execute
This command will set the milestone "Release YYYY.MM" on GitHub to each PRs merged during the current cycle.
- Without the --execute flag, this command will run in "dry-run" mode: it is useful to verify the list of PRs that would be modified.
- The --one flag can be used to only modify one PR and check the milestone is correctly set to it.
riot-release-manager release-notes YYYY.MM
This command prints the release notes in the usual format, the notes contain: - The release statistics (number of PRs, commits, authors, etc), - The list of changes in the release, - The list of known and closed issues in the release.
Optional: use the -w/--write flags to update the release-notes.txt file directly. You can specify the local copy of your RIOT clone using -d <path to RIOT>. Example:
riot-release-manager -d <path to RIOT> release-notes YYYY.MM --write
riot-release-manager release YYYY.MM
This command
- Checks if the release notes for the YYYY.MM release are present in the release branch
- Checks if the VERSION file for the YYYY.MM release is present with the right content in the release branch
- Creates the signed YYYY.MM annotated tag which includes the release notes into the tag message - It requires your gpg key to be listed in gpg --list-keys
- Creates the release at https://github.com/RIOT-OS/RIOT/releases
- Launches confetti 🎉
I also works for bug-fixing point releases:
riot-release-manager release YYYY.MM.X
where X is an incrementing number.