Skip to content

OSS-readiness: install surface, CI gates, checksums, and package channels - #4

Merged
4nrry merged 3 commits into
mainfrom
feat/oss-release-hardening
Jun 30, 2026
Merged

4nrry merged 3 commits into
mainfrom
feat/oss-release-hardening

Conversation

@4nrry

@4nrry 4nrry commented Jun 22, 2026

Copy link
Copy Markdown
Owner

Brings OpenCherry up to the "bare-minimum OSS" pillars (install surface, enforced CI, changelog-driven releases) without touching any Rust source — all changes are YAML / shell / Markdown / TOML / Ruby.

What's in here

CI quality gates (ci.yml)

  • New fmt job (cargo fmt --check), clippy -D warnings folded into the rust job (after the frontend build, with components: clippy), and an audit job via taiki-e/install-action + cargo audit.

CHANGELOG + checksums + release notes

  • New CHANGELOG.md (Keep a Changelog).
  • A .sha256 is generated and attached for every artifact on all three platforms.
  • The Linux workflow uniquely sets the GitHub Release body from the changelog (awk extract); macOS/Windows attach files only — race-safe because action-gh-release@v2 preserves an unset body.

AppImage + one-command install

  • Linux release now builds .deb, .AppImage, and .rpm.
  • New scripts/install.sh (curl … | sh: GitHub-API asset resolution + SHA-256 verify + .desktop integration + FUSE warning), scripts/build-appimage.sh, and a just build-appimage recipe.
  • README gains a quick-install section; stale capitalized OpenCherry_* artifact names fixed in the README and the website install guide to match the current lowercase productName.

Package-manager channels (dormant, gated)

  • AUR (packaging/aur/PKGBUILD, opencherry-bin), Homebrew Cask (packaging/homebrew/opencherry.rb), and winget (vedantmgoyal9/winget-releaser) publish jobs.
  • Each is gated behind a repo variable (PUBLISH_AUR / PUBLISH_HOMEBREW / PUBLISH_WINGET) and its secret, so they never run or break a release until the maintainer wires them up. Setup is documented under packaging/*/README.md.

Verification

  • cargo fmt, clippy -D warnings, and cargo audit run green locally (audit exits 0; the 19 findings are non-fatal unmaintained/unsound warnings, including the GTK3 bindings Tauri needs on Linux).
  • All four workflows pass actionlint and parse as YAML; sh -n / bash -n clean; the changelog awk extraction was tested.
  • A 5-agent adversarial review pass caught and fixed real doc bugs (stale casing, an AppImage arch token, and a README aarch64-vs-x86_64 mismatch).

Maintainer follow-ups (after merge)

  • Once this lands on main, the one-command install (curl … | sh) and just build-appimage go live (the install URL pins main).
  • AUR / Homebrew / winget stay off until you create the external repos + secrets and flip the PUBLISH_* variables (see packaging/*/README.md). winget additionally needs a manual first submission via wingetcreate.
  • Confirm the macOS .app / .dmg names once against a real Mac build before enabling PUBLISH_HOMEBREW.
  • FYI: cargo audit flags two git2 0.20.4 unsound advisories (RUSTSEC-2026-0183/0184) on a direct dep — non-blocking; bump when convenient.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ENCpQgGM7BbXt3ah6Bjhci

4nrry and others added 3 commits June 22, 2026 16:36
Bring OpenCherry up to the "bare-minimum OSS" pillars:

- CI: enforce `cargo fmt --check`, `clippy -D warnings`, and `cargo audit`
  as dedicated jobs (previously only in the local `just check` recipe).
- Releases: add CHANGELOG.md (Keep a Changelog), attach a SHA-256 checksum
  to every artifact across all three platforms, and drive the GitHub Release
  body from the changelog (the Linux workflow uniquely owns the body, which
  is race-safe since action-gh-release@v2 preserves an unset body).
- Linux release now builds .deb, .AppImage, and .rpm.
- One-command install: scripts/install.sh (curl | sh, GitHub-API asset
  resolution + SHA-256 verify + desktop integration), scripts/build-appimage.sh,
  and a `just build-appimage` recipe.
- AUR (opencherry-bin) and Homebrew cask packaging, authored but dormant
  behind the PUBLISH_AUR / PUBLISH_HOMEBREW repo variables and their secrets;
  maintainer setup documented under packaging/.
- Fix stale capitalized OpenCherry_* artifact names in the README and the
  website install guide to match the current lowercase productName.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ENCpQgGM7BbXt3ah6Bjhci
Mirror the AUR/Homebrew pattern for the Windows Package Manager:

- publish-winget job in release-windows.yml using vedantmgoyal9/winget-releaser,
  gated behind vars.PUBLISH_WINGET and the WINGET_TOKEN secret (tag-only,
  needs build-windows so the .exe is on the release).
- packaging/winget/README.md documents the one-time setup: the manual first
  submission via wingetcreate, the microsoft/winget-pkgs fork, the classic PAT,
  and the PUBLISH_WINGET variable.

Dormant until configured; never breaks an unconfigured release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ENCpQgGM7BbXt3ah6Bjhci
The manually-submitted winget PR (microsoft/winget-pkgs#395223) registers
the package as 4nrry.OpenCherryDesktop, but the dormant publish-winget job
and packaging docs targeted 4nrry.OpenCherry. On the first automated publish
this would have created a divergent package that never updates the manually
registered one. Point the workflow identifier and README at the same id.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YSHVdqh21CJbX4kixanSzH
@4nrry
4nrry merged commit 8ed45a8 into main Jun 30, 2026
7 checks passed
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