Skip to content

feat(packaging): publish workflows for AUR, COPR and the PPA - #33

Merged
vietanhdev merged 1 commit into
mainfrom
packaging/publish-workflows
Jul 20, 2026
Merged

feat(packaging): publish workflows for AUR, COPR and the PPA#33
vietanhdev merged 1 commit into
mainfrom
packaging/publish-workflows

Conversation

@vietanhdev

Copy link
Copy Markdown
Owner

Completes the packaging story — the manifests existed but nothing published them.

All three are workflow_dispatch only and default to dry_run: true. Each writes somewhere users install from, and one cannot be undone: a Launchpad upload can be superseded, never deleted. So publish-ppa prints every .changes file and attaches the source packages as an artifact before it would upload.

All three verify the git tag is pushed first. AUR's source and COPR's Source0 both point at the tag tarball, so a queued build 404s partway through if the tag is only local — cheap to check up front, slow to diagnose after.

Details that are easy to get wrong

AUR default branch is master A local main needs HEAD:master, or the push lands in a ref nobody installs from
updpkgsums before publish So a SKIP placeholder can never reach the AUR — and the workflow fails if one survives
makepkg refuses root Build runs as an unprivileged user
COPR needs --enable-net on %build fetches crates; mock disables networking. That setting belongs to the project, not the spec, so it doesn't travel with the repo — set on every publish rather than assumed
COPR chroots resolved, not hardcoded A fixed list goes stale every six months when Fedora branches

The Launchpad signing detail

The passphrase goes in gpg.conf, not a command-line argument, because dpkg-buildpackage invokes gpg itself with no passphrase argument.

The gpg-agent preset approach does not work: pinentry-mode loopback bypasses the agent entirely, so the preset is never consulted and signing fails headless with "Operation cancelled".

A gpg --clearsign self-test runs before any build, so a broken key fails in seconds rather than after a full source build.

Secrets needed

Workflow Secret Reversible?
AUR AUR_SSH_PRIVATE_KEY Yes
COPR COPR_API_TOKEN Yes
PPA LAUNCHPAD_GPG_PRIVATE_KEY, LAUNCHPAD_GPG_PASSPHRASE No

Docs cover one-time setup for each, including the Launchpad steps that block uploads until done — signing the Ubuntu Code of Conduct, and decrypting the token Launchpad emails to verify key ownership.

Untested end to end, necessarily: none of these can run without credentials, and the PPA one is irreversible so it shouldn't be tried casually. Every workflow parses as valid YAML and the dry-run paths are the default.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 19, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
thinkutils eee1e1e Jul 20 2026, 03:25 AM

Completes the packaging story: the manifests existed but nothing
published them.

All three are workflow_dispatch only and default to dry_run. That is not
caution for its own sake -- each writes to somewhere users install from,
and one of them cannot be undone. A Launchpad upload can be superseded,
never deleted, so publish-ppa prints every .changes file and attaches the
source packages as an artifact before it would upload anything.

All three verify the git tag is PUSHED before doing work. AUR's source
and COPR's Source0 both point at the tag tarball, so a queued build would
404 partway through if the tag were only local -- cheap to check up
front, slow to diagnose afterwards.

Details that are easy to get wrong and are handled here:

  AUR's default branch is master. A local main needs HEAD:master or the
  push lands in a ref nobody installs from.

  updpkgsums runs before publishing so a SKIP placeholder can never reach
  the AUR, and the workflow fails if one survives.

  makepkg refuses to run as root, so the build happens as an
  unprivileged user.

  COPR needs --enable-net on because %build fetches crates and mock
  disables builder networking. That setting belongs to the PROJECT, not
  the spec, so it does not travel with the repo -- it is set on every
  publish rather than assumed.

  COPR chroots are resolved to the newest three rather than hardcoded; a
  fixed list goes stale every six months when Fedora branches.

  The Launchpad passphrase goes in gpg.conf, not an argument, because
  dpkg-buildpackage invokes gpg itself with no passphrase argument. The
  gpg-agent preset approach does not work: pinentry-mode loopback
  bypasses the agent, so the preset is never consulted and signing fails
  headless. A clearsign self-test runs before any build, so a broken key
  fails in seconds rather than after a full source build.

Docs cover the one-time setup for each, including the Launchpad steps
that block uploads until done -- signing the Code of Conduct, and
decrypting the token Launchpad emails to verify key ownership.
@vietanhdev
vietanhdev force-pushed the packaging/publish-workflows branch from 57f64f0 to eee1e1e Compare July 20, 2026 03:23
@vietanhdev
vietanhdev merged commit 99c540b into main Jul 20, 2026
9 of 10 checks passed
@vietanhdev
vietanhdev deleted the packaging/publish-workflows branch July 20, 2026 03:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant