From d1765aef6e3ef8d1496c2d47bcb02c428a9bf798 Mon Sep 17 00:00:00 2001 From: erik Date: Sat, 11 Jul 2026 01:35:31 -0500 Subject: [PATCH] chore: Refactor build and publish scripts for the desktop application. Replace direct electron-builder calls with a custom script to manage output directory outside of OneDrive/Documents. Update README to reflect new installer location and enhance release directory management with a dedicated module. --- services/desktop_app/README.md | 2 +- services/desktop_app/package.json | 4 ++-- .../scripts/electron-builder-win.mjs | 20 +++++++++++++++++++ .../desktop_app/scripts/publish-version.mjs | 11 +++++----- services/desktop_app/scripts/release-dir.mjs | 19 ++++++++++++++++++ 5 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 services/desktop_app/scripts/electron-builder-win.mjs create mode 100644 services/desktop_app/scripts/release-dir.mjs diff --git a/services/desktop_app/README.md b/services/desktop_app/README.md index f2eeda6..458f6f1 100644 --- a/services/desktop_app/README.md +++ b/services/desktop_app/README.md @@ -112,7 +112,7 @@ npm run dev npm run dist ``` -El instalador queda en `release/` y se publica en: +El instalador queda en `%LOCALAPPDATA%\IPSExtractor-desktop-release\` (fuera de Documents/OneDrive, para evitar bloqueos de `app.asar` en Windows) y se publica en: `s3.builker.xyz/apps-versions/IPSExtractor/{version}/` diff --git a/services/desktop_app/package.json b/services/desktop_app/package.json index 4d16001..deb583a 100644 --- a/services/desktop_app/package.json +++ b/services/desktop_app/package.json @@ -11,9 +11,9 @@ "preview": "vite preview", "test": "vitest run", "test:watch": "vitest", - "dist": "npm run build && electron-builder --win && npm run publish:minio", + "dist": "npm run build && node scripts/electron-builder-win.mjs && npm run publish:minio", "dist:win": "npm run dist", - "dist:local": "npm run build && electron-builder --win", + "dist:local": "npm run build && node scripts/electron-builder-win.mjs", "publish:minio": "node scripts/publish-version.mjs" }, "dependencies": { diff --git a/services/desktop_app/scripts/electron-builder-win.mjs b/services/desktop_app/scripts/electron-builder-win.mjs new file mode 100644 index 0000000..023005c --- /dev/null +++ b/services/desktop_app/scripts/electron-builder-win.mjs @@ -0,0 +1,20 @@ +/** + * Ejecuta electron-builder --win con output fuera de OneDrive/Documents. + */ +import { spawnSync } from "node:child_process"; +import { getReleaseDir } from "./release-dir.mjs"; + +const outDir = getReleaseDir(); +console.log(`electron-builder output → ${outDir}`); + +const result = spawnSync( + "npx", + ["electron-builder", "--win", `--config.directories.output=${outDir}`], + { + stdio: "inherit", + shell: true, + env: process.env, + }, +); + +process.exit(result.status ?? 1); diff --git a/services/desktop_app/scripts/publish-version.mjs b/services/desktop_app/scripts/publish-version.mjs index 02215d6..8e74b3b 100644 --- a/services/desktop_app/scripts/publish-version.mjs +++ b/services/desktop_app/scripts/publish-version.mjs @@ -14,12 +14,11 @@ */ import { createHash } from "node:crypto"; import { createReadStream, existsSync, readFileSync, statSync, writeFileSync } from "node:fs"; -import { join, dirname } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join } from "node:path"; import { S3Client, PutObjectCommand, GetObjectCommand } from "@aws-sdk/client-s3"; +import { getReleaseDir, projectRoot } from "./release-dir.mjs"; -const __dirname = dirname(fileURLToPath(import.meta.url)); -const root = join(__dirname, ".."); +const root = projectRoot; /** Carga KEY=VALUE desde un archivo local (sin dependencia dotenv). */ function loadEnvFile(filePath) { @@ -63,9 +62,11 @@ if (!accessKey || !secretKey) { } const setupName = `IPSExtractor-Desktop-${version}-Setup.exe`; -const setupPath = join(root, "release", setupName); +const releaseDir = getReleaseDir(); +const setupPath = join(releaseDir, setupName); if (!existsSync(setupPath)) { console.error(`No se encontrĂ³ ${setupPath}. Ejecuta antes: npm run dist`); + console.error(`(directorio de release: ${releaseDir})`); process.exit(1); } diff --git a/services/desktop_app/scripts/release-dir.mjs b/services/desktop_app/scripts/release-dir.mjs new file mode 100644 index 0000000..4f48e63 --- /dev/null +++ b/services/desktop_app/scripts/release-dir.mjs @@ -0,0 +1,19 @@ +/** + * Directorio de salida de electron-builder. + * Por defecto fuera de Documents/OneDrive para evitar bloqueos de app.asar en Windows. + * Override: IPS_DESKTOP_RELEASE_DIR=C:\ruta\absoluta + */ +import { homedir } from "node:os"; +import { join, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +export const projectRoot = join(__dirname, ".."); + +export function getReleaseDir() { + if (process.env.IPS_DESKTOP_RELEASE_DIR) { + return process.env.IPS_DESKTOP_RELEASE_DIR; + } + const local = process.env.LOCALAPPDATA || join(homedir(), "AppData", "Local"); + return join(local, "IPSExtractor-desktop-release"); +}