feat: implement Gitea update checks and installer management

This commit is contained in:
2026-05-16 23:10:05 +02:00
parent 955a1f7116
commit fbc709463f
13 changed files with 547 additions and 3 deletions
+68
View File
@@ -0,0 +1,68 @@
import assert from "node:assert/strict";
import test from "node:test";
import {
buildReleaseUpdate,
isVersionNewer,
sanitizeFileName,
selectInstallerAsset,
} from "../main/updates/update-utils";
test("isVersionNewer compares semantic versions with optional v prefix", () => {
assert.equal(isVersionNewer("v0.2.0", "0.1.9"), true);
assert.equal(isVersionNewer("0.1.0", "0.1.0"), false);
assert.equal(isVersionNewer("0.1.0", "0.2.0"), false);
});
test("selectInstallerAsset picks the first matching exe asset", () => {
const asset = selectInstallerAsset(
{
assets: [
{ name: "latest.yml", browser_download_url: "http://gitea/latest.yml" },
{ name: "Scoreko-setup-0.2.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.2.0.exe", size: 100 },
],
},
"Scoreko-setup-.*\\.exe$",
);
assert.deepEqual(asset, {
name: "Scoreko-setup-0.2.0.exe",
downloadUrl: "http://gitea/Scoreko-setup-0.2.0.exe",
size: 100,
});
});
test("buildReleaseUpdate returns null when the release is not newer", () => {
const update = buildReleaseUpdate(
{
tag_name: "v0.1.0",
assets: [{ name: "Scoreko-setup-0.1.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.1.0.exe" }],
},
"0.1.0",
"Scoreko-setup-.*\\.exe$",
);
assert.equal(update, null);
});
test("buildReleaseUpdate builds update info for newer releases", () => {
const update = buildReleaseUpdate(
{
tag_name: "v0.2.0",
name: "Scoreko 0.2.0",
html_url: "http://gitea/releases/v0.2.0",
assets: [{ name: "Scoreko-setup-0.2.0.exe", browser_download_url: "http://gitea/Scoreko-setup-0.2.0.exe" }],
},
"0.1.0",
"Scoreko-setup-.*\\.exe$",
);
assert.equal(update?.version, "0.2.0");
assert.equal(update?.title, "Scoreko 0.2.0");
assert.equal(update?.pageUrl, "http://gitea/releases/v0.2.0");
assert.equal(update?.installer.name, "Scoreko-setup-0.2.0.exe");
});
test("sanitizeFileName removes Windows-unsafe characters", () => {
assert.equal(sanitizeFileName('Scoreko:setup*"0.2.0.exe'), "Scoreko_setup__0.2.0.exe");
});