This repository contains CI workflows, reusable composite actions, and packaging templates to build and ship the Crypta Daemon (cryptad) across multiple platforms. It focuses on reproducible, per‑architecture builds on native GitHub runners, lean package payloads, and consistent artifact naming.
Targets covered:
- Snap (amd64, arm64)
- Flatpak (x86_64, aarch64)
- Linux packages via Gradle
jpackage(deb/rpm, amd64/arm64) - macOS DMG (arm64)
- Windows installers (amd64, arm64)
- Builds source from upstream
crypta-network/cryptad(checked out under./upstreamduring CI). - Resolves a version automatically (or uses your input), then builds the upstream distribution, repacks payloads per platform, renders manifests/templates, and produces per‑arch artifacts.
- A manager workflow orchestrates all platforms and drafts a release in the upstream repository.
You run these in GitHub Actions for this repo (no local tools required):
- Snap: Actions → “Build cryptad snap (amd64/arm64)” → Run workflow
- Flatpak: Actions → “Build cryptad flatpak (x86_64/aarch64)” → Run workflow
- Linux packages: Actions → “Build cryptad linux packages (deb/rpm)” → Run workflow
- macOS: Actions → “Build cryptad macOS dmg (arm64)” → Run workflow
- Windows: Actions → “Build cryptad windows installers (amd64/arm64)” → Run workflow
- All + draft release: Actions → “Build all cryptad packages + draft upstream release (v2)”
Inputs for every workflow:
version(optional): when set, upstream ref isrelease/<version>(e.g. 1.2.3)branch(defaultmain): used whenversionis empty
To allow the manager to draft a release in crypta-network/cryptad, add a repo
secret UPSTREAM_REPO_TOKEN (classic PAT with repo scope).
If inputs.version is empty, the composite action .github/actions/prepare-cryptad resolves it in this order:
- Gradle task
printVersion(if present) ./gradlew -q properties→version:(if notunspecified)git describe --tags(leadingvstripped)
The resolved value (without leading v) is used everywhere; packaged versions
for Snap/Flatpak are prefixed with v per platform conventions.
.github/workflows/build-cryptad-snap.yml— Snap (amd64/arm64) on native runners.github/workflows/build-cryptad-flatpak.yml— Flatpak (x86_64/aarch64).github/workflows/build-cryptad-linux-packages.yml— Gradlejpackage(deb/rpm).github/workflows/build-cryptad-macos.yml— macOS DMG (arm64, tests disabled).github/workflows/build-cryptad-windows.yml— Windows installers (amd64/arm64).github/workflows/release-cryptad-manager.yml— Orchestrates all + drafts upstream release.github/actions/prepare-cryptad/— Checkout upstream, JDK 21, resolve version, Gradle build, expose tarball path.github/actions/repack-payload/— Extract upstream tarball and re‑tar into platformlocal/dir.github/actions/render-desktop/— Render shared desktop template (Exec/Iconsubstitution).github/actions/render-manifest/— Generic token substitution for templatessnap/snapcraft.yaml.template— Snapcraft (core24) templatesnap/snapshots.yaml— Snap snapshot exclusion list (installed atmeta/snapshots.yaml)flatpak/cryptad.yaml.template— Flatpak manifest (Freedesktop 24.08) templateflatpak/network.crypta.cryptad.metainfo.xml.template— AppStream templatedesktop/cryptad.desktop.template— Shared desktop entry for Snap/Flatpakdesktop/icons/cryptad.pnganddesktop/icons/cryptad-512.png— Shared icons (Snap uses PNG; Flatpak installs 512×512).gitignore— Ignores generated files, build dirs, rendered manifests
Template: snap/snapcraft.yaml.template
base: core24,grade: stable,confinement: strict,license: GPL-3.0- Per‑arch platforms (native builds):
- amd64:
build-on [amd64],build-for [amd64] - arm64:
build-on [arm64],build-for [arm64]
- amd64:
- Part
cryptad(plugin:dump) sourcessnap/local/cryptad-jlink-v__VERSION__.tar.gzand pulls a minimal X/desktop stack (libx11,libxext6,libfontconfig1,fonts-dejavu-core, etc.) plusbsdutils(bound as/usr/bin/script). prime:trims docs/man/locales for size.override-prime:- Ensures
bin/cryptad,bin/cryptad-launcher, wrappers,*/bin/java, and*/lib/jspawnhelperare 0755 - Removes macOS binaries
- Ships
snap/gui/cryptad.desktopandsnap/gui/cryptad.png(Snapcraft includes them undermeta/gui/automatically) - Trims the opposite Linux wrapper based on
CRAFT_TARGET_ARCH
- Ensures
apps.cryptadandapps.cryptad-launcherexport GUI/non‑GUI entries with GNOME extension and appropriate plugs;CRYPTAD_ALLOW_ROOT=1is set.- The Snap workflow builds on host (no LXD) with
SNAPCRAFT_BUILD_ENVIRONMENT=hostandsnapcraft pack --platform <arch>.
Artifacts:
- GitHub artifact names:
cryptad-snap-<version>-amd64,cryptad-snap-<version>-arm64 - File names:
cryptad-v<version>-<arch>.snap
Template: flatpak/cryptad.yaml.template
id: network.crypta.cryptad,branch: v__VERSION__- Runtime/SDK:
org.freedesktop.Platform/org.freedesktop.Sdk(24.08) - GUI command:
cryptad-launcher;finish-argsinclude network, wayland/x11, IPC/DRI, andCRYPTAD_ALLOW_ROOT=1 - Unpacks
cryptad-jlink-v__VERSION__.tar.gzto/appwith--strip-components=1 - Post‑install fixes mirror Snap (chmod, remove macOS files, drop non‑target wrapper)
- Installs desktop file and 512×512 hicolor icon, plus AppStream metadata
The workflow installs Flatpak tooling, adds Flathub to the user scope, installs
freedesktop 24.08 runtime+SDK, builds, exports branch v<version>, and bundles.
Artifacts:
- GitHub artifact names:
cryptad-flatpak-<version>-amd64,cryptad-flatpak-<version>-arm64 - File names:
cryptad-v<version>-amd64.flatpak,cryptad-v<version>-arm64.flatpak
Workflow: .github/workflows/build-cryptad-linux-packages.yml
- Uses Gradle
jpackagetasks if available (jpackageDeb/jpackageRpmor variants); falls back to common task names when not explicit. - Locates
.deb/.rpmoutputs (prefersbuild/jpackage), normalizes names, and uploads.
Artifacts (per arch):
cryptad-v<version>-<arch>.debcryptad-v<version>-<arch>.rpm
Workflow: .github/workflows/build-cryptad-macos.yml
- Builds on
macos-latestarm64 with tests disabled (run_tests=false,-x test) to avoid memory issues on GitHub macOS runners. - Uploads discovered
.dmgfiles; the manager ensures a normalized namecryptad-v<version>-arm64.dmgin the final release set.
Workflow: .github/workflows/build-cryptad-windows.yml
- Resolves the upstream ref/version, then calls the reusable workflow at
crypta-network/wininstaller-innosetupto produce amd64 and arm64 installers. - Collects/renames outputs to standardized names and re‑uploads as artifacts.
Artifacts:
CryptaInstaller-v<version>-amd64.exeCryptaInstaller-v<version>-arm64.exe
Workflow: .github/workflows/release-cryptad-manager.yml
- Calls Snap, Flatpak, Linux, macOS, and Windows workflows via
workflow_call - Resolves a final
version(prefers input; otherwise first child output) - Downloads all artifacts, filters to standardized names, generates SHA256SUMS,
and creates a draft release in
crypta-network/cryptad(requiresUPSTREAM_REPO_TOKENsecret withreposcope)
Release payload includes: .snap, .flatpak, .deb, .rpm, .dmg, Windows
installers, and SHA256SUMS.txt.
A shared template desktop/cryptad.desktop.template is rendered differently per
platform via the render-desktop composite:
- Snap →
Exec=cryptad.cryptad-launcher,Icon=${SNAP}/meta/gui/cryptad.png - Flatpak →
Exec=cryptad-launcher,Icon=network.crypta.cryptad
Icons:
- Snap reuses
desktop/icons/cryptad.pngatmeta/gui/cryptad.png - Flatpak installs
desktop/icons/cryptad-512.pngto hicolor (512×512 required)
- Native per‑arch builds are more reliable for this project than LXD cross‑builds (avoids JRE arch mismatch and LXD network/permission pitfalls).
- Trimming platform‑specific binaries happens in a single place:
- Snap:
override-prime - Flatpak: post‑install commands
- Snap:
.gitignoreexcludes all generated/temporary content undersnap/andflatpak/that is produced in CI.
- Flatpak: ensure Flathub remote is added in the user scope and freedesktop 24.08 runtime+SDK are installed before building (the workflow does this).
- Snap: ensure
SNAPCRAFT_BUILD_ENVIRONMENT=hostis set when building on CI. - If upstream lacks
printVersionand a project version in Gradle properties, CI falls back togit describe.
This repository is licensed under GPL-3.0 (see LICENSE). The upstream project
crypta-network/cryptad is also licensed under GPL-3.0.