90 lines
2.6 KiB
JavaScript
90 lines
2.6 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Windows only: download bundled VLC, patch electron-builder to ship resources/vlc,
|
|
* then build KiraTV NSIS installer (x64).
|
|
*/
|
|
import { execSync } from 'node:child_process';
|
|
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
if (process.platform !== 'win32') {
|
|
console.error(
|
|
'Este script debe ejecutarse en Windows (Node win32).\n' +
|
|
'Para generar el .exe con VLC embebido, usa una máquina Windows o un job windows-latest en CI.'
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const workspaceRoot = path.resolve(__dirname, '..', '..');
|
|
const configPath = path.join(workspaceRoot, 'electron-builder.json');
|
|
|
|
execSync(`node "${path.join(__dirname, 'download-vlc-windows.mjs')}"`, {
|
|
stdio: 'inherit',
|
|
cwd: workspaceRoot,
|
|
});
|
|
|
|
const vlcExe = path.join(
|
|
workspaceRoot,
|
|
'tools',
|
|
'packaging',
|
|
'bundled-vlc',
|
|
'win64',
|
|
'vlc.exe'
|
|
);
|
|
if (!fs.existsSync(vlcExe)) {
|
|
console.error('Missing bundled VLC after download:', vlcExe);
|
|
process.exit(1);
|
|
}
|
|
|
|
const original = fs.readFileSync(configPath, 'utf8');
|
|
const config = JSON.parse(original);
|
|
|
|
const baseExtra = Array.isArray(config.extraResources)
|
|
? config.extraResources
|
|
: config.extraResources
|
|
? [config.extraResources]
|
|
: [];
|
|
|
|
config.extraResources = [
|
|
...baseExtra.filter((e) => {
|
|
if (typeof e === 'string') {
|
|
return !String(e).includes('bundled-vlc');
|
|
}
|
|
if (e && typeof e === 'object' && e.to === 'vlc') {
|
|
return false;
|
|
}
|
|
return true;
|
|
}),
|
|
{
|
|
from: 'tools/packaging/bundled-vlc/win64',
|
|
to: 'vlc',
|
|
filter: ['**/*'],
|
|
},
|
|
];
|
|
|
|
config.win = config.win ?? {};
|
|
config.win.target = [{ target: 'nsis', arch: ['x64'] }];
|
|
|
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 4) + '\n');
|
|
|
|
const run = (cmd) => {
|
|
execSync(cmd, { stdio: 'inherit', cwd: workspaceRoot, env: process.env });
|
|
};
|
|
|
|
try {
|
|
const nx = path.join(workspaceRoot, 'node_modules', '.bin', 'nx');
|
|
const nxCmd = fs.existsSync(nx) ? `"${nx}"` : 'npx nx';
|
|
run(`${nxCmd} run electron-backend:build --configuration=kiratv`);
|
|
// On Windows, Nx defaults to the Windows platform. Do not pass --platform/--arch:
|
|
// Nx forwards them to dependency targets (web, remote-control-web) and breaks.
|
|
run(`${nxCmd} run electron-backend:make --configuration=kiratv`);
|
|
|
|
console.log(
|
|
'\nInstalador NSIS generado en dist/executables (kiratv-*-windows-x64-setup.exe) con VLC en resources/vlc.\n'
|
|
);
|
|
} finally {
|
|
fs.writeFileSync(configPath, original);
|
|
}
|