source: handbook ch. 46, 47; live .github/workflows/build.yaml in the parch-iso-* repositories
Release automation
Every edition repository ships a GitHub Actions workflow, .github/workflows/build.yaml, that builds the ISO and ships the artifacts. You do not run CI by pushing: the pipeline is release-driven, which keeps the artifact set tied to a named, downloadable release.
The shape of the pipeline
The workflow triggers when a release is published in the edition repository:
name: Build ISO
on:
release:
types: [published]
What a run does, in order:
- Check out the profile repository.
- Install the build toolchain in an Arch-based environment, the same dependency set the local
build.shinstalls (git, wget, github-cli, p7zip, reflector, rsync, and Parch'sarchiso-99-1on the desktop editions). - Build with
mkarchiso -v iso/(or the repository'sbuild.sh). - Package the output, the branch differs by release type, described next.
- Publish the artifacts.
Stable releases are attached to the GitHub release via a release action (softprops/action-gh-release), so the exact binaries the CI built are what users download.
Two channels: test and stable
The pipeline's behavior splits on whether the release was marked pre-release in GitHub.
| Pre-release (test channel) | Stable release | |
|---|---|---|
| Trigger | Release published with "pre-release" checked | Release published normally |
| Artifact | One ISO file named Parchlinux-test-latest.iso | The ISO plus 7z multi-volume archive |
| Destination | Uploaded over SSH to mirror.parchlinux.com:/srv/http/test/ | Attached to the GitHub release |
| Availability | https://mirror.parchlinux.com/test/, always the newest test build, overwritten each run | Permanent, versioned release assets |
| Checksums | The test channel serves the single rolling file | md5sums.txt alongside the archive |
The test channel exists so integration testing happens on real downloads: testers grab Parchlinux-test-latest.iso from the mirror, boot real hardware, and report against the pre-release, long before anything is stamped stable.
Cutting a release
Releasing an edition is a two-step rhythm, test first, stable second:
Land and validate the changes
Merge the profile changes (package list, airootfs, branding) and do a local build with
sudo ./build.sh, then run the test plan from Testing an ISO. CI does not catch what a QEMU boot catches.Publish a pre-release
In the edition repository, create a release marked pre-release. The pipeline builds and overwrites
Parchlinux-test-latest.isoon the mirror's test channel.Verify the test build
Download
https://mirror.parchlinux.com/test/Parchlinux-test-latest.iso, confirm it boots on both firmwares, and run an installer test to disk. This file is the integration point between the profile repo and the mirror.Publish the stable release
Uncheck pre-release (create the final release). CI builds again and attaches the 7z volumes and
md5sums.txtto the release. Verify the assets appear on the release page before announcing.
Verifying a downloaded ISO
As a packager you verify both your own builds and CI's:
$ md5sum -c md5sums.txt
Parchlinux-x86_64.iso: OK
$ 7z x Parchlinux-x86_64.iso.7z.001 # reassembles the volumes into the ISO
$ md5sum Parchlinux-x86_64.iso # must match md5sums.txt againmd5sums.txtlists the ISO's MD5;md5sum -cexitsOKon match. Any mismatch means a corrupted or incomplete download, re-download the failing volume.- Reassembling needs every volume in one directory; 7z stops with an error if
.002is missing. - Local template builds produce the identical
md5sums.txtformat, so the same commands verify CI output and your own.
ISO signing, proposed
The proposal, in three steps:
- Sign release artifacts. CI signs the ISO (detached signature) with a project key and publishes the signature and the public key alongside
md5sums.txt. - Consume signatures in pacman. The profiles already ship
iso/public.keyin every edition, andpacman.confalready has aSigLevelslot per repository, the path to signed packages is flipping[world]fromSigLevel = Neverto required signatures once the repository side is in place (see Profile structure). - Document verification. Users verify with gpg instead of (or in addition to) md5, closing the authenticity gap flagged above.
Until that lands, the honest verification story is: MD5 for integrity, the GitHub release page for provenance.
Expected results
- Publishing a pre-release replaces
Parchlinux-test-latest.isoon the test channel within the CI run's duration. - Publishing a stable release attaches
*.7z.001/002/…andmd5sums.txtto the GitHub release. md5sum -c md5sums.txtpasses on freshly downloaded artifacts.
Troubleshooting
- CI ran but no test ISO appeared on the mirror, the SSH upload step failed: check the Actions log for the deployment step and the configured secret; the build itself usually succeeded (see the artifacts of the run).
- Release published, no artifacts attached, the build or packaging step failed before the release action ran; open the workflow run and read the first failing step. A
target not foundpackage error here is fixed inpackages.x86_64, exactly as locally (see Package lists). 7z xfails with "cannot find archive", you are missing a volume; the release must be downloaded completely.- Checksum mismatch on a re-downloaded file, compare against a different network/mirror; persistent mismatch is a release-page issue worth an issue report, not a local fix.
Related pages
- Testing an ISO, the pre-release verification plan.
- Build your first ISO, the local build CI mirrors.
- Release management, repository- and distribution-level release coordination.