diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml new file mode 100644 index 00000000..34de4a00 --- /dev/null +++ b/.github/workflows/alpha.yml @@ -0,0 +1,136 @@ +name: Release Build + +on: + workflow_dispatch: + push: +permissions: write-all +env: + CARGO_INCREMENTAL: 0 + RUST_BACKTRACE: short + +jobs: + alpha: + strategy: + fail-fast: false + matrix: + include: + - os: windows-latest + target: x86_64-pc-windows-msvc + - os: windows-latest + target: aarch64-pc-windows-msvc + - os: macos-latest + target: aarch64-apple-darwin + - os: macos-latest + target: x86_64-apple-darwin + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Apply Patch + if: matrix.target == 'aarch64-pc-windows-msvc' + run: | + git config --global user.email "clash-verge-rev@github.io" + git config --global user.name "clash-verge-rev" + git am patches/support-windows-aarch64.patch + + - name: Init Submodule + if: matrix.target == 'aarch64-pc-windows-msvc' + run: git submodule update --init --recursive + + - name: Install Rust Stable + uses: dtolnay/rust-toolchain@stable + + - name: Add Rust Target + run: rustup target add ${{ matrix.target }} + + - name: Rust Cache + uses: Swatinem/rust-cache@v2 + with: + workspaces: src-tauri + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: "20" + + - uses: pnpm/action-setup@v2 + name: Install pnpm + with: + version: 8 + run_install: false + + - name: Pnpm install and check + run: | + pnpm i + pnpm check ${{ matrix.target }} + + - name: Tauri build + 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 }} + with: + tagName: alpha + releaseName: "Clash Verge Rev Alpha" + releaseBody: "More new features are now supported." + releaseDraft: false + prerelease: true + tauriScript: pnpm + args: --target ${{ matrix.target }} + + - name: Portable Bundle + if: matrix.os == 'windows-latest' + 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: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + - os: ubuntu-latest + target: aarch64-unknown-linux-gnu + runs-on: ${{ matrix.os }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Build for Linux + uses: ./.github/build-for-linux + env: + TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} + TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} + with: + target: ${{ matrix.target }} + - name: Get Version + run: | + sudo apt-get update + sudo apt-get install jq + echo "VERSION=$(cat package.json | jq '.version' | tr -d '"')" >> $GITHUB_ENV + - name: Upload Release + if: startsWith(matrix.target, 'x86_64') + uses: softprops/action-gh-release@v1 + with: + tag_name: alpha + name: "Clash Verge Rev Alpha" + body: "More new features are now supported." + prerelease: true + 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: alpha + name: "Clash Verge Rev Alpha" + body: "More new features are now supported." + prerelease: true + token: ${{ secrets.GITHUB_TOKEN }} + files: src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 73fdeb6c..501e74f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -76,7 +76,7 @@ jobs: TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} with: tagName: v__VERSION__ - releaseName: "Clash Verge v__VERSION__" + releaseName: "Clash Verge Rev v__VERSION__" releaseBody: "More new features are now supported." releaseDraft: false prerelease: false @@ -122,7 +122,7 @@ jobs: uses: softprops/action-gh-release@v1 with: tag_name: v${{env.VERSION}} - name: "Clash Verge v${{env.VERSION}}" + name: "Clash Verge Rev v${{env.VERSION}}" body: "More new features are now supported." token: ${{ secrets.GITHUB_TOKEN }} files: src-tauri/target/${{ matrix.target }}/release/bundle/appimage/*.AppImage* @@ -130,7 +130,7 @@ jobs: uses: softprops/action-gh-release@v1 with: tag_name: v${{env.VERSION}} - name: "Clash Verge v${{env.VERSION}}" + name: "Clash Verge Rev v${{env.VERSION}}" body: "More new features are now supported." token: ${{ secrets.GITHUB_TOKEN }} files: src-tauri/target/${{ matrix.target }}/release/bundle/deb/*.deb diff --git a/scripts/portable.mjs b/scripts/portable.mjs index 0af4fe95..4e2fed5d 100644 --- a/scripts/portable.mjs +++ b/scripts/portable.mjs @@ -5,6 +5,7 @@ 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", @@ -52,14 +53,25 @@ async function resolvePortable() { const options = { owner: context.repo.owner, repo: context.repo.repo }; const github = getOctokit(process.env.GITHUB_TOKEN); - - console.log("[INFO]: upload to ", process.env.TAG_NAME || `v${version}`); + 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: process.env.TAG_NAME || `v${version}`, + 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({