name: Backend check
on:
  workflow_run:
    workflows: ["Change versions"]
    types:
      - completed
  push:
    paths:
      - "backend/**"
      - ".github/workflows/backend-check.yml"

jobs:
  check_oss:
    runs-on: ubicloud-standard-8
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install mold and clang
        run: sudo apt-get update && sudo apt-get install -y mold clang

      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          cache: false
          toolchain: 1.93.0
      - name: cargo check
        working-directory: ./backend
        timeout-minutes: 16
        run: SQLX_OFFLINE=true cargo check

  check_oss_full:
    runs-on: ubicloud-standard-8
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: install xmlsec1 and gssapi
        run: |
          sudo apt-get update
          sudo apt-get install -y libxml2-dev libxmlsec1-dev libkrb5-dev libsasl2-dev libcurl4-openssl-dev mold clang

      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          cache: false
          toolchain: 1.93.0
      - name: cargo check
        working-directory: ./backend
        timeout-minutes: 16
        run: |
          mkdir -p fake_frontend_build
          FRONTEND_BUILD_DIR=$(pwd)/fake_frontend_build SQLX_OFFLINE=true cargo check --features all_sqlx_features

  check_ee:
    runs-on: ubicloud-standard-8
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Read EE repo commit hash
        run: |
          echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV"

      - uses: actions/checkout@v4
        with:
          repository: windmill-labs/windmill-ee-private
          path: ./windmill-ee-private
          ref: ${{ env.ee_repo_ref }}
          token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }}
          fetch-depth: 0

      - name: Substitute EE code (EE logic is behind feature flag)
        run: |
          ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private

      - name: Install mold and clang
        run: sudo apt-get update && sudo apt-get install -y mold clang

      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          cache: false
          toolchain: 1.93.0
      - name: cargo check
        working-directory: ./backend
        timeout-minutes: 16
        run: SQLX_OFFLINE=true cargo check

  check_ee_full:
    runs-on: ubicloud-standard-8
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Read EE repo commit hash
        run: |
          echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV"

      - uses: actions/checkout@v4
        with:
          repository: windmill-labs/windmill-ee-private
          path: ./windmill-ee-private
          ref: ${{ env.ee_repo_ref }}
          token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }}
          fetch-depth: 0

      - name: install xmlsec1 and gssapi
        run: |
          sudo apt-get update
          sudo apt-get install -y libxml2-dev libxmlsec1-dev libkrb5-dev libsasl2-dev libcurl4-openssl-dev mold clang

      - name: Substitute EE code (EE logic is behind feature flag)
        run: |
          ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private

      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          cache-workspaces: backend
          toolchain: 1.93.0
      - name: Fix stale v8 build cache
        working-directory: ./backend
        run: |
          # Cargo cache may preserve v8 build fingerprints without the actual
          # librusty_v8.a library. Since fingerprints look valid, cargo skips
          # build.rs re-run, causing "could not find native static library rusty_v8".
          for profile in debug release; do
            if [ -d "target/$profile/.fingerprint" ] && [ ! -f "target/$profile/gn_out/obj/librusty_v8.a" ]; then
              echo "Cleaning stale v8 build artifacts in target/$profile"
              rm -rf "target/$profile/build/v8-"* "target/$profile/.fingerprint/v8-"*
            fi
          done
      - name: cargo check
        timeout-minutes: 16
        working-directory: ./backend
        run: |
          mkdir -p fake_frontend_build
          FRONTEND_BUILD_DIR=$(pwd)/fake_frontend_build SQLX_OFFLINE=true cargo check --features all_sqlx_features,private
