name: 'Tauri GUI Build'
on:
  push:
    branches: [ master ]
  pull_request:
jobs:
  test-tauri:
    strategy:
      fail-fast: false
      matrix:
        platform: [macos-latest, windows-latest, ubuntu-20.04, ubuntu-22.04]

    runs-on: ${{ matrix.platform }}
    defaults:
      run:
        working-directory: ./theseus_gui

    steps:
      - uses: actions/checkout@v3

      - name: Rust setup (mac)
        if: startsWith(matrix.platform, 'macos')
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
          targets: aarch64-apple-darwin

      - name: Rust setup
        if: "!startsWith(matrix.platform, 'macos')"
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - name: Rust cache
        uses: swatinem/rust-cache@v2
        with:
          workspaces: './src-tauri -> target'

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - name: Install pnpm via corepack
        shell: bash
        run: |
          corepack enable
          corepack prepare --activate
      - name: Get pnpm store directory
        id: pnpm-cache
        shell: bash
        run: |
          echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
      - name: Setup pnpm cache
        uses: actions/cache@v3
        with:
          path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

      - name: install dependencies (ubuntu only)
        if: startsWith(matrix.platform, 'ubuntu')
        run: |
          sudo apt-get update
          sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf libselinux1

      - name: Install frontend dependencies
        run: pnpm install

      - name: build app (macos)
        uses: tauri-apps/tauri-action@v0
        id: build_os_mac
        if: startsWith(matrix.platform, 'macos')
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
          APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
          APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
          APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
          APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
          TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
        with:
          args: --target universal-apple-darwin

      - name: build app
        uses: tauri-apps/tauri-action@v0
        id: build_os
        if: "!startsWith(matrix.platform, 'macos')"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
          TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}

      - name: upload ${{ matrix.platform }}
        uses: actions/upload-artifact@v3
        if: startsWith(matrix.platform, 'macos')
        with:
          name: ${{ matrix.platform }}
          path: "${{ join(fromJSON(steps.build_os_mac.outputs.artifactPaths), '\n') }}"

      - name: upload ${{ matrix.platform }}
        uses: actions/upload-artifact@v3
        if: "!startsWith(matrix.platform, 'macos')"
        with:
          name: ${{ matrix.platform }}
          path: "${{ join(fromJSON(steps.build_os.outputs.artifactPaths), '\n') }}"
