mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-14 21:20:48 +08:00
tauri-cli's get_binaries() adds every file in src-tauri/src/bin/ as a bundle binary, and the deb/rpm packagers copy each one to /usr/bin, so the dev-only bindings generator ended up as /usr/bin/frontend-contract (1.0 MB) in release packages and broke downstream repackaging (Copr: "Installed but unpackaged file(s) found"). There is no bundler option to exclude a binary, so move the generator to an example target, which cargo keeps dev-only and get_binaries() never scans, and invoke it via 'cargo run --example'. Ref https://github.com/clash-verge-rev/clash-verge-rev/pull/8131#issuecomment-6137907930
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { execFileSync } from 'node:child_process'
|
|
import fs from 'node:fs'
|
|
import os from 'node:os'
|
|
import path from 'node:path'
|
|
|
|
const ROOT = path.resolve(import.meta.dirname, '..')
|
|
const BINDINGS = path.join(ROOT, 'src/services/bindings.ts')
|
|
const args = process.argv.slice(2)
|
|
if (args.length > 1 || (args.length === 1 && args[0] !== '--check')) {
|
|
console.error('usage: gen-contract.mjs [--check]')
|
|
process.exit(2)
|
|
}
|
|
const check = args[0] === '--check'
|
|
const temporary = check
|
|
? fs.mkdtempSync(path.join(os.tmpdir(), 'verge-contract-'))
|
|
: null
|
|
const output = temporary ? path.join(temporary, 'bindings.ts') : BINDINGS
|
|
try {
|
|
execFileSync(
|
|
'cargo',
|
|
[
|
|
'run',
|
|
'-p',
|
|
'clash-verge',
|
|
'--example',
|
|
'frontend-contract',
|
|
'--locked',
|
|
'-q',
|
|
...(check ? ['--', output] : []),
|
|
],
|
|
{ cwd: ROOT, stdio: 'inherit' },
|
|
)
|
|
const formatted = execFileSync(
|
|
process.execPath,
|
|
[
|
|
path.join(ROOT, 'node_modules/@biomejs/biome/bin/biome'),
|
|
'format',
|
|
'--stdin-file-path',
|
|
BINDINGS,
|
|
],
|
|
{ cwd: ROOT, input: fs.readFileSync(output) },
|
|
)
|
|
if (check) {
|
|
if (!formatted.equals(fs.readFileSync(BINDINGS))) {
|
|
console.error(
|
|
'IPC bindings are out of date. Run pnpm gen:contract and commit the generated file.',
|
|
)
|
|
process.exitCode = 1
|
|
}
|
|
} else {
|
|
fs.writeFileSync(BINDINGS, formatted)
|
|
}
|
|
} finally {
|
|
if (temporary) fs.rmSync(temporary, { recursive: true, force: true })
|
|
}
|