소스 검색

build: Add portable for fixed webview2

MystiPanda 1 년 전
부모
커밋
b4b2e67260
5개의 변경된 파일119개의 추가작업 그리고 25개의 파일을 삭제
  1. 5 2
      .github/workflows/alpha.yml
  2. 6 22
      .github/workflows/release.yml
  3. 1 0
      package.json
  4. 100 0
      scripts/portable-fixed-webview2.mjs
  5. 7 1
      scripts/portable.mjs

+ 5 - 2
.github/workflows/alpha.yml

@@ -79,8 +79,6 @@ jobs:
         run: pnpm portable ${{ matrix.target }} --alpha
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
-          TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
 
   alpha-for-linux:
     strategy:
@@ -213,6 +211,11 @@ jobs:
           token: ${{ secrets.GITHUB_TOKEN }}
           files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup*
 
+      - name: Portable Bundle
+        run: pnpm portable-fixed-webview2 ${{ matrix.target }} --alpha
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
   update_tag:
     name: Update tag
     runs-on: ubuntu-latest

+ 6 - 22
.github/workflows/release.yml

@@ -76,8 +76,6 @@ jobs:
         run: pnpm portable ${{ matrix.target }}
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
-          TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
 
   release-for-linux:
     strategy:
@@ -198,33 +196,19 @@ jobs:
           Rename-Item '.\src-tauri\target\${{ matrix.target }}\release\bundle\nsis\Clash Verge_${{steps.build.outputs.appVersion}}_${{ matrix.arch }}-setup.nsis.zip.sig' 'Clash Verge_${{steps.build.outputs.appVersion}}_${{ matrix.arch }}_fixed_webview2-setup.nsis.zip.sig'
 
       - name: Upload Release
-        uses: softprops/action-gh-release@v2
-        with:
-          tag_name: v${{steps.build.outputs.appVersion}}
-          name: "Clash Verge Rev v${{steps.build.outputs.appVersion}}"
-          body: "More new features are now supported."
-          token: ${{ secrets.GITHUB_TOKEN }}
-          files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup.exe
-
-      - name: Upload Release
-        uses: softprops/action-gh-release@v2
+        uses: MystiPanda/action-gh-release@master
         with:
           tag_name: v${{steps.build.outputs.appVersion}}
           name: "Clash Verge Rev v${{steps.build.outputs.appVersion}}"
           body: "More new features are now supported."
           prerelease: true
           token: ${{ secrets.GITHUB_TOKEN }}
-          files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup.nsis.zip
+          files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup*
 
