From 5147a070a16d8a8164edc3c14dc656e512e59f2a Mon Sep 17 00:00:00 2001 From: MystiPanda Date: Mon, 6 May 2024 19:13:08 +0800 Subject: [PATCH] build: Add portable for fixed webview2 --- .github/workflows/alpha.yml | 7 +- .github/workflows/release.yml | 28 ++------ package.json | 1 + scripts/portable-fixed-webview2.mjs | 100 ++++++++++++++++++++++++++++ scripts/portable.mjs | 8 ++- 5 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 scripts/portable-fixed-webview2.mjs diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index 1a7d2475..7cd61963 100644 --- a/.github/workflows/alpha.yml +++ b/.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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fe772590..065c73b3 100644 --- a/.github/workflows/release.yml +++ b/.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 diff --git a/package.json b/package.json index bb47f0f2..32a10125 100644 --- a/package.json +++ b/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": { diff --git a/scripts/portable-fixed-webview2.mjs b/scripts/portable-fixed-webview2.mjs new file mode 100644 index 00000000..76ecdc0e --- /dev/null +++ b/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); diff --git a/scripts/portable.mjs b/scripts/portable.mjs index 22b1fa2a..53c5cb16 100644 --- a/scripts/portable.mjs +++ b/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");