Skip to content

packaging, add unified installer pipeline: deb/rpm/AppImage/NSIS/productbuild #19

@steven-varga

Description

@steven-varga

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:

![Downloads](https://img.shields.io/github/downloads/vargaconsulting/h5cpp-compiler/total)

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions