GyDi 3 лет назад
Родитель
Сommit
0d189ca617
3 измененных файлов с 61 добавлено и 0 удалено
  1. 4 0
      .github/workflows/ci.yml
  2. 1 0
      package.json
  3. 56 0
      scripts/green.mjs

+ 4 - 0
.github/workflows/ci.yml

@@ -67,6 +67,10 @@ jobs:
           releaseDraft: false
           prerelease: true
 
+      - name: Green zip bundle
+        runs: |
+          yarn run green
+
   release-update:
     needs: release
     runs-on: macos-11

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
     "web:build": "tsc && vite build",
     "web:serve": "vite preview",
     "check": "node scripts/check.mjs",
+    "green": "node scripts/green.mjs",
     "publish": "node scripts/publish.mjs",
     "release": "node scripts/release.mjs",
     "prepare": "husky install"

+ 56 - 0
scripts/green.mjs

@@ -0,0 +1,56 @@
+import fs from "fs-extra";
+import path from "path";
+import AdmZip from "adm-zip";
+import { createRequire } from "module";
+import { getOctokit, context } from "@actions/github";
+
+/// Script for ci
+/// 打包绿色版/便携版 (only Windows)
+async function resolveGreen() {
+  if (process.platform !== "win32") return;
+
+  const releaseDir = "./src-tauri/target/release";
+
+  if (!(await fs.pathExists(releaseDir))) {
+    throw new Error("could not found the release dir");
+  }
+
+  const zip = new AdmZip();
+
+  zip.addLocalFile(path.join(releaseDir, "Clash Verge.exe"));
+  zip.addLocalFile(path.join(releaseDir, "clash.exe"));
+  zip.addLocalFolder(path.join(releaseDir, "resources"), "resources");
+
+  const require = createRequire(import.meta.url);
+  const packageJson = require("../package.json");
+  const { version } = packageJson;
+
+  const zipFile = `Clash.Verge_${version}_x64_green.zip`;
+  zip.writeZip(zipFile);
+
+  console.log("[INFO]: create green zip successfully");
+
+  // push release assets
+  if (process.env.GITHUB_TOKEN === undefined) {
+    throw new Error("GITHUB_TOKEN is required");
+  }
+
+  const options = { owner: context.repo.owner, repo: context.repo.repo };
+  const github = getOctokit(process.env.GITHUB_TOKEN);
+
+  const { data: release } = await github.rest.repos.getReleaseByTag({
+    ...options,
+    tag: `v${version}`,
+  });
+
+  console.log(release.name);
+
+  await github.rest.repos.uploadReleaseAsset({
+    ...options,
+    release_id: release.id,
+    name: zipFile,
+    data: zip.toBuffer(),
+  });
+}
+
+resolveGreen().catch(console.error);