-      - name: Upload Release
-        uses: softprops/action-gh-release@v2
-        with:
-          tag_name: v${{steps.build.outputs.appVersion}}
-          name: "Clash Verge Rev v${{steps.build.outputs.appVersion}}"
-          body: "More new features are now supported."
-          prerelease: true
-          token: ${{ secrets.GITHUB_TOKEN }}
-          files: src-tauri/target/${{ matrix.target }}/release/bundle/nsis/*setup.nsis.zip.sig
+      - name: Portable Bundle
+        run: pnpm portable-fixed-webview2 ${{ matrix.target }}
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 
   release-update:
     runs-on: ubuntu-latest

+ 1 - 0
package.json

@@ -14,6 +14,7 @@
     "updater": "node scripts/updater.mjs",
     "updater-fixed-webview2": "node scripts/updater-fixed-webview2.mjs",
     "portable": "node scripts/portable.mjs",
+    "portable-fixed-webview2": "node scripts/portable-fixed-webview2.mjs",
     "prepare": "husky install"
   },
   "dependencies": {

+ 100 - 0
scripts/portable-fixed-webview2.mjs

@@ -0,0 +1,100 @@
+import fs from "fs-extra";
+import path from "path";
+import AdmZip from "adm-zip";
+import { createRequire } from "module";
+import { getOctokit, context } from "@actions/github";
+
+const target = process.argv.slice(2)[0];
+const alpha = process.argv.slice(2)[1];
+
+const ARCH_MAP = {
+  "x86_64-pc-windows-msvc": "x64",
+  "i686-pc-windows-msvc": "x86",
+  "aarch64-pc-windows-msvc": "arm64",
+};
+
+const PROCESS_MAP = {
+  x64: "x64",
+  ia32: "x86",
+  arm64: "arm64",
+};
+const arch = target ? ARCH_MAP[target] : PROCESS_MAP[process.arch];
+/// Script for ci
+/// 打包绿色版/便携版 (only Windows)
+async function resolvePortable() {
+  if (process.platform !== "win32") return;
+
+  const releaseDir = target
+    ? `./src-tauri/target/${target}/release`
+    : `./src-tauri/target/release`;
+
+  const configDir = path.join(releaseDir, ".config");
+
+  if (!(await fs.pathExists(releaseDir))) {
+    throw new Error("could not found the release dir");
+  }
+
+  await fs.mkdir(configDir);
+  await fs.createFile(path.join(configDir, "PORTABLE"));
+
+  const zip = new AdmZip();
+
+  zip.addLocalFile(path.join(releaseDir, "Clash Verge.exe"));
+  zip.addLocalFile(path.join(releaseDir, "clash-meta.exe"));
+  zip.addLocalFile(path.join(releaseDir, "clash-meta-alpha.exe"));
+  zip.addLocalFolder(path.join(releaseDir, "resources"), "resources");
+  zip.addLocalFolder(
+    path.join(
+      releaseDir,
+      `Microsoft.WebView2.FixedVersionRuntime.109.0.1518.78.${arch}`
+    ),
+    `Microsoft.WebView2.FixedVersionRuntime.109.0.1518.78.${arch}`
+  );
+  zip.addLocalFolder(configDir, ".config");
+
+  const require = createRequire(import.meta.url);
+  const packageJson = require("../package.json");
+  const { version } = packageJson;
+
+  const zipFile = `Clash.Verge_${version}_${arch}_fixed_webview2_portable.zip`;
+  zip.writeZip(zipFile);
+
+  console.log("[INFO]: create portable 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 tag = alpha ? "alpha" : process.env.TAG_NAME || `v${version}`;
+  console.log("[INFO]: upload to ", tag);
+
+  const { data: release } = await github.rest.repos.getReleaseByTag({
+    ...options,
+    tag,
+  });
+
+  let assets = release.assets.filter((x) => {
+    return x.name === zipFile;
+  });
+  if (assets.length > 0) {
+    let id = assets[0].id;
+    await github.rest.repos.deleteReleaseAsset({
+      ...options,
+      asset_id: id,
+    });
+  }
+
+  console.log(release.name);
+
+  await github.rest.repos.uploadReleaseAsset({
+    ...options,
+    release_id: release.id,
+    name: zipFile,
+    data: zip.toBuffer(),
+  });
+}
+
+resolvePortable().catch(console.error);

+ 7 - 1
scripts/portable.mjs

@@ -13,6 +13,12 @@ const ARCH_MAP = {
   "aarch64-pc-windows-msvc": "arm64",
 };
 
+const PROCESS_MAP = {
+  x64: "x64",
+  ia32: "x86",
+  arm64: "arm64",
+};
+const arch = target ? ARCH_MAP[target] : PROCESS_MAP[process.arch];
 /// Script for ci
 /// 打包绿色版/便携版 (only Windows)
 async function resolvePortable() {
@@ -42,7 +48,7 @@ async function resolvePortable() {
   const packageJson = require("../package.json");
   const { version } = packageJson;
 
-  const zipFile = `Clash.Verge_${version}_${ARCH_MAP[target]}_portable.zip`;
+  const zipFile = `Clash.Verge_${version}_${arch}_portable.zip`;
   zip.writeZip(zipFile);
 
   console.log("[INFO]: create portable zip successfully");