Optional if you want a signed release.
Use a dedicated key (or better: dedicated signing subkey) for release artifacts. Do not reuse one key for all unrelated systems.
sudo apt-get update
sudo apt-get install -y gnupggpg --full-generate-keyRecommended choices:
- Type: RSA and RSA
- Size: 4096
- Expiry: 1y (rotate regularly)
- UID: something like
OpenFileBot Release <releases@example.org>
List keys:
gpg --list-secret-keys --keyid-format=longExport public key (for users):
gpg --armor --export <KEY_ID> > openfilebot-release-public.ascExport private key for CI (store securely, never commit):
gpg --armor --export-secret-keys <KEY_ID> > openfilebot-release-private.asc
base64 -w0 openfilebot-release-private.asc > openfilebot-release-private.asc.b64export RELEASE_GPG_KEY_ID=<KEY_ID>
export RELEASE_GPG_PASSPHRASE='<PASSPHRASE>'
ant -lib /usr/share/java/ivy.jar clean resolve fatjar deb
for f in dist/*.jar dist/*.deb dist/*.changes; do
[ -f "$f" ] || continue
gpg --batch --yes --pinentry-mode loopback --passphrase "$RELEASE_GPG_PASSPHRASE" \
--local-user "$RELEASE_GPG_KEY_ID" --armor --detach-sign "$f"
doneVerify one file:
gpg --verify dist/<artifact>.asc dist/<artifact>- Rotate signing subkeys periodically.
- Keep a revocation certificate offline.
- Restrict who can access CI secrets and release workflows.