# electron-builder config (design § "桌面端原型 · 打包与更新", milestone M3). # # 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/` 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 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