diff --git a/bun.lock b/bun.lock index 5a91e9b..ed8dd10 100644 --- a/bun.lock +++ b/bun.lock @@ -20,7 +20,7 @@ "@types/node": "^25.3.0", "@types/ws": "^8.18.1", "electron": "^37.10.3", - "electron-builder": "^26.8.2", + "electron-builder": "26.8.2", "esbuild": "^0.25.12", "prettier": "^3.8.1", "typescript": "^5.9.3", diff --git a/package.json b/package.json index 82132f6..5d3fea7 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "@types/node": "^25.3.0", "@types/ws": "^8.18.1", "electron": "^37.10.3", - "electron-builder": "^26.8.2", + "electron-builder": "26.8.2", "esbuild": "^0.25.12", "prettier": "^3.8.1", "typescript": "^5.9.3" @@ -165,12 +165,21 @@ "include": "build/installer.nsh" }, "files": [ - "dist/**/*", - "stats/dist/**/*", - "vendor/texthooker-ui/docs/**/*", - "vendor/texthooker-ui/package.json", - "package.json", - "scripts/get-mpv-window-macos.swift" + "**/*", + "!src{,/**/*}", + "!launcher{,/**/*}", + "!stats/src{,/**/*}", + "!stats/index.html", + "!docs-site{,/**/*}", + "!changes{,/**/*}", + "!backlog{,/**/*}", + "!.tmp{,/**/*}", + "!release-*{,/**/*}", + "!vendor/subminer-yomitan{,/**/*}", + "!vendor/texthooker-ui/src{,/**/*}", + "!vendor/texthooker-ui/node_modules{,/**/*}", + "!vendor/texthooker-ui/.svelte-kit{,/**/*}", + "!vendor/texthooker-ui/package-lock.json" ], "extraResources": [ { diff --git a/src/release-workflow.test.ts b/src/release-workflow.test.ts index 438085b..570e4dc 100644 --- a/src/release-workflow.test.ts +++ b/src/release-workflow.test.ts @@ -10,6 +10,9 @@ const makefile = readFileSync(makefilePath, 'utf8'); const packageJsonPath = resolve(__dirname, '../package.json'); const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as { scripts: Record; + build?: { + files?: string[]; + }; }; test('publish release leaves prerelease unset so gh creates a normal release', () => { @@ -65,6 +68,18 @@ test('release package scripts disable implicit electron-builder publishing', () assert.match(packageJson.scripts['build:win:unsigned'] ?? '', /build-win-unsigned\.mjs/); }); +test('release packaging keeps default file inclusion and excludes large source-only trees explicitly', () => { + const files = packageJson.build?.files ?? []; + assert.ok(files.includes('**/*')); + assert.ok(files.includes('!src{,/**/*}')); + assert.ok(files.includes('!launcher{,/**/*}')); + assert.ok(files.includes('!stats/src{,/**/*}')); + assert.ok(files.includes('!.tmp{,/**/*}')); + assert.ok(files.includes('!release-*{,/**/*}')); + assert.ok(files.includes('!vendor/subminer-yomitan{,/**/*}')); + assert.ok(files.includes('!vendor/texthooker-ui/src{,/**/*}')); +}); + test('config example generation runs directly from source without unrelated bundle prerequisites', () => { assert.equal( packageJson.scripts['generate:config-example'], diff --git a/vendor/texthooker-ui b/vendor/texthooker-ui index a242951..a405710 160000 --- a/vendor/texthooker-ui +++ b/vendor/texthooker-ui @@ -1 +1 @@ -Subproject commit a2429519299e7535f06e7e847949835fbed585c3 +Subproject commit a40571007099838b498a9db58acabbdb5f1f7071