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
      - uses: DeterminateSystems/magic-nix-cache-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
      - uses: DeterminateSystems/nix-installer-action@main
      - uses: DeterminateSystems/magic-nix-cache-action@main
      - run: nix build -L '.#${{ matrix.attr }}'

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

    steps:
    - uses: actions/checkout@v4
    - uses: DeterminateSystems/nix-installer-action@main
    - uses: DeterminateSystems/magic-nix-cache-action@main

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

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

