#!/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} */ 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 }, }) }