release: restore v2.1.19 baseline for v2.1.24
CI / verify (push) Has been cancelled

Restore the v2.1.19 application baseline and retain only the focused import preflight summary with duplicate, unavailable, destination, job, and size-limit visibility.
This commit is contained in:
Sucukdeluxe
2026-08-17 04:25:22 +02:00
parent 9a213a7395
commit d7c9f287e4
87 changed files with 2185 additions and 16125 deletions
+3 -118
View File
@@ -23,75 +23,6 @@ test('release arguments reject a malformed transport tag', async () => {
);
});
test('release notes accept English and reject German or French', async () => {
const { createReleasePlan, parseReleaseArgs } = await import(releasePlanUrl);
for (const notes of [
'Security improvements and more reliable updates.',
'Uploads now resume correctly after network interruptions.',
'Faster uploads, smoother recovery.',
'Hardened credential redaction.'
]) {
assert.equal(
createReleasePlan(parseReleaseArgs(['2.1.21', '--transport-tag', 'v2.1.21', notes])).releaseBody,
notes
);
}
for (const notes of [
'Sicherheitsverbesserungen und zuverlässigere Updates.',
'Uploads werden nach Netzwerkunterbrechungen jetzt korrekt fortgesetzt.',
'Améliorations de sécurité et mises à jour plus fiables.',
'Les téléversements reprennent correctement après les interruptions réseau.',
'Security update et corrections.',
'Das Programm korrigiert Probleme im update.',
'Uploads laufen wieder stabil.'
]) {
assert.throws(
() => createReleasePlan(parseReleaseArgs(['2.1.21', '--transport-tag', 'v2.1.21', notes])),
/English release notes are required/
);
}
});
test('release arguments reject unknown, misspelled, and duplicate options', async () => {
const { parseReleaseArgs } = await import(releasePlanUrl);
assert.deepEqual(
parseReleaseArgs(['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Hardened credential redaction.', '--dry-run']),
{
version: '2.1.21',
transportTag: 'v2.1.21',
notes: 'Hardened credential redaction.',
dryRun: true
}
);
const invalidArgs = [
['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Release notes', '--publish'],
['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Release notes', '--dryrun'],
['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Release notes', '-dry-run'],
['2.1.21', '--transport-tag', 'v2.1.21', '-notes', 'Release notes'],
['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Release notes', '--dry-run', '--dry-run'],
['2.1.21', '--transport-tag', 'v2.1.21', '--notes', 'Release notes', '--notes', 'Other notes'],
['2.1.21', '--transport-tag', 'v2.1.21', '--transport-tag', 'v2.1.22', '--notes', 'Release notes']
];
for (const args of invalidArgs) {
assert.throws(() => parseReleaseArgs(args), /option/i);
}
});
test(['GitHub and ', ['Gi', 'tea'].join(''), ' CI verify version tag pushes'].join(''), () => {
const workflowPaths = ['.github/workflows/ci.yml', `${['.', ['gi', 'tea'].join('')].join('')}/workflows/ci.yml`];
for (const relativePath of workflowPaths) {
const workflow = fs.readFileSync(path.resolve(__dirname, '..', relativePath), 'utf8');
const lines = workflow.split(/\r?\n/);
const pushIndex = lines.indexOf(' push:');
const pushTrigger = [];
for (let index = pushIndex + 1; index < lines.length && lines[index].startsWith(' '); index++) {
pushTrigger.push(lines[index]);
}
assert.ok(pushTrigger.includes(" tags: ['v*']"), relativePath);
}
});
test('matching GitHub release notes replace the private release body', async () => {
const calls = [];
const notes = await fetchGithubReleaseNotes('2.1.0', 'Private fallback', async (url, options) => {
@@ -259,7 +190,7 @@ test('release plan keeps product artifacts separate from the transport tag', asy
}, {
version: '2.0.7',
transportTag: 'v3.3.115',
releaseTitle: 'Multi Hoster Uploader v2.0.7',
releaseTitle: 'Multi-Hoster-Upload v2.0.7',
releaseBody: 'Update visibility',
expectedArtifacts: [
'Multi-Hoster-Upload Setup 2.0.7.exe',
@@ -271,29 +202,13 @@ test('release plan keeps product artifacts separate from the transport tag', asy
});
});
test('GitHub release metadata uses the normalized uploaded asset name', async () => {
const { createReleasePlan, parseReleaseArgs, renderLatestYml } = await import(releasePlanUrl);
const plan = createReleasePlan(parseReleaseArgs(['2.1.20', '--transport-tag', 'v2.1.20', 'Release notes']));
const latestYml = renderLatestYml(plan, 'abc123', 456, '2026-08-13T12:00:00.000Z', plan.githubSetupName);
assert.deepEqual(plan.githubExpectedArtifacts, [
'Multi-Hoster-Upload.Setup.2.1.20.exe',
'Multi-Hoster-Upload.2.1.20.exe',
'Multi-Hoster-Upload.Setup.2.1.20.exe.blockmap',
'latest.yml'
]);
assert.match(latestYml, /url: Multi-Hoster-Upload\.Setup\.2\.1\.20\.exe/);
assert.match(latestYml, /path: Multi-Hoster-Upload\.Setup\.2\.1\.20\.exe/);
assert.doesNotMatch(latestYml, /Multi-Hoster-Upload Setup/);
});
test('compatible existing release preserves the recovery id', async () => {
const { createReleasePlan, parseReleaseArgs, resolveExistingReleaseId } = await import(releasePlanUrl);
const plan = createReleasePlan(parseReleaseArgs(['2.0.1', '--transport-tag', 'v3.3.109', 'Bridge notes']));
const release = {
id: 81,
tag_name: 'v3.3.109',
name: 'Multi Hoster Uploader v2.0.1',
name: 'Multi-Hoster-Upload v2.0.1',
body: 'Bridge notes',
draft: false,
prerelease: false,
@@ -318,36 +233,6 @@ test('incompatible existing release title fails closed', async () => {
assert.throws(
() => resolveExistingReleaseId(plan, release),
/Refusing recovery for v3\.3\.109: existing release title "Multi-Hoster-Upload v3\.3\.109" does not match "Multi Hoster Uploader v2\.0\.1"/
/Refusing recovery for v3\.3\.109: existing release title "Multi-Hoster-Upload v3\.3\.109" does not match "Multi-Hoster-Upload v2\.0\.1"/
);
});
test('existing release recovery rejects a mismatched transport tag', async () => {
const { createReleasePlan, parseReleaseArgs, resolveExistingReleaseId } = await import(releasePlanUrl);
const plan = createReleasePlan(parseReleaseArgs(['2.1.20', '--transport-tag', 'v2.1.20', 'Release notes']));
const release = {
id: 82,
tag_name: 'v9.9.9',
name: 'Multi Hoster Uploader v2.1.20'
};
assert.throws(
() => resolveExistingReleaseId(plan, release),
/existing release tag "v9\.9\.9" does not match "v2\.1\.20"/
);
});
test('checksum metadata accepts equivalent transport-specific installer separators', async () => {
const sha = crypto.randomBytes(64).toString('base64');
const metadata = await parseLatestYml('https://update.invalid/latest.yml', {
version: '2.1.22',
assetName: 'Multi-Hoster-Upload Setup 2.1.22.exe',
assetSize: 456
}, async () => ({
ok: true,
status: 200,
text: async () => `version: 2.1.22\npath: Multi-Hoster-Upload.Setup.2.1.22.exe\nsha512: ${sha}\nsize: 456\n`
}));
assert.equal(metadata.path, 'Multi-Hoster-Upload.Setup.2.1.22.exe');
});