Skip to content

czdev: publish/unpublish via Release manifests (no Git LFS)#4

Merged
eggfly merged 2 commits into
mainfrom
czdev-publish-via-release
Jun 30, 2026
Merged

czdev: publish/unpublish via Release manifests (no Git LFS)#4
eggfly merged 2 commits into
mainfrom
czdev-publish-via-release

Conversation

@eggfly

@eggfly eggfly commented Jun 30, 2026

Copy link
Copy Markdown
Collaborator

Why

CardputerZero/packages is moving .deb distribution off Git LFS (the org LFS budget is exhausted and hard-blocks pushes). See CardputerZero/packages#51. czdev must stop pushing .deb into the PR via LFS.

New flow

For any third-party developer (normal GitHub login, no write access to the packages repo):

  1. czdev publish uploads the .deb as an asset on a czdev-buffer Release in the developer's own fork of packages. This uses the developer's free Release storage + unlimited download bandwidth — the upstream project stores nothing until approval.
  2. The PR carries only meta.json, screenshots/icon, and a <pkg>_<ver>_<arch>.deb.release.json manifest (url + sha256 + size). No .deb, no LFS.
  3. CI verifies the sha256 + dpkg checks (untrusted pull_request stage). On merge it promotes the binary from the fork release into the official apt-pool release.

Maintainers (write access) upload to the buffer release on the official repo; the promote step is identical.

Changes

  • publish.py: upload .deb to the buffer release + emit manifest; commit metadata only; size cap raised to the 2 GiB release-asset limit; drop git-lfs requirement.
  • unpublish.py: read the manifest, download the .deb from its URL to verify Maintainer, remove the manifest.
  • github_client.py: ensure_release, upload_release_asset, find_release_asset, delete_release_asset.

Notes

Test plan

  • czdev publish from a non-maintainer account → buffer release created in the fork, PR has manifest only.
  • czdev publish from a maintainer → buffer release on the official repo.
  • czdev unpublish → ownership verified via manifest URL, manifest removed.

Made with Cursor

The packages repo no longer stores .deb in git/LFS (LFS budget exhausted).
Adapt the publish flow to the new manifest model:

- publish: upload the .deb to a "czdev-buffer" Release on the push target
  (the contributor's own fork for non-maintainers — their free Release quota),
  then open a PR carrying only meta.json/screenshots/icon and a
  <pkg>_<ver>_<arch>.deb.release.json manifest (url + sha256 + size). No .deb,
  no LFS. Raises the size cap to the 2 GiB release-asset limit.
- unpublish: read the manifest, download the .deb from its url to verify the
  Maintainer, and remove the manifest from git.
- github_client: add ensure_release / upload_release_asset / find/delete asset.
- Drop the git-lfs requirement.

Co-authored-by: Cursor <cursoragent@cursor.com>
czdev was rewritten from Rust to Python and the crates/czdev Rust crate was
removed, so 'cargo run -p czdev' (and the crates/czdev path filter) no longer
resolve — this workflow has failed on every main push and PR since then.
Remove it; the Python czdev has no Rust/emulator smoke harness.

Co-authored-by: Cursor <cursoragent@cursor.com>
@eggfly eggfly merged commit fb4a62c into main Jun 30, 2026
3 checks passed
@eggfly eggfly deleted the czdev-publish-via-release branch June 30, 2026 11:38
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