name: Build

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read
  pull-requests: read

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref || github.ref }}
  cancel-in-progress: true

jobs:
  build:
    name: Build Tauri App
    runs-on: ubuntu-22.04
    container:
      image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 1
          submodules: true

      - name: Cache Rust build artifacts
        uses: Swatinem/rust-cache@v2
        with:
          workspaces: |
            . -> target
            app/src-tauri -> target
          cache-on-failure: true

      - name: Cache node modules
        id: yarn-cache
        uses: actions/cache@v4
        with:
          path: node_modules
          key: ${{ runner.os }}-build-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-build-

      - name: Install dependencies
        if: steps.yarn-cache.outputs.cache-hit != 'true'
        run: yarn install --frozen-lockfile

      - name: Install cmake (for whisper-rs)
        run: apt-get update && apt-get install -y --no-install-recommends cmake && rm -rf /var/lib/apt/lists/*

      - name: Build sidecar core binary
        run: cargo build --profile ci --target x86_64-unknown-linux-gnu --bin openhuman-core

      - name: Stage sidecar for Tauri bundler
        run: |
          mkdir -p app/src-tauri/binaries
          cp target/x86_64-unknown-linux-gnu/ci/openhuman-core app/src-tauri/binaries/openhuman-core-x86_64-unknown-linux-gnu
          chmod +x app/src-tauri/binaries/openhuman-core-x86_64-unknown-linux-gnu

      - name: Build Tauri app
        working-directory: app
        run: |
          TAURI_CONFIG_OVERRIDE='{"plugins":{"updater":{"active":false}}}'
          yarn tauri build -c "$TAURI_CONFIG_OVERRIDE" --bundles deb
        env:
          NODE_ENV: production
          CARGO_PROFILE_RELEASE_OPT_LEVEL: "1"
          CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "16"
          CARGO_PROFILE_RELEASE_LTO: "false"
          CARGO_PROFILE_RELEASE_STRIP: "true"
          CARGO_PROFILE_RELEASE_DEBUG: "false"
