From 6a4924bb16550c896ed503e8f16b597c0208fb18 Mon Sep 17 00:00:00 2001
From: GyDi <segydi@foxmail.com>
Date: Sat, 19 Mar 2022 14:04:58 +0800
Subject: [PATCH] chore: update log supports

---
 UPDATELOG.md          | 11 +++++++++++
 scripts/publish.mjs   |  6 ++++++
 scripts/release.mjs   |  3 ++-
 scripts/updatelog.mjs | 44 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 63 insertions(+), 1 deletion(-)
 create mode 100644 UPDATELOG.md
 create mode 100644 scripts/updatelog.mjs

diff --git a/UPDATELOG.md b/UPDATELOG.md
new file mode 100644
index 0000000..6083172
--- /dev/null
+++ b/UPDATELOG.md
@@ -0,0 +1,11 @@
+## v0.0.23
+
+### Features
+
+- i18n supports
+- Remote profile User Agent supports
+
+### Bug Fixes
+
+- clash config file case ignore
+- clash `external-controller` only port
diff --git a/scripts/publish.mjs b/scripts/publish.mjs
index 6c2e471..523ad18 100644
--- a/scripts/publish.mjs
+++ b/scripts/publish.mjs
@@ -1,9 +1,11 @@
 import fs from "fs-extra";
 import { createRequire } from "module";
 import { execSync } from "child_process";
+import { resolveUpdateLog } from "./updatelog.mjs";
 
 const require = createRequire(import.meta.url);
 
+// publish
 async function resolvePublish() {
   const flag = process.argv[2] ?? "patch";
   const packageJson = require("../package.json");
@@ -26,6 +28,10 @@ async function resolvePublish() {
   packageJson.version = nextVersion;
   tauriJson.package.version = nextVersion;
 
+  // 发布更新前先写更新日志
+  const nextTag = `v${nextVersion}`;
+  await resolveUpdateLog(nextTag);
+
   await fs.writeFile(
     "./package.json",
     JSON.stringify(packageJson, undefined, 2)
diff --git a/scripts/release.mjs b/scripts/release.mjs
index f2ffa21..8d12c32 100644
--- a/scripts/release.mjs
+++ b/scripts/release.mjs
@@ -1,5 +1,6 @@
 import fetch from "node-fetch";
 import { getOctokit, context } from "@actions/github";
+import { resolveUpdateLog } from "./updatelog.mjs";
 
 const UPDATE_TAG_NAME = "updater";
 const UPDATE_JSON_FILE = "update.json";
@@ -34,7 +35,7 @@ async function resolveRelease() {
 
   const updateData = {
     name: tag.name,
-    notes: latestRelease.body, // use the release body directly
+    notes: await resolveUpdateLog(tag.name), // use updatelog.md
     pub_date: new Date().toISOString(),
     platforms: {
       win64: { signature: "", url: "" },
diff --git a/scripts/updatelog.mjs b/scripts/updatelog.mjs
new file mode 100644
index 0000000..fae7f62
--- /dev/null
+++ b/scripts/updatelog.mjs
@@ -0,0 +1,44 @@
+import fs from "fs-extra";
+import path from "path";
+
+const UPDATE_LOG = "UPDATELOG.md";
+
+// parse the UPDATELOG.md
+export async function resolveUpdateLog(tag) {
+  const cwd = process.cwd();
+
+  const reTitle = /^## v[\d\.]+/;
+  const reEnd = /^---/;
+
+  const file = path.join(cwd, UPDATE_LOG);
+
+  if (!(await fs.pathExists(file))) {
+    throw new Error("could not found UPDATELOG.md");
+  }
+
+  const data = await fs.readFile(file).then((d) => d.toString("utf8"));
+
+  const map = {};
+  let p = "";
+
+  data.split("\n").forEach((line) => {
+    if (reTitle.test(line)) {
+      p = line.slice(3).trim();
+      if (!map[p]) {
+        map[p] = [];
+      } else {
+        throw new Error(`Tag ${p} dup`);
+      }
+    } else if (reEnd.test(line)) {
+      p = "";
+    } else if (p) {
+      map[p].push(line);
+    }
+  });
+
+  if (!map[tag]) {
+    throw new Error(`could not found "${tag}" in UPDATELOG.md`);
+  }
+
+  return map[tag].join("\n").trim();
+}
-- 
GitLab