diff --git a/package.json b/package.json index 5dce0c3..bf0c979 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ "build:cloudflare": "cross-env VITE_DEPLOY_TARGET=cloudflare vite build", "deploy": "npm run build:cloudflare && wrangler pages deploy --branch main", "postinstall": "bun scripts/patch-electrobun-src.mjs && bun scripts/build-macos-effects.mjs", + "generate-app-icons": "bun scripts/generate-app-icons.mjs", "build:macos-effects": "bun scripts/build-macos-effects.mjs", "clean": "bun scripts/clean-build.mjs" }, diff --git a/scripts/build-windows-msi.ps1 b/scripts/build-windows-msi.ps1 index 34d69cc..b8051d2 100644 --- a/scripts/build-windows-msi.ps1 +++ b/scripts/build-windows-msi.ps1 @@ -89,7 +89,7 @@ if ($outputDir -and -not (Test-Path $outputDir)) { $installerIconPath = Join-Path $rootDir "assets\installer.ico" if (-not (Test-Path $installerIconPath)) { - throw "Installer icon not found at $installerIconPath. Run scripts/prepare-installer-icons.mjs first." + throw "Installer icon not found at $installerIconPath. Run 'bun run generate-app-icons' first." } $installerIconWorkPath = Join-Path $workDir "installer.ico" diff --git a/scripts/finalize-desktop-artifacts.mjs b/scripts/finalize-desktop-artifacts.mjs index 205b26e..077fa46 100644 --- a/scripts/finalize-desktop-artifacts.mjs +++ b/scripts/finalize-desktop-artifacts.mjs @@ -211,7 +211,7 @@ function findCommand(command) { function buildInstallerIcns(destinationPath) { if (!existsSync(MAC_INSTALLER_ICONSET_PATH)) { throw new Error( - `Installer iconset not found at ${MAC_INSTALLER_ICONSET_PATH}. Run scripts/prepare-installer-icons.mjs first.` + `Installer iconset not found at ${MAC_INSTALLER_ICONSET_PATH}. Run \`bun run generate-app-icons\` first.` ) } diff --git a/scripts/generate-app-icons.mjs b/scripts/generate-app-icons.mjs new file mode 100644 index 0000000..8c77107 --- /dev/null +++ b/scripts/generate-app-icons.mjs @@ -0,0 +1,27 @@ +import path from 'node:path' +import { spawnSync } from 'node:child_process' +import { fileURLToPath } from 'node:url' + +const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') + +const steps = [ + [ + path.join(rootDir, 'scripts/prepare-app-icons.mjs'), + 'assets/logos/farmcontrolicon.png' + ], + [path.join(rootDir, 'scripts/prepare-installer-icons.mjs')] +] + +for (const args of steps) { + const result = spawnSync('bun', args, { + cwd: rootDir, + stdio: 'inherit', + env: process.env + }) + + if (result.status !== 0) { + process.exit(result.status ?? 1) + } +} + +console.log('generate-app-icons: done') diff --git a/scripts/pre-build.mjs b/scripts/pre-build.mjs index 2dea5a7..0ed4382 100644 --- a/scripts/pre-build.mjs +++ b/scripts/pre-build.mjs @@ -61,33 +61,31 @@ if (process.platform === "darwin") { } } -const prepareIcons = spawnSync( - "bun", - [ - path.join(rootDir, "scripts/prepare-app-icons.mjs"), - "assets/logos/farmcontrolicon.png", - ], - { cwd: rootDir, stdio: "inherit", env: process.env }, -); +const requiredIconPaths = [ + path.join(rootDir, "assets/icon.ico"), + path.join(rootDir, "assets/icon.png"), + path.join(rootDir, "assets/icon.iconset/icon_256x256.png"), + path.join(rootDir, "assets/installer.ico"), +]; -if (prepareIcons.status !== 0) { - process.exit(prepareIcons.status ?? 1); +if (buildEnv === "stable") { + const prepareIcons = spawnSync( + "bun", + [path.join(rootDir, "scripts/generate-app-icons.mjs")], + { cwd: rootDir, stdio: "inherit", env: process.env }, + ); + + if (prepareIcons.status !== 0) { + process.exit(prepareIcons.status ?? 1); + } } -const prepareInstallerIcons = spawnSync( - "bun", - [path.join(rootDir, "scripts/prepare-installer-icons.mjs")], - { cwd: rootDir, stdio: "inherit", env: process.env }, -); - -if (prepareInstallerIcons.status !== 0) { - process.exit(prepareInstallerIcons.status ?? 1); -} - -const windowsIconPath = path.join(rootDir, "assets/icon.ico"); -if (!existsSync(windowsIconPath)) { +const missingIcons = requiredIconPaths.filter((filePath) => !existsSync(filePath)); +if (missingIcons.length > 0) { console.error( - "pre-build: assets/icon.ico not found after prepare-app-icons (required for build.win.icon)", + `pre-build: missing generated icons:\n${missingIcons + .map((filePath) => ` - ${path.relative(rootDir, filePath)}`) + .join("\n")}\nRun \`bun run generate-app-icons\` to create them.`, ); process.exit(1); }