Skip to content

Commit 8f37dbd

Browse files
committed
fix(electron): decouple icon generation from build
1 parent 7275a2d commit 8f37dbd

4 files changed

Lines changed: 14 additions & 6 deletions

File tree

README.en.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ neocode web
126126

127127
Tagged release builds already embed Web UI assets (`web/dist`) into the `neocode` binary, so running `neocode web` does not require Node.js or npm on the target machine. If you run from source with `go run ./cmd/neocode web`, NeoCode will still automatically try to build the frontend when `web/dist` is missing.
128128

129+
Electron desktop releases use the checked-in `web/build/icon.png`, `web/build/icon.ico`, and `web/build/icon.icns` assets. Only run `npm run generate:icons` from `web/` after replacing the source `web/build/icon.png`; the command uses PowerShell/.NET image APIs on Windows, `sips` on macOS, and requires ImageMagick's `magick` command on Linux.
130+
129131
### 4. Quick Web / Feishu Entry
130132

131133
```bash

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ neocode web
133133

134134
标签发布版已经将 Web UI 的 `web/dist` 内嵌进 `neocode` 二进制,执行 `neocode web` 时不再要求用户机器安装 Node.js 或 npm。如果你在源码仓库里运行 `go run ./cmd/neocode web`,当本地缺少 `web/dist` 时仍会自动尝试构建前端。
135135

136+
Electron 桌面端发布图标使用已提交的 `web/build/icon.png``web/build/icon.ico``web/build/icon.icns`。只有替换 `web/build/icon.png` 源图时,才需要在 `web/` 目录手动运行 `npm run generate:icons` 重新生成 Windows 与 macOS 图标;该命令在 Windows 使用 PowerShell/.NET 图像能力,在 macOS 使用 `sips`,在 Linux 需要 ImageMagick 的 `magick` 命令。
137+
136138
### 4. Web / 飞书快速入口
137139

138140
```bash

web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"dev": "vite",
1111
"dev:electron": "node scripts/clean-electron.js && node scripts/build-gateway.js && vite --mode electron",
1212
"build": "tsc -b && vite build",
13-
"build:electron": "node scripts/clean-electron.js && node scripts/generate-icons.js && vite build --mode electron && node scripts/build-gateway.js && node scripts/verify-electron-preload.js && electron-builder --config electron-builder.config.cjs",
13+
"build:electron": "node scripts/clean-electron.js && vite build --mode electron && node scripts/build-gateway.js && node scripts/verify-electron-preload.js && electron-builder --config electron-builder.config.cjs",
1414
"generate:icons": "node scripts/generate-icons.js",
1515
"preview": "vite preview",
1616
"test": "vitest run",

web/scripts/generate-icons.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@ const tempDir = mkdtempSync(join(tmpdir(), 'neocode-icons-'))
2020

2121
try {
2222
const resizedPngs = resizeImages(sourceIcon, tempDir, iconSizes)
23-
writeFileSync(outputIco, buildIco(resizedPngs))
24-
writeFileSync(outputIcns, buildIcns(resizedPngs))
25-
console.log(`Generated ${outputIco}`)
26-
console.log(`Generated ${outputIcns}`)
23+
if (resizedPngs === null) {
24+
console.log(`Existing ${outputIco} and ${outputIcns} are up to date.`)
25+
} else {
26+
writeFileSync(outputIco, buildIco(resizedPngs))
27+
writeFileSync(outputIcns, buildIcns(resizedPngs))
28+
console.log(`Generated ${outputIco}`)
29+
console.log(`Generated ${outputIcns}`)
30+
}
2731
} finally {
2832
rmSync(tempDir, { recursive: true, force: true })
2933
}
@@ -41,7 +45,7 @@ function resizeImages(inputPath, outputDir, sizes) {
4145
}
4246
if (outputsAreFresh()) {
4347
console.warn('No local image resizer found; existing icon.ico and icon.icns are up to date.')
44-
process.exit(0)
48+
return null
4549
}
4650
throw new Error('No local image resizer found. Install ImageMagick or run this script on Windows/macOS.')
4751
}

0 commit comments

Comments
 (0)