name: Build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

env:
  CARGO_TERM_COLOR: always

jobs:
  checks-matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    steps:
      - uses: actions/checkout@v4
      - uses: DeterminateSystems/nix-installer-action@main
      - id: set-matrix
        name: Generate Nix Matrix
        run: |
          set -Eeu
          matrix="$(nix eval --json '.#githubActions.matrix')"
          echo "matrix=$matrix" >> "$GITHUB_OUTPUT"

  checks-build:
    needs: checks-matrix
    runs-on: ${{ matrix.os }}
    strategy:
      matrix: ${{fromJSON(needs.checks-matrix.outputs.matrix)}}
    steps:
      - uses: actions/checkout@v4
        with:
          lfs: true
          submodules: 'recursive'
      - uses: DeterminateSystems/nix-installer-action@main
      - uses: cachix/cachix-action@v14
        with:
          name: mnn-rs
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - run: nix build -L '.#${{ matrix.attr }}'

  codecov:
    runs-on: ubuntu-latest
    permissions:
      id-token: "write"
      contents: "read"

    steps:
    - uses: actions/checkout@v4
      with:
        lfs: true
        submodules: 'recursive'
    - uses: DeterminateSystems/nix-installer-action@main
    - uses: cachix/cachix-action@v14
      with:
        name: mnn-rs
        authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

    - name: Run codecov
      run: nix build .#checks.x86_64-linux.mnn-llvm-cov

    - name: Upload coverage reports to Codecov
      uses: codecov/codecov-action@v5.4.3
      with:
        flags: unittests
        name: codecov-mnn
        fail_ci_if_error: true
        token: ${{ secrets.CODECOV_TOKEN }}
        files: ./result
        verbose: true

