name: Alpha Build

on:
  workflow_dispatch:
  push:
    branches: [main]
    tags-ignore: [updater, alpha]
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
  update_tag:
    name: Update tag
    runs-on: ubuntu-latest
    needs: [alpha, alpha-for-linux]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Set Env
        run: |
          echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV
        shell: bash
      - name: Update Tag
        uses: richardsimko/update-tag@v1
        with:
          tag_name: alpha
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - run: |
          cat > release.txt << 'EOF'
          ## Clash Verge Rev Alpha
          Created at  ${{ env.BUILDTIME }}.
          EOF
      - name: Upload Release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: alpha
          name: "Clash Verge Rev Alpha"
          body_path: release.txt
          prerelease: true
          token: ${{ secrets.GITHUB_TOKEN }}
          generate_release_notes: true
