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.

73 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 },
})
}