Browse Source

ci: Fix Linux Build Script

MystiPanda 1 year ago
parent
commit
7127c4d590

+ 4 - 0
.github/build-for-linux/Dockerfile

@@ -0,0 +1,4 @@
+FROM rust:buster
+COPY entrypoint.sh /entrypoint.sh
+RUN chmod a+x /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"] 

+ 14 - 0
.github/build-for-linux/action.yml

@@ -0,0 +1,14 @@
+name: "Build for Linux"
+branding:
+  icon: user-check
+  color: gray-dark
+inputs:
+  target:
+    required: true
+    description: "Rust Target"
+
+runs:
+  using: "docker"
+  image: "Dockerfile"
+  args:
+    - ${{ inputs.target }}

+ 9 - 0
.github/build-for-linux/build.sh

@@ -0,0 +1,9 @@
+# pnpm install --resolution-only
+pnpm install
+pnpm check $INPUT_TARGET
+sed -i "s/#openssl/openssl={version=\"0.10\",features=[\"vendored\"]}/g" src-tauri/Cargo.toml
+if [ "$INPUT_TARGET" = "x86_64-unknown-linux-gnu" ]; then
+    pnpm build --target $INPUT_TARGET
+else
+    pnpm build --target $INPUT_TARGET -b deb
+fi

+ 47 - 0
.github/build-for-linux/entrypoint.sh

@@ -0,0 +1,47 @@
+#!/bin/bash
+
+wget https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.xz
+tar -Jxvf ./node-v20.10.0-linux-x64.tar.xz
+export PATH=$(pwd)/node-v20.10.0-linux-x64/bin:$PATH
+npm install pnpm -g
+
+rustup target add "$INPUT_TARGET"
+
+if [ "$INPUT_TARGET" = "x86_64-unknown-linux-gnu" ]; then
+    apt-get update
+    apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev patchelf
+elif [ "$INPUT_TARGET" = "i686-unknown-linux-gnu" ]; then
+    dpkg --add-architecture i386
+    apt-get update
+    apt-get install -y libstdc++6:i386 libgdk-pixbuf2.0-dev:i386 libatomic1:i386 gcc-multilib g++-multilib libwebkit2gtk-4.0-dev:i386 libssl-dev:i386 libgtk-3-dev:i386 librsvg2-dev:i386 patchelf:i386 libayatana-appindicator3-dev:i386
+    export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig/:$PKG_CONFIG_PATH
+    export PKG_CONFIG_SYSROOT_DIR=/
+elif [ "$INPUT_TARGET" = "aarch64-unknown-linux-gnu" ]; then
+    sed 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | tee /etc/apt/sources.list.d/ports.list
+    sed -i 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch=amd64,i386] http:\/\/\1.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list
+    dpkg --add-architecture arm64
+    apt-get update
+    apt-get install -y libncurses6:arm64 libtinfo6:arm64 linux-libc-dev:arm64 libncursesw6:arm64 libssl3:arm64 libcups2:arm64
+    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
+    export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc
+    export CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc
+    export CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++
+    export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig
+    export PKG_CONFIG_ALLOW_CROSS=1
+elif [ "$INPUT_TARGET" = "armv7-unknown-linux-gnueabihf" ]; then
+    sed 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list | tee /etc/apt/sources.list.d/ports.list
+    sed -i 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch=amd64,i386] http:\/\/\1.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list
+    dpkg --add-architecture armhf
+    apt-get update
+    apt-get install -y libncurses6:armhf libtinfo6:armhf linux-libc-dev:armhf libncursesw6:armhf libssl3:armhf libcups2:armhf
+    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
+    export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
+    export CC_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-gcc
+    export CXX_armv7_unknown_linux_gnueabihf=arm-linux-gnueabihf-g++
+    export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig
+    export PKG_CONFIG_ALLOW_CROSS=1
+else
+    echo "Unknown target: $INPUT_TARGET" && exit 1
+fi
+
+bash .github/build-for-linux/build.sh

+ 47 - 77
.github/workflows/release.yml

@@ -26,12 +26,6 @@ jobs:
             target: aarch64-apple-darwin
           - os: macos-latest
             target: x86_64-apple-darwin
-          - os: ubuntu-latest
-            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 }}
     steps:
@@ -61,36 +55,6 @@ jobs:
           version: 8
           run_install: false
 
-      - name: Install Dependencies (Ubuntu Only)
-        if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'x86_64')
-        run: |
-          sudo apt-get update
-          sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf openssl
-
-      - 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] 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
-          sudo apt-get update
-          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
@@ -112,57 +76,63 @@ jobs:
           tauriScript: pnpm
           args: --target ${{ matrix.target }}
 
-      - name: Tauri build (Ubuntu Arm64)
-        if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'aarch64')
-        uses: tauri-apps/tauri-action@v0
+      - name: Portable Bundle
+        if: matrix.os == 'windows-latest'
+        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 }}
-          CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
-          CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc
-          CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++
-          PKG_CONFIG_PATH: /usr/lib/aarch64-linux-gnu/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: --target ${{ matrix.target }} -b deb,updater
+          VITE_WIN_PORTABLE: 1
 
-      - name: Tauri build (Ubuntu Armv7)
-        if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.target,'armv7')
-        uses: tauri-apps/tauri-action@v0
+  release-for-linux:
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - os: ubuntu-latest
+            target: x86_64-unknown-linux-gnu
+          - os: ubuntu-latest
+            target: i686-unknown-linux-gnu
+          - os: ubuntu-latest
+            target: aarch64-unknown-linux-gnu
+          # - os: ubuntu-latest
+          #   target: armv7-unknown-linux-gnueabihf
+    runs-on: ${{ matrix.os }}
+    steps:
+      - name: Checkout Repository
+        uses: actions/checkout@v4
+
+      - name: Build for Linux
+        uses: ./.github/build-for-linux
         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: --target ${{ matrix.target }} -b deb,updater
-
-      - name: Portable Bundle
-        if: matrix.os == 'windows-latest'
+          target: ${{ matrix.target }}
+      - name: Get Version
         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 }}
-          VITE_WIN_PORTABLE: 1
+          sudo apt-get update
+          sudo apt-get install jq
+          echo "VERSION=$(cat package.json | jq '.version')" >> $GITHUB_ENV
+      - name: Upload Release
+        if: startsWith(matrix.target, 'x86_64')
+        uses: softprops/action-gh-release@v1
+        with:
+          tag_name: v${{env.VERSION}}
+          name: "Clash Verge v${{env.VERSION}}"
+          body: "More new features are now supported."
+          token: ${{ secrets.GITHUB_TOKEN }}
+          files: src-tauri/target/${{ matrix.target }}/release/bundle/appimage/*.AppImage*
+      - name: Upload Release
+        uses: softprops/action-gh-release@v1
+        with:
+          tag_name: v${{env.VERSION}}
+          name: "Clash Verge v${{env.VERSION}}"
+          body: "More new features are now supported."
+          token: ${{ secrets.GITHUB_TOKEN }}
+          files: src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb
 
   release-update:
     needs: [release]