name: Bazel

on:
  schedule:
    - cron: 0 0 * * *
  push:
    branches:
    - main
    paths:
      - '.github/workflows/enzyme-bazel.yml'
      - 'enzyme/Enzyme/**'
      - 'enzyme/includes/**'
      - 'enzyme/test/**'
      - 'enzyme/tools/**'
      - 'enzyme/BUILD'
      - 'enzyme/WORKSPACE'
  pull_request:
    branches:
    - main
    paths:
      - '.github/workflows/enzyme-bazel.yml'
      - 'enzyme/Enzyme/**'
      - 'enzyme/includes/**'
      - 'enzyme/test/**'
      - 'enzyme/tools/**'
      - 'enzyme/BUILD'
      - 'enzyme/WORKSPACE'
  merge_group:

concurrency:
  # Skip intermediate builds: always.
  # Cancel intermediate builds: only if it is a pull request build.
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

jobs:
  build:
    name: Enzyme Bazel Build - ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
          - linux-x86-n2-32
        build:
          - Release
        llbuild:
          - Release
    timeout-minutes: 500 

    container:
      image: ${{ (contains(matrix.os, 'linux') && 'ghcr.io/enzymead/reactant-docker-images@sha256:91e1edb7a7c869d5a70db06e417f22907be0e67ca86641d48adcea221fedc674' ) || '' }}

    steps:
      - name: Install Python dependencies
        run: python -m pip install lit
      - uses: actions/checkout@v4
      - uses: actions/checkout@v4
        with:
          repository: 'llvm/llvm-project'
          path: 'llvm-project'
      - uses: bazel-contrib/setup-bazel@0.14.0
        name: Set up Bazel
        with:
          # Avoid downloading Bazel every time.
          bazelisk-cache: true
          # Store build cache per workflow.
          disk-cache: ${{ github.workflow }}-${{ matrix.os }}-${{ matrix.build }}-${{ matrix.llbuild }}
          # Share repository cache between workflows.
          repository-cache: true
          bazelisk-version: 1.x
      - name: Build Enzyme
        run: |
          cd enzyme
          bazel build --color=yes :EnzymeStatic :enzymemlir-opt
      - name: Test Enzyme
        run: |
          cd enzyme
          bazel test --color=yes --test_output=errors ...
