== Release instructions
* Create a release branch:

  $ git checkout -b release/x.y.z

* Update the version in pyproject.toml and fido/__init__.py and make sure the
  NEWS file has an entry for it, and the correct release date.
* Commit the changes, and push the new branch.

  $ git push -u origin release/x.y.z

* Wait for CI to complete, and make sure nothing fails.

* Create a signed tag using the version number as name:

  $ git tag -s -m x.y.z x.y.z

* Build the release:

  $ poetry build

* Sign the release:

  $ gpg --detach-sign -a dist/fido2-x.y.z.tar.gz
  $ gpg --detach-sign -a dist/fido2-x.y.z-py3-none-any.whl

* Upload the release to PyPI:

  $ poetry publish

* Add the .tar.gz, the .whl and .sig files to a new Github release, using the
  latest NEWS entry as description.

* Merge and delete the release branch, and push the tag:

  $ git checkout main
  $ git merge --ff release/x.y.z
  $ git branch -d release/x.y.z
  $ git push && git push --tags
  $ git push origin :release/x.y.z

* Bump the version number by incrementing the PATCH version and appending -dev.0
  in pyproject.toml and fido2/__init__.py and add a new entry (unreleased) to the
  NEWS file.

  # pyproject.toml:
  version = "x.y.q-dev.0"

  # fido2/__init__.py:
  __version__ = 'x.y.q-dev.0'

* Commit and push the change:

  $ git commit -a -m "Bump version." && git push
