Commit Graph
19 Commits
Author SHA1 Message Date
shadowdaoandClaude Opus 5 72485d44ff Build each platform on its own native runner
Splits the release workflow into linux, windows and macos jobs feeding a
single publish job. The publish step is separate so parallel builds cannot
race to create the release and fail on a duplicate tag.

Windows now builds natively, so signAndEditExecutable no longer has to be
disabled. That flag was suppressing rcedit, which is what embeds the icon
and version resources -- the v1.0.0 exe shipped with the stock Electron
icon as a result. Also adds an NSIS installer alongside the portable zip.

macOS gains a dmg target, which cannot be produced off macOS. Builds stay
unsigned pending a Developer ID, with CSC_IDENTITY_AUTO_DISCOVERY disabled
so electron-builder builds unsigned instead of failing on a real Mac.

Nothing cross-builds now; all three runners must be registered before
tagging, since a job with no matching runner queues silently.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 18:53:24 -07:00
shadowdaoandClaude Opus 5 289cb6d4b1 Add macOS target and put platform in artifact names
Adds a mac zip target (x64 + arm64) so releases cover all three
platforms. Builds unsigned: electron-builder skips code signing when not
running on macOS, so these need the quarantine attribute cleared.

Also puts ${os} in artifactName. Without it the Windows and macOS zips
were both WhatsThatMusic-1.0.0-x64.zip, which collide as release assets
and give no clue which platform they are.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 18:11:31 -07:00
shadowdaoandClaude Opus 5 d8107a06c2 Add Linux AppImage build target and app icon
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>
2026-08-28 17:54:05 -07:00
shadowdao ba36dd569f Bundle overlay via extraResources for packaged build 2026-04-26 10:40:03 -07:00
shadowdaoandClaude Sonnet 4.6 ac255bfa75 Delete extension, OS backends, standalone server, root npm project
Removes extension/, desktop-client/backends/, desktop-client/config.js,
server/, root package.json/package-lock.json/node_modules/, and the
now-unused electron-store dependency from desktop-client/package.json.
The desktop-client is now a self-contained Electron app with no external
deps beyond express and ws.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:36:53 -07:00
shadowdao 60845b7870 Bypass beforeunload on window close so app quits while audio plays 2026-04-26 10:34:42 -07:00
shadowdaoandClaude Sonnet 4.6 98a12e1e3e Update startServer JSDoc; surface boot errors via dialog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:12:14 -07:00
shadowdaoandClaude Sonnet 4.6 6fd858347f Fall back to next port on EADDRINUSE; show dialog and update tray URL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:08:15 -07:00
shadowdaoandClaude Sonnet 4.6 65e871c16e Move tray state into createTray closure
Removes top-level let trayInstance, opts, currentTitle, currentArtist
and the top-level buildMenu function. All mutable state and buildMenu
now live inside the createTray closure. Public API and behaviour are
unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:56:48 -07:00
shadowdao 8be1999a6b Rewrite tray: simple menu, no server-URL config 2026-04-26 09:50:59 -07:00
shadowdaoandClaude Sonnet 4.6 affc71bd0f Harden Electron main: re-entrancy guard, tray destroy, loadURL error log
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:49:20 -07:00
shadowdao 7ea303a2ef Rewrite Electron main: in-process server + YT Music BrowserWindow 2026-04-26 09:46:08 -07:00
shadowdao ffa045469b Add YT Music preload scraper that emits wtm:state IPC 2026-04-26 09:42:49 -07:00
shadowdaoandClaude Sonnet 4.6 03128cbe6b Harden server: drain connections on stop, validate proxy URL scheme, add fetch timeout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:41:44 -07:00
shadowdaoandClaude Sonnet 4.6 3445ef89f0 Add in-process server module with setState entry point
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 09:38:11 -07:00
shadowdao 81e08afa00 Add tests for null no-change and zero as real value 2026-04-26 09:35:53 -07:00
shadowdao acf5e74f30 Add pure state-merge module with unit tests 2026-04-26 09:32:52 -07:00
shadowdao ad8fde0dda Use cross-platform quoting in test script 2026-04-26 09:31:25 -07:00
shadowdao 43e77ef7db Add server deps and test script to desktop-client package 2026-04-26 09:27:44 -07:00