Ver código fonte

feat: Add Windows x86 and Linux armv7 Support (#44)

* feat: Add Windows x86 and Linux armv7 Support

* ci: Remove Linux armv7 Support
Pylogmon 1 ano atrás
pai
commit
77f69fd223
3 arquivos alterados com 78 adições e 5 exclusões
  1. 39 2
      .github/workflows/release.yml
  2. 6 0
      scripts/check.mjs
  3. 33 3
      scripts/updater.mjs

+ 39 - 2
.github/workflows/release.yml

@@ -18,6 +18,8 @@ jobs:
         include:
           - os: windows-latest
             target: x86_64-pc-windows-msvc
+          - os: windows-latest
+            target: i686-pc-windows-msvc
           # - os: windows-latest
           #   target: aarch64-pc-windows-msvc
           - os: macos-latest
@@ -28,6 +30,8 @@ jobs:
             target: x86_64-unknown-linux-gnu
           - os: ubuntu-latest
             target: aarch64-unknown-linux-gnu
+          # - os: ubuntu-latest
+          #   target: armv7-unknown-linux-gnueabihf
 
     runs-on: ${{ matrix.os }}
     if: startsWith(github.repository, 'wonfen')
@@ -67,8 +71,8 @@ jobs:
       - name: Install Dependencies (Ubuntu Only)
         if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'aarch64')
         run: |
-          sed 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list
-          sudo sed -i 's/mirror+file/[arch=amd64,i386] mirror+file/g' /etc/apt/sources.list
+          sed 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch-=amd64] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list
+          sudo sed -i 's/mirror+file/[arch=amd64] mirror+file/g' /etc/apt/sources.list
           cat /etc/apt/sources.list
           cat /etc/apt/sources.list.d/ports.list
           sudo dpkg --add-architecture arm64
@@ -76,6 +80,18 @@ jobs:
           sudo apt-get install -y libncurses6:arm64 libtinfo6:arm64 linux-libc-dev:arm64 libncursesw6:arm64 libssl3:arm64 libcups2:arm64
           sudo apt-get install -y --no-install-recommends g++-aarch64-linux-gnu libc6-dev-arm64-cross libssl-dev:arm64 libwebkit2gtk-4.0-dev:arm64 libgtk-3-dev:arm64 patchelf:arm64 librsvg2-dev:arm64 libayatana-appindicator3-dev:arm64
 
+      - name: Install Dependencies (Ubuntu Only)
+        if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'armv7')
+        run: |
+          sed 's/mirror+file:\/etc\/apt\/apt-mirrors.txt/[arch-=amd64] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/ports.list
+          sudo sed -i 's/mirror+file/[arch=amd64] mirror+file/g' /etc/apt/sources.list
+          cat /etc/apt/sources.list
+          cat /etc/apt/sources.list.d/ports.list
+          sudo dpkg --add-architecture armhf
+          sudo apt-get update
+          sudo apt-get install -y libncurses6:armhf libtinfo6:armhf linux-libc-dev:armhf libncursesw6:armhf libssl3:armhf libcups2:armhf
+          sudo apt-get install -y --no-install-recommends g++-arm-linux-gnueabihf libc6-dev-armhf-cross libssl-dev:armhf libwebkit2gtk-4.0-dev:armhf libgtk-3-dev:armhf patchelf:armhf librsvg2-dev:armhf libayatana-appindicator3-dev:armhf
+
       - name: Pnpm install and check
         run: |
           pnpm i
@@ -118,6 +134,27 @@ jobs:
           tauriScript: pnpm
           args: -f default-meta --target ${{ matrix.target }} -b deb,updater
 
+      - name: Tauri build (Ubuntu Armv7)
+        if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'armv7')
+        uses: tauri-apps/tauri-action@v0
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
+          TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
+          CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
+          CC_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-gcc
+          CXX_armv7_unknown_linux_gnueabihf: arm-linux-gnueabihf-g++
+          PKG_CONFIG_PATH: /usr/lib/arm-linux-gnueabihf/pkgconfig
+          PKG_CONFIG_ALLOW_CROSS: 1
+        with:
+          tagName: v__VERSION__
+          releaseName: "Clash Verge v__VERSION__"
+          releaseBody: "More new features are now supported."
+          releaseDraft: false
+          prerelease: false
+          tauriScript: pnpm
+          args: -f default-meta --target ${{ matrix.target }} -b deb,updater
+
       - name: Portable Bundle
         if: matrix.os == 'windows-latest'
         run: |

