Skip to content

Release Procedure

Yannick Goumaz edited this page Jun 20, 2022 · 96 revisions

Pre-release tasks

  1. Nominate a Release Leader, this leader should:
    • Make sure to understand the availabilities of everyone for the release.
    • Create the Github milestone for the next release.
    • Assign remaining issues.
    • Assign testing OS for the QA tests.
    • Create the QA as a google docs spreadsheet based on this template.
    • Make sure that everything is ready before the actual release (blog post [major releases only], announcement, etc.).
    • Know during the whole release process at any time who is doing what.
    • At least every day:
      • Check the progress of everyone.
      • Report overall release status to the whole team.
      • Re-assign remaining issues depending on progress.
  2. [major releases only] Write a blog post announcing the new release, see this example, the newsletter and twitter/Discord/etc. announcement.
  3. Make sure that all the remaining issues corresponding to the release milestone are well sorted according to these rules:
    • Regressions and other important issues such as crashes should be fixed for the next release.
    • Depending on the urgency to release, eventually postpone the other issues and create new milestones.
  4. Update the doc:
    1. First update the URL with ./scripts/packaging/update_worlds_and_protos.py <version>
    2. Regenerate thumbnails with docs/generate_thumbnails.py
    3. Regenerate objects documentation with docs/guide/generate_objects_doc.py
  5. [major releases only] Update all the worlds using scripts/packaging/update_all_worlds.py.
  6. Make sure no released worlds produce unwanted warning by running the tests/manual_tests/test_worlds_warnings.py script (may take a long time).
  7. If new robots/simulations are available, eventually improve the guided tour.
  8. while (issues are reported)
    1. Fix every remaining issues having the corresponding milestone (eventually postpone the resolution of minor and the non-regressions issues)
    2. Sort ChangeLog entries in order of importance.
    3. Create and merge a PR:
      • to regenerate the automatically generated files (doc and translation files). Type make clean and make update in the resources/translations folder.
      • to update the release date in the change log
      • [optional]: run scripts/new_version/new_version_file_headers.sh to make sure that all the WBT, WBO, and PROTO headers are up-to-date with the current version
      • [optional]: upload the webots/resources/web/wwi files to https://cyberbotics.com/wwi/R2021a/ (replace R2021a with the actual release).
    4. Create the package (cf. section below) and share it with testers.
    5. Perform the QA test preferably on a clean computer.

Create the package

Merge the release branch with master branch. Then, create a tag with the last commit on the Webots repository. Example:

cd ~/develop/webots
git checkout master
git pull origin master
git tag -a R2021a -m "Webots R2021a"
git push origin R2021a

GitHub Actions will then create the packages and upload them to a new release. Alternatively, you can create the package yourself:

cd ~/webots
make clean
make distrib -jX
# the package is generated into `~/distribution/`.

Snap and Docker Releases

The tag should be created on the webots-snap and webots-docker repositories too, this will create the corresponding packages.

Release tasks

  1. Upload all the installer files to a GitHub release (if not done by GitHub Actions).
  2. Update Cyberbotics's web site: webots_current_version.txt
  3. Publish the snap package on the release channel on snapcraft.io following these instructions.
  4. Update the debian repository on cyberbotics.com/debian from a Linux machine, check Cyberbotics passwords for the GPG passphrase, do not upload the big .deb file to cyberbotics.com/debian/binary-amd64
mkdir debian
cd debian
mkdir binary-amd64
cd binary-amd64
wget https://github.com/cyberbotics/webots/releases/download/R2021a/webots_2021a_amd64.deb
cd ..
apt-ftparchive packages binary-amd64 > binary-amd64/Packages
cd binary-amd64
gzip -c Packages > Packages.gz
bzip2 -c Packages > Packages.bz2
echo "Archive: stable" > Release
echo "Component: main" >> Release
echo "Origin: Cyberbotics Ltd." >> Release
echo "Label: Cyberbotics Ltd. Debian repository" >> Release
echo "Architecture: amd64" >> Release
echo "Codename: binary-amd64" >> Release
apt-ftparchive release . >> Release
rm -f Release.gpg
gpg -abs --batch --passphrase-file ~/.gnupg/passphrase.txt -o Release.gpg Release
gpg --clearsign --output  InRelease Release

Post-release tasks

  1. Switch the Github tag from draft to release.
  2. Close the corresponding Github milestone.
  3. Announce the release on Twitter/Discord/LinkedIn/HackerNews/Reddit/Email
  4. Announce the release privately to the users waiting for it.
  5. Update Wikipedia (at least the release): https://en.wikipedia.org/wiki/Webots
  6. Update the version on the webots repo.
  7. In master update the urls that are not updated by scripts/new_version/new_version.sh (commented files).
  8. Update the other repos:
  9. Update the online demos to work with the new version:

[major releases only]:

  1. Announce the release on the robotics-worldwide and euron-dist mailing lists.
  2. Announce the release on the blog.
  3. Announce the release on the newsletter.
Clone this wiki locally