mirror of
https://github.com/multica-ai/multica.git
synced 2026-07-30 16:20:35 +02:00
Fixes three gaps in the Linux desktop build that combined to render the
Multica window with the system Settings (gear) icon on Ubuntu:
1. Force `linux.executableName: multica` so the scoped npm name
`@multica/desktop` stops leaking into `executableName`, the `.desktop`
filename, the `Icon=` field, and `/usr/share/icons/hicolor/*/apps/*.png`.
The leading `@` in the previously-generated `@multicadesktop` violates
freedesktop desktop-entry naming, breaking GNOME's window↔.desktop
association and forcing the theme-default icon. (The artifact-filename
side of the same scoped-name leak was already patched in 10618b1f;
this commit closes the desktop/icon-identity side.)
2. Always set `BrowserWindow({ icon })` on Linux — previously gated on
`is.dev`. AppImage direct-launches never install the `.desktop` entry,
so without an explicit window icon the WM has no other path to the
bundled image. The resolved path now points into `app.asar.unpacked/`
(matching the existing `bundledCliPath()` convention in
`daemon-manager.ts`) since the Linux native icon code path requires a
real filesystem path, not an asar-internal one.
3. Pin `linux.desktop.entry.StartupWMClass: Multica` explicitly. The
value already matches the productName-derived default, so this is a
build-time no-op today, but it makes the WM_CLASS↔StartupWMClass
matching contract auditable in config — future changes to
`productName` or `app.setName()` now show up as a diff against this
file instead of silently re-breaking the icon association.
Fixes https://github.com/multica-ai/multica/issues/2424.
91 lines
3.9 KiB
YAML
91 lines
3.9 KiB
YAML
appId: ai.multica.desktop
|
|
productName: Multica
|
|
directories:
|
|
buildResources: build
|
|
files:
|
|
- "!**/.vscode/*"
|
|
- "!src/*"
|
|
- "!electron.vite.config.*"
|
|
- "!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}"
|
|
- "!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}"
|
|
protocols:
|
|
- name: Multica
|
|
schemes:
|
|
- multica
|
|
asarUnpack:
|
|
- resources/**
|
|
mac:
|
|
entitlementsInherit: build/entitlements.mac.plist
|
|
target:
|
|
- dmg
|
|
- zip
|
|
# Hardcoded name avoids the `@multica/desktop-*` subdirectory that
|
|
# `${name}` produces for scoped package names.
|
|
# Naming scheme: multica-desktop-<version>-<platform>-<arch>.<ext>
|
|
# so the filename alone surfaces kind, version, platform, and CPU arch.
|
|
artifactName: multica-desktop-${version}-mac-${arch}.${ext}
|
|
# Notarize via notarytool. Requires APPLE_ID + APPLE_APP_SPECIFIC_PASSWORD
|
|
# + APPLE_TEAM_ID env vars at package time. Non-mac contributors are
|
|
# unaffected because `pnpm package` already requires the Developer ID
|
|
# signing cert — notarization is a strict superset.
|
|
notarize: true
|
|
dmg:
|
|
artifactName: multica-desktop-${version}-mac-${arch}.${ext}
|
|
linux:
|
|
# Override the Linux executable name to avoid leaking the scoped npm
|
|
# package name (`@multica/desktop`) into the installed binary, the
|
|
# `.desktop` file, and the hicolor icon filename. Without this override
|
|
# electron-builder defaults `executableName` to the package `name`,
|
|
# which after slash-stripping becomes `@multicadesktop` — producing
|
|
# `/usr/share/applications/@multicadesktop.desktop`,
|
|
# `Icon=@multicadesktop`, and
|
|
# `/usr/share/icons/hicolor/*/apps/@multicadesktop.png`. The leading `@`
|
|
# violates the freedesktop desktop-entry naming guidance, so GNOME /
|
|
# Ubuntu fail to associate the running window with the `.desktop` entry
|
|
# and fall back to the theme's default app icon (the Settings gear on
|
|
# Yaru). Forcing `multica` makes every Linux identity slot agree and
|
|
# matches `StartupWMClass=Multica` (productName-derived).
|
|
executableName: multica
|
|
# Pin StartupWMClass explicitly to the WM_CLASS that Electron emits on
|
|
# X11. Electron derives WM_CLASS from `app.getName()`, which in packaged
|
|
# builds resolves to `productName` (`Multica`). Without an explicit
|
|
# `StartupWMClass`, electron-builder writes `productName` as the default
|
|
# — making this declaration redundant with current settings — but
|
|
# pinning the value here turns a silent future drift (e.g. if anyone
|
|
# renames productName or sets app.setName at boot) into a visible diff
|
|
# against this file. The WM_CLASS ↔ StartupWMClass match is what lets
|
|
# GNOME associate the running window with the `.desktop` entry and
|
|
# therefore render the right icon. The post-build verification step in
|
|
# PR #2437 is `xprop WM_CLASS` on a real Ubuntu install.
|
|
desktop:
|
|
entry:
|
|
StartupWMClass: Multica
|
|
target:
|
|
- AppImage
|
|
- deb
|
|
- rpm
|
|
artifactName: multica-desktop-${version}-linux-${arch}.${ext}
|
|
rpm:
|
|
# Disable RPM build-id symlinks. Electron apps embed the upstream Electron
|
|
# binary, whose GNU build-id is identical across every app shipping the same
|
|
# Electron version (Slack, VS Code, Discord, ...). Without this, our RPM
|
|
# would own /usr/lib/.build-id/<hash> paths and collide with any other
|
|
# Electron RPM already installed, breaking `dnf install` on Fedora/RHEL.
|
|
fpm:
|
|
- "--rpm-rpmbuild-define=_build_id_links none"
|
|
win:
|
|
target:
|
|
- nsis
|
|
artifactName: multica-desktop-${version}-windows-${arch}.${ext}
|
|
publish:
|
|
provider: github
|
|
owner: multica-ai
|
|
repo: multica
|
|
# Align with our CLI release flow which pre-creates a *published* GitHub
|
|
# Release via `gh release create`. The electron-builder default of
|
|
# `releaseType: draft` conflicts with `existingType=release` and causes
|
|
# uploads of the DMG/ZIP/blockmaps/latest-mac.yml to be silently skipped,
|
|
# which breaks electron-updater auto-update on installed clients.
|
|
releaseType: release
|
|
npmRebuild: false
|