Versión 1.1.0: exportar a Excel, valores por defecto de la cabecera y versión visible

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
georgeandClaude Sonnet 5.5 committed 2026-10-15 16:03:00 -05:00
1 parent 699dd983d0
commit b6e34276ce
35 files changed
+915 -50

No files matched your search

+41 -2
View File
@@ -36,6 +36,15 @@ function copiar(origen, destinoRelativo) {
cpSync(desde, join(app, destinoRelativo ?? origen), { recursive: true });
}
/** Commit corto de git (con "-modificado" si hay cambios sin commit), o null si no hay git o commits. */
function commitActual() {
const git = (...args) => spawnSync('git', args, { cwd: raiz, encoding: 'utf8' });
const head = git('rev-parse', '--short', 'HEAD');
if (head.status !== 0) return null;
const cambios = git('status', '--porcelain').stdout.trim().length > 0;
return `${head.stdout.trim()}${cambios ? '-modificado' : ''}`;
}
function tamano(carpeta) {
let total = 0;
for (const e of readdirSync(carpeta, { withFileTypes: true, recursive: true })) {
@@ -64,6 +73,29 @@ copiar('apps/web/dist/web/browser');
ejecutar(npm, ['ci', '--omit=dev', '--workspace=@dp/shared', '--workspace=api', '--no-audit', '--no-fund'], app);
// npm deja enlaces simbólicos (el de cada workspace y los atajos de .bin) que no sobreviven al copiar la
// carpeta de un Mac/Linux a Windows. La API importa @dp/shared al ejecutarse, así que ese enlace se
// reemplaza por una copia real; los demás no se usan y se quitan.
const nodeModules = join(app, 'node_modules');
rmSync(join(nodeModules, 'api'), { recursive: true, force: true });
const compartido = join(nodeModules, '@dp', 'shared');
rmSync(compartido, { recursive: true, force: true }); // quita solo el enlace, no su destino
mkdirSync(compartido, { recursive: true });
cpSync(join(app, 'libs', 'shared', 'package.json'), join(compartido, 'package.json'));
cpSync(join(app, 'libs', 'shared', 'dist'), join(compartido, 'dist'), { recursive: true });
rmSync(join(app, 'libs'), { recursive: true, force: true });
for (const e of readdirSync(nodeModules, { withFileTypes: true, recursive: true })) {
if (e.name === '.bin') rmSync(join(e.parentPath, e.name), { recursive: true, force: true });
}
const enlaces = readdirSync(app, { withFileTypes: true, recursive: true })
.filter((e) => e.isSymbolicLink())
.map((e) => join(e.parentPath, e.name));
if (enlaces.length > 0) {
console.error(`\nQuedaron enlaces simbólicos en el paquete (no sobreviven en Windows):\n ${enlaces.join('\n ')}`);
process.exit(1);
}
// Archivos de despliegue para Windows junto a la carpeta app/
for (const archivo of readdirSync(join(raiz, 'deploy', 'windows'))) {
cpSync(join(raiz, 'deploy', 'windows', archivo), join(destino, archivo));
@@ -71,11 +103,18 @@ for (const archivo of readdirSync(join(raiz, 'deploy', 'windows'))) {
for (const carpeta of ['logs', 'certificados']) mkdirSync(join(destino, carpeta), { recursive: true });
writeFileSync(join(destino, 'certificados', 'LEEME.txt'), 'Ponga aquí el certificado HTTPS (.pfx, o .key y .crt) y apunte el .env a estos archivos.\n');
const version = JSON.parse(readFileSync(join(raiz, 'package.json'), 'utf8')).name;
// Versión: el número sale del package.json raíz (npm run version:parche|menor|mayor). La API lee
// app/version.json al arrancar y la web la muestra en el login y en la barra superior.
const { name, version } = JSON.parse(readFileSync(join(raiz, 'package.json'), 'utf8'));
const publicado = new Date().toISOString();
const commit = commitActual();
writeFileSync(join(app, 'version.json'), `${JSON.stringify({ version, publicado, commit }, null, 2)}\n`);
writeFileSync(
join(destino, 'VERSION.txt'),
`${version}\nPublicado: ${new Date().toISOString()}\nNode de la publicación: ${process.version}\nSistema: ${process.platform}\n`,
`${name} ${version}\nPublicado: ${publicado}\nCommit: ${commit ?? '(sin git)'}\nNode de la publicación: ${process.version}\nSistema: ${process.platform}\n`,
);
console.log(`\nListo: ${destino} (${tamano(destino)})`);
console.log(`Versión ${version} · commit ${commit ?? '(sin git)'}`);
if (commit?.endsWith('-modificado')) console.log('Atención: había cambios sin commit; el release no corresponde exactamente a ese commit.');
console.log('Siguiente paso: copie esa carpeta al servidor y siga DEPLOY.md.');