Files
penguin-harness/packages/desktop/electron-builder.yml
T
2026-08-07 19:02:48 +08:00

89 lines
3.6 KiB
YAML

# electron-builder config for the desktop shell installers.
#
# The app directory is the pnpm-deploy staging tree assembled by scripts/stage.mjs —
# a portable, self-contained node_modules (workspace packages materialized) plus the
# shell bundle and the server's web-dist.
#
# asar is off on purpose: the shell forks the server as a child process, the skill
# library reads its .md files from disk, and agent commands spawn real shells — plain
# files sidestep every asar edge (fork-from-archive, unpacked-tree resolution splits)
# at the cost of some inodes.
#
# M3 ships unsigned artifacts: macOS signing/notarization and Windows code signing are
# milestone M4, together with electron-updater.
appId: com.prismshadow.penguinharness
productName: PenguinHarness
directories:
app: stage/app
output: stage/out
asar: false
# The staged tree is complete and has no native modules; a rebuild would only fail
# against the pruned package.json.
npmRebuild: false
nodeGypRebuild: false
mac:
category: public.app-category.developer-tools
# Brand icon (rendered from packages/web/public/penguin-logo.svg by
# scripts/render-icon.mjs, committed): electron-builder converts the 1024px PNG to
# icns itself (app-builder-lib iconConverter; >=512px required).
icon: build/icon.png
# No Developer ID yet (M4): identity null skips codesign instead of failing.
identity: null
# Version-less artifact names, following the CLI bundles (penguin-darwin-arm64.tar.gz):
# the version lives in the Release tag and SHA256SUMS.desktop, so the download page and
# the OSS mirror manifest can address every installer by a stable name — and GitHub's
# `releases/latest/download/<name>` stays a working static link across releases.
artifactName: penguin-desktop-darwin-${arch}.${ext}
target:
- target: dmg
arch: [arm64, x64]
- target: zip
arch: [arm64, x64]
win:
# Same source PNG; electron-builder converts it to the multi-size ico embedded in the
# exe (>=256px required).
icon: build/icon.png
artifactName: penguin-desktop-win32-${arch}.${ext}
target:
- target: nsis
arch: [x64]
# MinGit, downloaded by the CI job into stage/minigit (empty for local non-Windows
# builds): lands under resources/git, and the shell advertises git/usr/bin/sh.exe as
# PENGUIN_BUNDLED_SHELL so the agent shell behaves like the npm-installed package.
extraResources:
- from: stage/minigit
to: git
nsis:
oneClick: false
allowToChangeInstallationDirectory: true
linux:
# Pre-rendered freedesktop icon set (scripts/render-icon.mjs): a directory of NxN.png
# files is used as-is for AppImage/deb, no conversion step.
icon: build/icons
# The scoped package name is not a valid executable file name.
executableName: penguin-harness
# ${arch} expands to each Linux target's own convention — x86_64 for AppImage, amd64
# for deb — so the published names are penguin-desktop-linux-x86_64.AppImage and
# penguin-desktop-linux-amd64.deb; the OSS mirror manifest and the landing download
# page name them accordingly.
artifactName: penguin-desktop-linux-${arch}.${ext}
category: Development
maintainer: Prism Shadow <zheng@prismshadow.com>
target:
- target: AppImage
arch: [x64]
- target: deb
arch: [x64]
deb:
# Extended copies of electron-builder's default scripts (overriding REPLACES them):
# they additionally create/remove the /usr/bin/penguin symlink to the staged CLI
# launcher (resources/app/bin/penguin), so a deb install gets the `penguin` command
# on PATH without the in-app install flow the other formats use.
afterInstall: build/linux/after-install.tpl
afterRemove: build/linux/after-remove.tpl