0
0
Fork 0
mirror of https://github.com/denoland/rusty_v8.git synced 2024-11-22 15:07:00 -05:00
denoland-rusty-v8/tools/auto_update_v8.ts
2022-11-11 00:31:07 +01:00

104 lines
3 KiB
TypeScript

const V8_TRACKING_BRANCH = "10.9-lkgr-denoland";
const AUTOROLL_BRANCH = "autoroll";
function extractVersion() {
const MAJOR_PREFIX = "#define V8_MAJOR_VERSION ";
const MINOR_PREFIX = "#define V8_MINOR_VERSION ";
const BUILD_PREFIX = "#define V8_BUILD_NUMBER ";
const PATCH_PREFIX = "#define V8_PATCH_LEVEL ";
const versionDotH = Deno.readTextFileSync("./v8/include/v8-version.h");
const lines = versionDotH.split("\n");
const major = parseInt(lines.find((s) => s.startsWith(MAJOR_PREFIX))!
.substring(MAJOR_PREFIX.length));
const minor = parseInt(lines.find((s) => s.startsWith(MINOR_PREFIX))!
.substring(MINOR_PREFIX.length));
const build = parseInt(lines.find((s) => s.startsWith(BUILD_PREFIX))!
.substring(BUILD_PREFIX.length));
const patch = parseInt(lines.find((s) => s.startsWith(PATCH_PREFIX))!
.substring(PATCH_PREFIX.length));
return `${major}.${minor}.${build}.${patch}`;
}
await run(["git", "checkout", "origin/main"]);
await run(["git", "submodule", "update", "--init", "--recursive", "v8"]);
const currentVersion = extractVersion();
console.log(`Starting auto update. Currently on ${currentVersion}`);
async function run(cmd: string[], cwd?: string) {
console.log("$", ...cmd);
const proc = Deno.run({ cmd, cwd });
const status = await proc.status();
if (!status.success) {
console.error(`Failed to run ${cmd.join(" ")}`);
Deno.exit(1);
}
}
// Update v8 submodule
await run(["git", "fetch", `origin`, V8_TRACKING_BRANCH], "./v8");
await run(["git", "checkout", `origin/${V8_TRACKING_BRANCH}`], "./v8");
const newVersion = extractVersion();
if (currentVersion == newVersion) {
console.log(`No new version available. Staying on ${newVersion}`);
Deno.exit(0);
}
console.log(`Updated to version ${newVersion}`);
// Update version in readme
let readme = Deno.readTextFileSync("README.md");
readme = readme.replace(
/V8 Version: \S+/,
`V8 Version: ${newVersion}`,
);
Deno.writeTextFileSync("README.md", readme);
// Stage the changes
await run(["git", "add", "v8", "README.md"]);
// Commit the changes
await run(["git", "commit", "-m", `Rolling to V8 ${newVersion}`]);
// Push to the `denoland/rusty_v8#autoroll`
await run(["git", "push", "origin", `+HEAD:refs/heads/${AUTOROLL_BRANCH}`]);
// Fetch the remote branch so `gh` cli can find it
await run(["git", "fetch", "origin", AUTOROLL_BRANCH]);
const proc = Deno.run({
cmd: ["gh", "pr", "view", AUTOROLL_BRANCH, "--json", "state"],
stdout: "piped",
});
const status = await proc.status();
const isPrOpen = status.success
? JSON.parse(new TextDecoder().decode(await proc.output())).state === "OPEN"
: false;
if (isPrOpen) {
console.log("Already open PR. Editing existing PR.");
await run([
"gh",
"pr",
"edit",
AUTOROLL_BRANCH,
"--title",
`Rolling to V8 ${newVersion}`,
]);
} else {
console.log("No PR open. Creating a new PR.");
await run([
"gh",
"pr",
"create",
"--title",
`Rolling to V8 ${newVersion}`,
"--body",
"",
"--head",
`denoland:${AUTOROLL_BRANCH}`,
]);
}