chore: Bump version to 1.0.3 and enhance update handling in the desktop application. Introduce release date stamping before build, add version listing functionality, and improve update prompts with detailed version information. Update README and scripts for clarity on release date management and version publishing.

This commit is contained in:
erik
2026-07-11 01:02:00 -05:00
parent c8853de808
commit f355a954a3
17 changed files with 917 additions and 56 deletions
@@ -215,10 +215,113 @@ async function downloadAndInstall(manifest, onProgress) {
return { ok: true, destPath };
}
/**
* Fecha de release de la versión instalada, leída desde MinIO
* (latest.json si coincide la versión, si no DATA.txt de esa carpeta).
* @returns {Promise<{ releaseDate?: string, releaseDateDisplay?: string } | null>}
*/
async function getCurrentReleaseMeta() {
const base = LATEST_JSON_URL.replace(/\/latest\.json$/i, "");
try {
const { buffer } = await download(LATEST_JSON_URL);
if (buffer) {
/** @type {UpdateManifest} */
const manifest = JSON.parse(buffer.toString("utf8"));
if (manifest?.version && compareSemver(CURRENT_VERSION, manifest.version) === 0) {
if (!manifest.releaseDateDisplay) {
try {
const dataUrl = `${base}/${CURRENT_VERSION}/DATA.txt`;
const { buffer: dataBuf } = await download(dataUrl);
const display = dataBuf?.toString("utf8").trim().split(/\r?\n/)[0]?.trim();
if (display) {
manifest.releaseDateDisplay = display;
const iso = display.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
if (iso && !manifest.releaseDate) {
manifest.releaseDate = `${iso[3]}-${iso[2].padStart(2, "0")}-${iso[1].padStart(2, "0")}`;
}
}
} catch {
/* opcional */
}
}
if (manifest.releaseDate || manifest.releaseDateDisplay) {
return {
releaseDate: manifest.releaseDate,
releaseDateDisplay: manifest.releaseDateDisplay,
};
}
}
}
} catch {
/* probar DATA.txt de la versión instalada */
}
try {
const dataUrl = `${base}/${CURRENT_VERSION}/DATA.txt`;
const { buffer: dataBuf } = await download(dataUrl);
const display = dataBuf?.toString("utf8").trim().split(/\r?\n/)[0]?.trim();
if (!display) return null;
const isoMatch = display.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
return {
releaseDateDisplay: display,
releaseDate: isoMatch
? `${isoMatch[3]}-${isoMatch[2].padStart(2, "0")}-${isoMatch[1].padStart(2, "0")}`
: undefined,
};
} catch {
return null;
}
}
/**
* Lista todas las versiones publicadas (versions.json).
* Si no existe, cae a [latest.json].
* @returns {Promise<{ currentVersion: string, versions: UpdateManifest[], error?: string }>}
*/
async function listVersions() {
const versionsUrl = LATEST_JSON_URL.replace(/\/latest\.json$/i, "/versions.json");
try {
const { buffer } = await download(versionsUrl);
if (buffer) {
const parsed = JSON.parse(buffer.toString("utf8"));
const versions = Array.isArray(parsed?.versions)
? parsed.versions.filter((v) => v?.version && v?.url && v?.fileName)
: [];
if (versions.length > 0) {
versions.sort((a, b) => compareSemver(b.version, a.version));
return { currentVersion: CURRENT_VERSION, versions };
}
}
} catch {
/* fallback latest */
}
try {
const { buffer } = await download(LATEST_JSON_URL);
if (!buffer) {
return { currentVersion: CURRENT_VERSION, versions: [], error: "Respuesta vacía" };
}
const manifest = JSON.parse(buffer.toString("utf8"));
if (!manifest?.version || !manifest?.url || !manifest?.fileName) {
return { currentVersion: CURRENT_VERSION, versions: [], error: "Manifiesto inválido" };
}
return { currentVersion: CURRENT_VERSION, versions: [manifest] };
} catch (err) {
return {
currentVersion: CURRENT_VERSION,
versions: [],
error: err instanceof Error ? err.message : String(err),
};
}
}
module.exports = {
CURRENT_VERSION,
LATEST_JSON_URL,
compareSemver,
checkForUpdates,
downloadAndInstall,
getCurrentReleaseMeta,
listVersions,
};