1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 07:14:47 -05:00
denoland-deno/tools/release/00_start_release.ts
2024-01-01 19:58:21 +00:00

64 lines
2.1 KiB
TypeScript
Executable file

#!/usr/bin/env -S deno run -A --quiet --lock=tools/deno.lock.json
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { $, createOctoKit, semver } from "./deps.ts";
const currentDirPath = $.path(import.meta).parentOrThrow();
$.logStep("Getting next version...");
const nextVersion = getNextVersion(semver.parse(getCliVersion())!);
$.logStep("Creating gist with instructions...");
const octoKit = createOctoKit();
const result = await octoKit.request("POST /gists", {
description: `Deno CLI v${nextVersion} release checklist`,
public: false,
files: {
[`release_${nextVersion}.md`]: {
content: buildDenoReleaseInstructionsDoc(),
},
},
});
$.log("==============================================");
$.log("Created gist with instructions!");
$.log("");
$.log(` ${result.data.html_url}`);
$.log("");
$.log("Please fork the gist and follow the checklist.");
$.log("==============================================");
function getNextVersion(originalVersion: semver.SemVer) {
if (Deno.args.some((a) => a === "--patch")) {
return originalVersion.increment("patch");
} else if (Deno.args.some((a) => a === "--minor")) {
return originalVersion.increment("minor");
} else if (Deno.args.some((a) => a === "--major")) {
return originalVersion.increment("major");
} else {
throw new Error("Missing argument");
}
}
function buildDenoReleaseInstructionsDoc() {
const templateText = currentDirPath
.join("release_doc_template.md")
.readTextSync()
.replaceAll("$BRANCH_NAME", `v${nextVersion.major}.${nextVersion.minor}`)
.replaceAll("$VERSION", nextVersion.toString());
return `# Deno CLI ${nextVersion.toString()} Release Checklist\n\n${templateText}`;
}
function getCliVersion() {
const cargoTomlText = currentDirPath
.join("../../cli/Cargo.toml")
.readTextSync();
const result = cargoTomlText.match(/^version\s*=\s*"([^"]+)"$/m);
if (result == null || result.length !== 2) {
$.log("Cargo.toml");
$.log("==========");
$.log(cargoTomlText);
$.log("==========");
throw new Error("Could not find version in text.");
}
return result[1];
}