Releasing concrexit is quite easy if you follow the right steps. You should be careful, releasing a broken version is not something we want. It happened, that's why we have this guide.
Creating a milestone
We start by creating a milestone with your release version as name. It's actually best to do this after the last release. Now that you have a milestone you can start adding issues and merge requests to it. Add the appropriate tags (especially feature, bug and technical change) to the merge requests so that you can easily generate a changelog later.
Creating a release branch
After all merge requests are merged into the master branch you can create a new branch. Name it release/<version> and push it to the server.
Generating a changelog
Use the code from this snippet to generate a changelog based on the merge requests and tags added to them. Change the milestone description to the changelog.
Since we don't want the release to break the website you need to test every merge request for bugs. You can do this locally, but it would be wise to create a docker build and deploy it to staging.thalia.nu to test the migrations. Use the milestone to check every merge request. There are docker builds of each commit that are built by the CI so you don't have to do this yourself.
The release can be tagged once you've checked everything and you are sure the release will be a success. Before you do this replace the checkboxes in the changelog by a regular list. Checkout the release branch and run git tag -a v<version> or use https://gitlab.science.ru.nl/thalia/concrexit/-/tags/new.
After tagging you have to wait for the docker production build to succeed, when it is done it can be deployed by someone with server access.