You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.7 KiB
72 lines
1.7 KiB
#!/usr/bin/env node |
|
|
|
/// @ts-check |
|
|
|
import fs from "fs" |
|
import cp from "child_process" |
|
import cmd from "cmd-ts" |
|
import toml from "toml" |
|
import assert from "assert" |
|
|
|
const CARGO_TOML_PATH = new URL("../Cargo.toml", import.meta.url).pathname |
|
|
|
const command = cmd.command({ |
|
name: "prepare-version", |
|
description: "Prepare a new fnm version", |
|
args: {}, |
|
async handler({}) { |
|
updateCargoToml(await getPackageVersion()) |
|
exec("cargo build --release") |
|
exec("pnpm generate-command-docs --binary-path=./target/release/fnm") |
|
exec("./.ci/record_screen.sh") |
|
}, |
|
}) |
|
|
|
cmd.run(cmd.binary(command), process.argv) |
|
|
|
////////////////////// |
|
// Helper functions // |
|
////////////////////// |
|
|
|
/** |
|
* @returns {Promise<string>} |
|
*/ |
|
async function getPackageVersion() { |
|
const pkgJson = await fs.promises.readFile( |
|
new URL("../package.json", import.meta.url), |
|
"utf8" |
|
) |
|
const version = JSON.parse(pkgJson).version |
|
assert(version, "package.json version is not set") |
|
return version |
|
} |
|
|
|
function updateCargoToml(nextVersion) { |
|
const cargoToml = fs.readFileSync(CARGO_TOML_PATH, "utf8") |
|
const cargoTomlContents = toml.parse(cargoToml) |
|
const currentVersion = cargoTomlContents.package.version |
|
|
|
const newToml = cargoToml.replace( |
|
`version = "${currentVersion}"`, |
|
`version = "${nextVersion}"` |
|
) |
|
|
|
if (newToml === cargoToml) { |
|
console.error("Cargo.toml didn't change, error!") |
|
process.exitCode = 1 |
|
return |
|
} |
|
|
|
fs.writeFileSync(CARGO_TOML_PATH, newToml, "utf8") |
|
|
|
return nextVersion |
|
} |
|
|
|
function exec(command, env) { |
|
console.log(`$ ${command}`) |
|
return cp.execSync(command, { |
|
cwd: new URL("..", import.meta.url), |
|
stdio: "inherit", |
|
env: { ...process.env, ...env }, |
|
}) |
|
}
|
|
|