feat: add auto update support

This commit is contained in:
2026-05-15 01:47:56 -07:00
parent d1ec678d7a
commit 094bcce0dc
101 changed files with 4978 additions and 163 deletions
+29 -2
View File
@@ -14,7 +14,17 @@ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as {
scripts: Record<string, string>;
build?: {
afterPack?: string;
electronUpdaterCompatibility?: string;
files?: string[];
extraResources?: Array<{
from?: string;
to?: string;
}>;
publish?: Array<{
provider?: string;
owner?: string;
repo?: string;
}>;
};
};
@@ -72,14 +82,21 @@ test('release workflow generates release notes from committed changelog output',
test('release workflow includes the Windows installer in checksums and uploaded assets', () => {
assert.match(
releaseWorkflow,
/files=\(release\/\*\.AppImage release\/\*\.dmg release\/\*\.exe release\/\*\.zip release\/\*\.tar\.gz dist\/launcher\/subminer\)/,
/files=\(release\/\*\.AppImage release\/\*\.dmg release\/\*\.exe release\/\*\.zip release\/\*\.tar\.gz release\/\*\.yml release\/\*\.blockmap dist\/launcher\/subminer\)/,
);
assert.match(
releaseWorkflow,
/artifacts=\([\s\S]*release\/\*\.exe[\s\S]*release\/SHA256SUMS\.txt[\s\S]*\)/,
/artifacts=\([\s\S]*release\/\*\.exe[\s\S]*release\/\*\.yml[\s\S]*release\/\*\.blockmap[\s\S]*release\/SHA256SUMS\.txt[\s\S]*\)/,
);
});
test('release package metadata enables GitHub updater metadata without builder uploads', () => {
assert.equal(packageJson.build?.publish?.[0]?.provider, 'github');
assert.equal(packageJson.build?.publish?.[0]?.owner, 'ksyasuda');
assert.equal(packageJson.build?.publish?.[0]?.repo, 'SubMiner');
assert.equal(packageJson.build?.electronUpdaterCompatibility, '>=2.16');
});
test('release workflow writes checksum entries using release asset basenames', () => {
assert.match(releaseWorkflow, /: > release\/SHA256SUMS\.txt/);
assert.match(releaseWorkflow, /for file in "\$\{files\[@\]\}"; do/);
@@ -139,6 +156,16 @@ test('release packaging keeps default file inclusion and excludes large source-o
assert.ok(files.includes('!node_modules/@libsql/linux-x64-musl{,/**/*}'));
});
test('release packaging stages generated launcher as an app resource', () => {
assert.ok(
packageJson.build?.extraResources?.some(
(resource) =>
resource.from === 'dist/launcher/subminer' && resource.to === 'launcher/subminer',
),
);
assert.match(packageJson.scripts.build ?? '', /bun run build:launcher/);
});
test('config example generation runs directly from source without unrelated bundle prerequisites', () => {
assert.equal(
packageJson.scripts['generate:config-example'],