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:
A registered act_runner — the repo currently has no runners at repo, org, or user scope, so jobs would queue indefinitely.
A RELEASE_TOKEN secret with permission to create releases.
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)
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 main2026-08-29 00:58:42 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Adds Linux packaging, since the build config previously only had a Windows target.
Changes
linuxbuild target indesktop-client/package.jsonproducing 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 av*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
extraResourcesresolves correctly fromprocess.resourcesPathin 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:
act_runner— the repo currently has no runners at repo, org, or user scope, so jobs would queue indefinitely.RELEASE_TOKENsecret with permission to create releases.🤖 Generated with Claude Code
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>