summaryrefslogtreecommitdiff
path: root/tools/release/00_start_release.ts
blob: 6c0c555a0d4b72d51876035221a1d3c3ef340c5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env -S deno run -A --lock=tools/deno.lock.json
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { DenoWorkspace } from "./deno_workspace.ts";
import { $, createOctoKit, semver } from "./deps.ts";

$.logStep("Loading cli crate...");
const workspace = await DenoWorkspace.load();
const cliCrate = workspace.getCliCrate();
const nextVersion = getNextVersion(semver.parse(cliCrate.version)!);

$.logStep("Creating gist with instructions...");
const octoKit = createOctoKit();
const result = await octoKit.request("POST /gists", {
  description: `Deno CLI v${nextVersion.toString()} release checklist`,
  public: false,
  files: {
    "release_instructions.md": {
      content: buildDenoReleaseInstructionsDoc(),
    },
  },
});

$.log("==============================================");
$.log("Created gist with instructions!");
$.log("");
$.log(`  ${result.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.inc("patch");
  } else if (Deno.args.some((a) => a === "--minor")) {
    return originalVersion.inc("minor");
  } else if (Deno.args.some((a) => a === "--major")) {
    return originalVersion.inc("major");
  } else {
    throw new Error("Missing argument");
  }
}

function buildDenoReleaseInstructionsDoc() {
  const currentDirPath = $.path.dirname($.path.fromFileUrl(import.meta.url));
  const templateText = Deno.readTextFileSync(
    $.path.join(currentDirPath, "release_doc_template.md"),
  );
  return `# Deno CLI ${nextVersion.toString()} Release Checklist\n\n${templateText}`;
}