Files
EasyCLIProxyAPI/scripts/set-app-version.mjs
T

46 lines
1.6 KiB
JavaScript

import { spawnSync } from 'node:child_process';
import { readFile, writeFile } from 'node:fs/promises';
import { dirname, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import {
parseCargoPackageVersion,
setCargoLockPackageVersion,
setCargoPackageVersion,
validateAppVersion,
} from './app-version.mjs';
const requestedVersion = process.argv[2];
if (!requestedVersion) {
throw new Error('Usage: node scripts/set-app-version.mjs <semver>');
}
const version = validateAppVersion(requestedVersion, 'requested app version');
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const manifest = join(root, 'src-tauri', 'Cargo.toml');
const lockfile = join(root, 'src-tauri', 'Cargo.lock');
const contents = await readFile(manifest, 'utf8');
const lockContents = await readFile(lockfile, 'utf8');
const previousVersion = parseCargoPackageVersion(contents, manifest);
if (previousVersion !== version) {
await Promise.all([
writeFile(manifest, setCargoPackageVersion(contents, version, manifest)),
writeFile(lockfile, setCargoLockPackageVersion(lockContents, 'cpa-gui', version, lockfile)),
]);
}
const cargo = process.platform === 'win32' ? 'cargo.exe' : 'cargo';
const metadata = spawnSync(cargo, [
'metadata',
'--manifest-path', manifest,
'--no-deps',
'--format-version', '1',
], { stdio: 'ignore' });
if (metadata.error) throw metadata.error;
if (metadata.status !== 0) {
throw new Error(`cargo metadata failed with exit code ${metadata.status}`);
}
console.log(`Applied app version ${version}${previousVersion === version ? ' (unchanged)' : ''}`);