-
-
Notifications
You must be signed in to change notification settings - Fork 1
Releasing
This page documents how to cut a release of Xepher and publish distribution packages.
Xepher uses semantic versioning (MAJOR.MINOR.PATCH):
| Bump | When |
|---|---|
PATCH |
Bug fixes, performance improvements, no new user-visible features |
MINOR |
New user-visible features or significant behaviour changes |
MAJOR |
Breaking changes or major architectural rewrites |
Current release: v0.8.1
- Ensure all commits are pushed and
make DEBUG=1passes all 123 doctests. - Bump the version in the three packaging files (all must match):
-
packaging/arch/PKGBUILD→pkgver=X.Y.Z(andpackaging/arch/stable/PKGBUILDif present) -
packaging/rpm/weechat-xmpp.spec→Version: X.Y.Z+ new%changelogentry -
packaging/debian/changelog→ new stanza at the top
-
- Commit the bump:
git add packaging/arch/PKGBUILD packaging/arch/stable/PKGBUILD \ packaging/rpm/weechat-xmpp.spec packaging/debian/changelog git commit -m "chore: bump packaging to vX.Y.Z" - Tag the release:
git tag -a vX.Y.Z -m "vX.Y.Z — <one-line summary>" - Push commits and tag:
git push && git push origin vX.Y.Z -
GitHub Actions builds packages automatically (
.github/workflows/packages.yml). Monitor with:gh run watch --repo ekollof/xepher
- Edit the release on GitHub if needed (title, notes):
gh release edit vX.Y.Z --title "vX.Y.Z — <summary>" --notes "..."
Pushing a v* tag triggers the Packages workflow. It runs
packaging/github-build.sh <version> on ubuntu-latest, building all five
distros sequentially in fresh Docker containers:
| Distro | Docker image | Script |
|---|---|---|
| Debian | debian:stable |
build-deb-inside.sh |
| Fedora | fedora:latest |
build-rpm-inside.sh |
| Arch | archlinux:latest |
docker-arch-wrapper.sh → build-arch-inside.sh
|
| Alpine | alpine:edge |
build-alpine-inside.sh |
| Void | ghcr.io/void-linux/void-linux:latest-full-x86_64 |
build-void-inside.sh |
Artifacts are attached to the GitHub Release automatically via
softprops/action-gh-release.
All packaging paths pass PACKAGE_BUILD=1 to make, which skips the
dev-only .source ELF section embed. Without this, tarball builds lacking
.git can produce gigabyte-sized RPM/APK packages.
Before tagging, you can run the same script CI uses (requires Docker):
bash packaging/github-build.sh X.Y.Z # all distros
bash packaging/github-build.sh X.Y.Z --fedora # single distroOutput: packaging/build/
| Format | File pattern |
|---|---|
| Debian/Ubuntu |
xepher_X.Y.Z-1_amd64.deb (+ xepher-dbgsym_…) |
| Fedora RPM | xepher-X.Y.Z-1.fcNN.x86_64.rpm |
| Arch Linux |
xepher-X.Y.Z-1-x86_64.pkg.tar.zst (+ -debug-…) |
| Void Linux | xepher-X.Y.Z_1.x86_64.xbps |
| Alpine | xepher-X.Y.Z-r0.apk |
For faster iterative local builds, packaging/distrobox-build.sh reuses
persistent containers and stamps installed deps under /opt/xepher-build/:
bash packaging/distrobox-build.sh X.Y.Z
bash packaging/distrobox-build.sh X.Y.Z --debianPrerequisites: distrobox + docker or podman.
If CI is unavailable, build locally then create the release manually:
gh release create vX.Y.Z \
--title "vX.Y.Z — <summary>" \
--notes "..." \
--target master \
packaging/build/xepher_X.Y.Z-1_amd64.deb \
packaging/build/xepher-dbgsym_X.Y.Z-1_amd64.deb \
packaging/build/xepher-X.Y.Z-1.fcNN.x86_64.rpm \
packaging/build/xepher-X.Y.Z-1-x86_64.pkg.tar.zst \
packaging/build/xepher-debug-X.Y.Z-1-x86_64.pkg.tar.zst \
packaging/build/xepher-X.Y.Z_1.x86_64.xbps \
packaging/build/xepher-X.Y.Z-r0.apkmaster is protected on GitHub — force pushes and branch deletion are blocked.
Direct pushes from the maintainer are still allowed.