ci: publish rolling nightly releases with build deduplication (#2692)

* ci: publish rolling main nightly builds and retry failed jobs

Keep one nightly prerelease with stable artifact filenames. Publish
only successful Core, GUI, Mobile and Test runs from the same main
commit, and prevent older runs from replacing a newer nightly.

Generate dated changes against the latest published version release,
including manual prereleases, in newest-first order. Link the fixed
nightly download page from both READMEs.

Retry failed full-build jobs once on main and develop, excluding
cancelled runs and attempts after the first.

Validated with 28 Node tests, actionlint, archive packaging checks,
and read-only selection of real GitHub builds and release notes.
This commit is contained in:
KKRainbow authored and GitHub committed 2026-10-14 01:24:00 +08:00
1 parent 03078b4791
commit 36b4ffcc74
9 files changed
+617 -8

No files matched your search

+5 -5
View File
@@ -54,14 +54,14 @@ test('nightly retries a failed component using its last successful commit', asyn
assert.deepEqual(runs.map(run => run.workflow_id), ['gui.yml']);
});
test('main and develop are checked independently', async () => {
const successfulRuns = Object.fromEntries(workflows.map(workflow => [`main/${workflow}`, 'same']));
test('nightly only builds main even when other branches exist', async () => {
const runs = await nightly([
{ name: 'main', commit: { sha: 'same' } },
{ name: 'main', commit: { sha: 'new' } },
{ name: 'develop', commit: { sha: 'new' } },
], successfulRuns);
{ name: 'feature', commit: { sha: 'new' } },
]);
assert.deepEqual(runs.map(run => run.workflow_id), workflows);
assert.ok(runs.every(run => run.ref === 'develop'));
assert.ok(runs.every(run => run.ref === 'main'));
});
process.env.CORE_RUN_ID = '1';