42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
/**
|
|
* after-pack.mjs — electron-builder afterPack hook.
|
|
*
|
|
* Stamps the Hermes icon + identity onto the packed Windows Hermes.exe via
|
|
* rcedit (delegated to set-exe-identity.mjs). This runs for EVERY packed build
|
|
* — first install, `hermes desktop`, the installer's --update rebuild, and a
|
|
* dev's manual `npm run pack` — so the branded exe can never silently revert
|
|
* to the stock "Electron" icon/name (the bug when the stamp lived only in
|
|
* install.ps1, which the update path doesn't use).
|
|
*
|
|
* Windows-only: rcedit edits PE resources, irrelevant on macOS/Linux where the
|
|
* app identity comes from the bundle Info.plist / desktop entry. AITURK builds
|
|
* fail if executable branding cannot be applied.
|
|
*
|
|
* electron-builder passes a context with:
|
|
* - electronPlatformName: 'win32' | 'darwin' | 'linux'
|
|
* - appOutDir: the unpacked app directory for this target
|
|
* - packager.appInfo.productFilename: the exe basename (e.g. 'Hermes')
|
|
*/
|
|
|
|
import path from 'node:path'
|
|
import { existsSync } from 'node:fs'
|
|
|
|
import { stampExeIdentity } from './set-exe-identity.mjs'
|
|
|
|
export default async function afterPack(context) {
|
|
if (context.electronPlatformName !== 'win32') {
|
|
return
|
|
}
|
|
|
|
const productName = context.packager?.appInfo?.productFilename || 'Hermes'
|
|
const configuredExe = path.join(context.appOutDir, 'AITURK-IDE.exe')
|
|
const exe = existsSync(configuredExe) ? configuredExe : path.join(context.appOutDir, `${productName}.exe`)
|
|
const desktopRoot = path.resolve(import.meta.dirname, '..')
|
|
|
|
try {
|
|
await stampExeIdentity(exe, desktopRoot)
|
|
} catch (err) {
|
|
throw new Error(`AITURK executable branding failed: ${err.message}`)
|
|
}
|
|
}
|