Use our own git clone in daft release notes

Conrad Irwin created

Change summary

script/draft-release-notes | 70 +++++++++++++++++++++++----------------
1 file changed, 41 insertions(+), 29 deletions(-)

Detailed changes

script/draft-release-notes 🔗

@@ -19,24 +19,45 @@ async function main() {
     process.exit(1);
   }
 
-  let priorVersion = [parts[0], parts[1], parts[2] - 1].join(".");
-  let suffix = "";
-
-  if (channel == "preview") {
-    suffix = "-pre";
-    if (parts[2] == 0) {
-      priorVersion = [parts[0], parts[1] - 1, 0].join(".");
-    }
-  } else if (!ensureTag(`v${priorVersion}`)) {
-    console.log("Copy the release notes from preview.");
+  // currently we can only draft notes for patch releases.
+  if (parts[2] == 0) {
     process.exit(0);
   }
 
+  let priorVersion = [parts[0], parts[1], parts[2] - 1].join(".");
+  let suffix = channel == "preview" ? "-pre" : "";
   let [tag, priorTag] = [`v${version}${suffix}`, `v${priorVersion}${suffix}`];
 
-  if (!ensureTag(tag) || !ensureTag(priorTag)) {
-    console.log("Could not draft release notes, missing a tag:", tag, priorTag);
-    process.exit(0);
+  try {
+    execFileSync("rm", ["-rf", "target/shallow_clone"]);
+    execFileSync("git", [
+      "clone",
+      "https://github.com/zed-industries/zed",
+      "target/shallow_clone",
+      "--filter=tree:0",
+      "--no-checkout",
+      "--branch",
+      tag,
+      "--depth",
+      100,
+    ]);
+    execFileSync("git", [
+      "-C",
+      "target/shallow_clone",
+      "rev-parse",
+      "--verify",
+      tag,
+    ]);
+    execFileSync("git", [
+      "-C",
+      "target/shallow_clone",
+      "rev-parse",
+      "--verify",
+      priorTag,
+    ]);
+  } catch (e) {
+    console.error(e.stderr.toString());
+    process.exit(1);
   }
 
   const newCommits = getCommits(priorTag, tag);
@@ -69,7 +90,13 @@ async function main() {
 function getCommits(oldTag, newTag) {
   const pullRequestNumbers = execFileSync(
     "git",
-    ["log", `${oldTag}..${newTag}`, "--format=DIVIDER\n%H|||%B"],
+    [
+      "-C",
+      "target/shallow_clone",
+      "log",
+      `${oldTag}..${newTag}`,
+      "--format=DIVIDER\n%H|||%B",
+    ],
     { encoding: "utf8" },
   )
     .replace(/\r\n/g, "\n")
@@ -99,18 +126,3 @@ function getCommits(oldTag, newTag) {
 
   return pullRequestNumbers;
 }
-
-function ensureTag(tag) {
-  try {
-    execFileSync("git", ["rev-parse", "--verify", tag]);
-    return true;
-  } catch (e) {
-    try {
-      execFileSync("git"[("fetch", "origin", "--shallow-exclude", tag)]);
-      execFileSync("git"[("fetch", "origin", "--deepen", "1")]);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-}