Skip to content

Release a .deb and an .rpm for x64 and arm64 alongside macOS and Windows (#356) - #362

Merged
shovon merged 1 commit into
mainfrom
linux-release
Nov 10, 2026
Merged

shovon merged 1 commit into
mainfrom
linux-release

Conversation

@shovon

@shovon shovon commented Nov 10, 2026

Copy link
Copy Markdown
Owner

Closes #356. A pushed tag now also puts a .deb and an .rpm for x64 and arm64 on the draft Release. A Debian, Ubuntu or Fedora user downloads one, installs it with apt or dnf, and Pb Notes is in their app launcher.

The release workflow

  • A linux job builds on a native runner per CPU: ubuntu-24.04 for x64 and ubuntu-24.04-arm for arm64. Both could cross-build with --arch, as the Windows job does, but Flatpak and Snap (Linux release: Flatpak bundle for x64 and arm64 #358, Linux release: Snap for x64 and arm64 #359) can't, and a native runner can install and start what it built. Both are pinned to 24.04, whose AppArmor limits on sandboxes are the ones Ubuntu users have.
  • The files keep each distro's own names, which already carry the CPU: pbnotes_<version>_amd64.deb, pbnotes-<version>-1.x86_64.rpm, and their arm64 twins. They are uploaded as pbnotes-linux-x64 and pbnotes-linux-arm64, and the release job now waits for both.
  • Each package is smoke-tested before it is uploaded. It is installed the way a user would install it, then started on a virtual screen:
    • The .deb with apt install on the runner.
    • The .rpm with dnf install in a Fedora container, as a user who isn't root, since Electron won't run as root without --no-sandbox. The .rpm's chrome-sandbox isn't setuid (the .deb's is), so its sandbox needs unprivileged user namespaces. Fedora allows those; the runner's Ubuntu kernel and Docker's defaults don't, so the job lifts both for the container.
  • app/scripts/smoke-launch.sh does the starting: it runs the app on Xvfb with a throwaway HOME, and fails if no Pb Notes window shows within 60 seconds or the app exits within 5 seconds of showing it. The AppImage, Flatpak and Snap jobs can call it the same way.

The .desktop entry

Both makers wrote Categories=GNOME;GTK;Utility; and the app's own name again as GenericName. It is now filed under Office as "Notes", and both packages list the repo as their homepage.

README

Install gains a Linux section: which file suits which distribution and processor (with uname -m to look it up), how to install with apt, dnf or zypper, that neither package updates itself yet, and how to uninstall.

Nothing to change in the app

  • The Squirrel code in index.ts only runs on win32.
  • openWriter's boot ID already reads /proc/sys/kernel/random/boot_id on Linux.

Testing

  • CI, started by hand on this branch (run): all four packages built, installed and showed their window. The macOS and Windows jobs passed as before, and release was skipped, as it is for a run started by hand.
  • On Ubuntu, with the .deb from that run: installed with apt, and the app works.
  • On Arch Linux ARM (Omarchy), unpackaged: npm run package and starting the app under Wayland: it ran without crashing.
  • Not tried by hand: the .rpm outside CI.

🤖 Generated with Claude Code

…ows (#356)

A linux job builds both packages on a native runner per CPU, installs
each the way a user would (the .rpm in a Fedora container), and starts it
on a virtual screen before handing the files to the release job. The
.desktop entry is filed under Office as "Notes" rather than the makers'
GNOME;GTK;Utility.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shovon
shovon merged commit aa9f497 into main Nov 10, 2026
6 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.

Linux release job, with Deb and RPM packages for x64 and arm64

1 participant