Overview
Supersedes #4. Implement a complete, tag-triggered packaging pipeline that produces signed, downloadable installers for all supported platforms.
Platforms and formats
| Platform |
Format |
Arch |
| Ubuntu / Debian |
.deb (CPack DEB) |
amd64, arm64 |
| RHEL / Fedora |
.rpm (CPack RPM) |
x86_64, aarch64 |
| Any Linux distro |
AppImage (linuxdeploy) |
x86_64, aarch64 |
| Windows |
.exe (CPack NSIS) |
x64 |
| macOS |
.pkg (CPack productbuild) |
arm64 |
AUR (PKGBUILD) and Alpine (APKBUILD) are community-maintained follow-ons once GitHub Release artifacts exist as a stable source.
Trigger
push: tags: ['v*'] only — packaging never runs on staging or PRs.
Work items
1. CMakeLists.txt — CPack block
Add before include(CPack):
CPACK_PACKAGE_* metadata (name, vendor, version, contact, description, license)
CPACK_PACKAGING_INSTALL_PREFIX /usr for deb/rpm generators
CPACK_DEBIAN_PACKAGE_* (architecture, section, depends)
CPACK_RPM_PACKAGE_* (license, group)
CPACK_NSIS_* (install root, name)
CPACK_PRODUCTBUILD_* (identifier)
2. .github/workflows/package.yml — new workflow
Matrix:
- os: ubuntu-24.04, arch: amd64, generators: DEB;RPM
- os: ubuntu-24.04-arm, arch: arm64, generators: DEB;RPM
- os: ubuntu-24.04, arch: amd64, tool: appimage
- os: ubuntu-24.04-arm, arch: arm64, tool: appimage
- os: windows-latest, arch: x64, generators: NSIS
- os: macos-15, arch: arm64, generators: productbuild
Steps per cell: checkout → install LLVM (reuse ci.yml approach) → cmake Release → cpack / linuxdeploy → upload-artifact
3. Publish job
After all package jobs complete:
gh release create $TAG --generate-notes (idempotent)
- Upload all artifacts to the release
4. Download tracking
Add to README:

References
Overview
Supersedes #4. Implement a complete, tag-triggered packaging pipeline that produces signed, downloadable installers for all supported platforms.
Platforms and formats
.deb(CPack DEB)amd64,arm64.rpm(CPack RPM)x86_64,aarch64x86_64,aarch64.exe(CPack NSIS)x64.pkg(CPack productbuild)arm64AUR (
PKGBUILD) and Alpine (APKBUILD) are community-maintained follow-ons once GitHub Release artifacts exist as a stable source.Trigger
push: tags: ['v*']only — packaging never runs on staging or PRs.Work items
1. CMakeLists.txt — CPack block
Add before
include(CPack):CPACK_PACKAGE_*metadata (name, vendor, version, contact, description, license)CPACK_PACKAGING_INSTALL_PREFIX /usrfor deb/rpm generatorsCPACK_DEBIAN_PACKAGE_*(architecture, section, depends)CPACK_RPM_PACKAGE_*(license, group)CPACK_NSIS_*(install root, name)CPACK_PRODUCTBUILD_*(identifier)2.
.github/workflows/package.yml— new workflowMatrix:
Steps per cell: checkout → install LLVM (reuse ci.yml approach) → cmake Release → cpack / linuxdeploy → upload-artifact
3. Publish job
After all package jobs complete:
gh release create $TAG --generate-notes(idempotent)4. Download tracking
Add to README:
References