+ 6 - 0
scripts/check.mjs

@@ -40,11 +40,13 @@ let META_VERSION;
 
 const META_MAP = {
   "win32-x64": "mihomo-windows-amd64",
+  "win32-ia32": "mihomo-windows-386",
   "win32-arm64": "mihomo-windows-arm64",
   "darwin-x64": "mihomo-darwin-amd64",
   "darwin-arm64": "mihomo-darwin-arm64",
   "linux-x64": "mihomo-linux-amd64",
   "linux-arm64": "mihomo-linux-arm64",
+  "linux-arm": "mihomo-linux-armv7",
 };
 
 /*
@@ -52,19 +54,23 @@ const META_MAP = {
  */
 const PLATFORM_MAP = {
   "x86_64-pc-windows-msvc": "win32",
+  "i686-pc-windows-msvc": "win32",
   "aarch64-pc-windows-msvc": "win32",
   "x86_64-apple-darwin": "darwin",
   "aarch64-apple-darwin": "darwin",
   "x86_64-unknown-linux-gnu": "linux",
   "aarch64-unknown-linux-gnu": "linux",
+  "armv7-unknown-linux-gnueabihf": "linux",
 };
 const ARCH_MAP = {
   "x86_64-pc-windows-msvc": "x64",
+  "i686-pc-windows-msvc": "ia32",
   "aarch64-pc-windows-msvc": "arm64",
   "x86_64-apple-darwin": "x64",
   "aarch64-apple-darwin": "arm64",
   "x86_64-unknown-linux-gnu": "x64",
   "aarch64-unknown-linux-gnu": "arm64",
+  "armv7-unknown-linux-gnueabihf": "arm",
 };
 
 /**

+ 33 - 3
scripts/updater.mjs

@@ -54,17 +54,45 @@ async function resolveUpdater() {
     const { name, browser_download_url } = asset;
 
     // win64 url
-    if (name.endsWith(".msi.zip") && name.includes("en-US")) {
+    if (
+      name.endsWith(".msi.zip") &&
+      name.includes("en-US") &&
+      name.includes("x64")
+    ) {
       updateData.platforms.win64.url = browser_download_url;
       updateData.platforms["windows-x86_64"].url = browser_download_url;
     }
     // win64 signature
-    if (name.endsWith(".msi.zip.sig") && name.includes("en-US")) {
+    if (
+      name.endsWith(".msi.zip.sig") &&
+      name.includes("en-US") &&
+      name.includes("x64")
+    ) {
       const sig = await getSignature(browser_download_url);
       updateData.platforms.win64.signature = sig;
       updateData.platforms["windows-x86_64"].signature = sig;
     }
 
+    // win32 url
+    if (
+      name.endsWith(".msi.zip") &&
+      name.includes("en-US") &&
+      name.includes("x86")
+    ) {
+      updateData.platforms.win64.url = browser_download_url;
+      updateData.platforms["windows-i686"].url = browser_download_url;
+    }
+    // win32 signature
+    if (
+      name.endsWith(".msi.zip.sig") &&
+      name.includes("en-US") &&
+      name.includes("x86")
+    ) {
+      const sig = await getSignature(browser_download_url);
+      updateData.platforms.win64.signature = sig;
+      updateData.platforms["windows-i686"].signature = sig;
+    }
+
     // darwin url (intel)
     if (name.endsWith(".app.tar.gz") && !name.includes("aarch")) {
       updateData.platforms.darwin.url = browser_download_url;
@@ -95,6 +123,7 @@ async function resolveUpdater() {
       updateData.platforms["linux-x86_64"].url = browser_download_url;
       // 暂时使用x64版本的url和sig,使得可以检查更新,但aarch64版本还不支持构建appimage
       updateData.platforms["linux-aarch64"].url = browser_download_url;
+      // updateData.platforms["linux-armv7"].url = browser_download_url;
     }
     // linux signature
     if (name.endsWith(".AppImage.tar.gz.sig")) {
@@ -102,7 +131,8 @@ async function resolveUpdater() {
       updateData.platforms.linux.signature = sig;
       updateData.platforms["linux-x86_64"].signature = sig;
       // 暂时使用x64版本的url和sig,使得可以检查更新,但aarch64版本还不支持构建appimage
-      updateData.platforms["linux-aarch64"].url = browser_download_url;
+      updateData.platforms["linux-aarch64"].signature = sig;
+      // updateData.platforms["linux-armv7"].signature = sig;
     }
   });