Add Linux AppImage build target, app icon, and release workflow #1

Merged
jknapp merged 2 commits from feature/linux-appimage-build into main 2026-08-29 00:58:42 +00:00
Owner

Adds Linux packaging, since the build config previously only had a Windows target.

Changes

  • linux build target in desktop-client/package.json producing an AppImage.
  • build/icon.png — 512x512, generated to match the green of the existing tray icon. Without it electron-builder ships the stock Electron icon.
  • .gitea/workflows/release.yml — builds the AppImage on a v* tag, runs tests first, and attaches the artifact to a Gitea release via the API.

Verification

The packaged binary was run, not just built: the embedded server came up on 9095 and served the overlay with a 200 (6937 bytes), confirming extraResources resolves correctly from process.resourcesPath in a packaged build. All 8 unit tests pass.

The AppImage itself could not be mounted in the build container (no FUSE), so the extracted payload was tested instead. Loading music.youtube.com failed there for lack of network egress — environmental, not a packaging fault.

Before the workflow can run

It is inert until two things exist:

  1. A registered act_runner — the repo currently has no runners at repo, org, or user scope, so jobs would queue indefinitely.
  2. A RELEASE_TOKEN secret with permission to create releases.

🤖 Generated with Claude Code

Adds Linux packaging, since the build config previously only had a Windows target. ## Changes - **`linux` build target** in `desktop-client/package.json` producing an AppImage. - **`build/icon.png`** — 512x512, generated to match the green of the existing tray icon. Without it electron-builder ships the stock Electron icon. - **`.gitea/workflows/release.yml`** — builds the AppImage on a `v*` tag, runs tests first, and attaches the artifact to a Gitea release via the API. ## Verification The packaged binary was run, not just built: the embedded server came up on 9095 and served the overlay with a 200 (6937 bytes), confirming `extraResources` resolves correctly from `process.resourcesPath` in a packaged build. All 8 unit tests pass. The AppImage itself could not be mounted in the build container (no FUSE), so the extracted payload was tested instead. Loading music.youtube.com failed there for lack of network egress — environmental, not a packaging fault. ## Before the workflow can run It is inert until two things exist: 1. A registered `act_runner` — the repo currently has **no runners** at repo, org, or user scope, so jobs would queue indefinitely. 2. A `RELEASE_TOKEN` secret with permission to create releases. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jknapp added 2 commits 2026-08-29 00:58:38 +00:00
The build config only had a Windows target. Adds a linux block producing
an AppImage, plus a 512x512 build/icon.png so the packaged app does not
ship with the stock Electron icon.

Verified by running the packaged binary: the embedded server comes up on
9095 and serves the overlay from process.resourcesPath, confirming the
extraResources mapping works in a packaged build.

StartupWMClass is deliberately not set via linux.desktop -- electron-builder
already emits the correct value, and the nested { entry: {...} } form leaks a
literal "entry=[object Object]" line into the .desktop file.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Builds the Linux AppImage on a v* tag, runs the test suite first, and
attaches the artifact to a Gitea release via the API (no third-party
action, so nothing needs to be fetched from github.com at runtime).

Guards that the tag matches package.json version: electron-builder names
the artifact from package.json, so tagging v1.0.1 without bumping the
manifest would otherwise publish an AppImage named 1.0.0.

Requires a RELEASE_TOKEN secret and a registered act_runner; neither is
set up yet, so this is inert until both exist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jknapp merged commit 9240dc3cb6 into main 2026-08-29 00:58:42 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: streamer-tools/whats-that-music#1