Canonical release workflow
KLookup has a single CI/CD workflow at .github/workflows/ci.yml. It validates PRs, main, and monthly scheduled checks, and publishes developer documentation from main.
Release readiness: Issue #73 tracks outstanding public-release checks, including maintainer sign-off, secrets/history and asset provenance audits, production script credentials, and live Plasma verification. Do not initiate a public release until these checks are approved. Merely enabling a release mode is not release approval.
Manual actions
Open Actions → CI/CD → Run workflow, select branch main, and choose a mode:
| Mode | Effect |
|---|---|
build |
Validate sources, docs, licensing, normal tests and ASan/UBSan; no tag or software release |
monthly-maintenance |
Run the same verification manually (also performed on the monthly schedule) |
release-patch |
Prepare and publish the next patch version |
release-minor |
Prepare and publish the next minor version |
release-major |
Prepare and publish the next major version |
release-test |
Prepare the next test prerelease |
release-rc |
Prepare the next release candidate |
release-alpha |
Prepare the next alpha prerelease |
publish-tag |
Revalidate and publish an existing v* tag, not a new version |
Release modes use arran4/git-tag-inc for version arithmetic. The optional release_version_override applies to release-* modes only. It selects an explicit vMAJOR.MINOR.PATCH (optionally with a prerelease suffix) rather than calculating a version. The workflow never moves a pre-existing tag. To recover a failed publication, dispatch publish-tag from the intended tag, rather than rerunning auto-increment and potentially selecting a different version.
Release gates and publication
- The workflow runs normal and sanitizer CTest, REUSE, Actionlint and documentation validation.
- The normal CMake build is installed into a staging prefix and archived as
klookup-linux-amd64.tar.gzwith a checksum file. This is a Linux installation-layout archive requiring installed Qt6/KF6 dependencies, not an AppImage or standalone portable binary. - A separate job downloads those exact artifacts, verifies their checksum, and inspects the staged executables, provider assets and ELF format.
- A release-quality gate requires the complete validation aggregate and artifact-smoke job to succeed.
- For
release-*modes, a serialized job verifies the validated commit is stillorigin/main, calculates the tag, checks for an existing exact-SHA tag, rechecksmainimmediately before pushing a new immutable tag, then dispatches the same workflow against that tag. - On tag-context validation, a single publisher verifies the tag and ancestry, then creates the GitHub Release or resumes an existing exact-target release by uploading the validated artifacts. Prerelease tags are marked as prereleases.
GitHub token access defaults to read-only. Only tag preparation has contents:write / actions:write, and the publisher has contents:write. Release actions must be permitted by repository GitHub Actions settings. Publication does not use a second release action, a release-event listener, or an independent rebuild.
Recovery and limitations
- A failure before tagging does not create a release. Review the failing test or build instead of manually tagging the old commit.
- A failure after the tag exists is recovered from that exact tag with
publish-tag. - An existing release that targets a different commit is rejected; the workflow never silently moves or replaces release identity.
- External
v*tag pushes enter the same validation/publisher path, provided the tagged commit is onmain. - The packaged archives are not an endorsement of installation on arbitrary Linux distributions. Release verification still requires a live supported KDE Plasma installation.
The workflow supports only Linux amd64 release candidates. Other operating systems and packaging formats need implementation and testing before being added.