build: generate desktop application release artifacts and update project configuration
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* copy-web-dist.ts
|
||||
*
|
||||
* Prebuild script for apps/desktop.
|
||||
* Copies the build output of the target web app into ./web-dist/
|
||||
* so electron-builder can bundle it into the packaged application.
|
||||
*
|
||||
* Reads DESKTOP_TARGET_APP from .env (default: "web").
|
||||
*
|
||||
* Directory layout:
|
||||
* monorepo-root/
|
||||
* apps/
|
||||
* desktop/
|
||||
* scripts/ ← this file lives here
|
||||
* web-dist/ ← destination
|
||||
* web/
|
||||
* dist/ ← source
|
||||
*/
|
||||
|
||||
import { cpSync, existsSync, mkdirSync, rmSync, readFileSync } from 'fs';
|
||||
import { resolve } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
// ── Resolve paths ──────────────────────────────────────────────
|
||||
// Use import.meta.url for ESM compatibility (works across Node versions)
|
||||
const SCRIPT_DIR = resolve(fileURLToPath(import.meta.url), '..');
|
||||
const DESKTOP_DIR = resolve(SCRIPT_DIR, '..');
|
||||
const MONOREPO_ROOT = resolve(DESKTOP_DIR, '..', '..');
|
||||
const DEST_DIR = resolve(DESKTOP_DIR, 'web-dist');
|
||||
|
||||
// ── Read .env for target app name ──────────────────────────────
|
||||
function loadTargetApp(): string {
|
||||
const envPath = resolve(DESKTOP_DIR, '.env');
|
||||
if (existsSync(envPath)) {
|
||||
const content = readFileSync(envPath, 'utf-8');
|
||||
const match = content.match(/^DESKTOP_TARGET_APP=(.+)$/m);
|
||||
if (match) return match[1].trim();
|
||||
}
|
||||
return 'web';
|
||||
}
|
||||
|
||||
const targetApp = process.env.DESKTOP_TARGET_APP || loadTargetApp();
|
||||
const SOURCE_DIR = resolve(MONOREPO_ROOT, 'apps', targetApp, 'dist');
|
||||
|
||||
// ── Debug: print resolved paths ────────────────────────────────
|
||||
console.log(`\n📦 copy-web-dist`);
|
||||
console.log(` Target app : ${targetApp}`);
|
||||
console.log(` Monorepo root: ${MONOREPO_ROOT}`);
|
||||
console.log(` Source : ${SOURCE_DIR}`);
|
||||
console.log(` Destination : ${DEST_DIR}`);
|
||||
|
||||
// ── Validate ───────────────────────────────────────────────────
|
||||
if (!existsSync(SOURCE_DIR)) {
|
||||
console.error(
|
||||
`\n❌ Build output not found at: ${SOURCE_DIR}\n` +
|
||||
` Run "pnpm build --filter=${targetApp}" first.\n`,
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// ── Clean destination ──────────────────────────────────────────
|
||||
if (existsSync(DEST_DIR)) {
|
||||
rmSync(DEST_DIR, { recursive: true, force: true });
|
||||
}
|
||||
mkdirSync(DEST_DIR, { recursive: true });
|
||||
|
||||
// ── Copy ───────────────────────────────────────────────────────
|
||||
cpSync(SOURCE_DIR, DEST_DIR, { recursive: true });
|
||||
|
||||
console.log(`✅ Copied ${targetApp} build → web-dist/\n`);
|
||||
Reference in New Issue
Block a user