fix(release): strip PGP signature block from release notes
Summary
v2.0.0 through v2.1.1 GitLab release descriptions leaked the
-----BEGIN PGP SIGNATURE----- block from the signed tag annotation.
Cause: `git tag -l --format='%(contents)'` returns the entire tag
annotation, signature and all. The signature is verifiable via
`git verify-tag` and is not load-bearing in human-readable release
notes — strip it from the description.
What changed
- `.gitlab-ci.yml` `create-release` job: pipe the tag contents through sed (delete BEGIN/END PGP block inclusive) and two awk passes to trim leading + trailing blank lines.
- `CONTRIBUTING.md`: new "Tag signing" subsection codifying the discipline. Annotated + signed tags are the contract; `tag.gpgSign=true` recommended for project-scoped gitconfig. The CI job handles the signature-strip so contributors don't need knowledge of it.
Followup (not in this MR)
Existing `v2.0.0`/`v2.0.1`/`v2.0.2`/`v2.1.0`/`v2.1.1` release descriptions still contain the PGP block; backfill via REST API `PUT /projects/:id/releases/:tag_name` with the stripped content. Single pass, scriptable.
Test plan
- MR pipeline green (lint + syntax)
- Verified locally: `git tag -l --format='%(contents)' v2.0.0` piped through the new strip filter produces 1871 bytes of clean message body (was 2181 with the PGP block).