name: CI
on:
  pull_request:
  push:
    branches:
      - 'main'
      - 'release-*'
    tags: ['*']
concurrency:
  # Skip intermediate builds: all builds except for builds on the `main` or `release-*` branches
  # Cancel intermediate builds: only pull request builds
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref != 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release-') || github.run_number }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}
jobs:
  test:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60
    strategy:
      fail-fast: false
      matrix:
        julia-version:
          - '~1.12.0-0'
        os:
          - ubuntu-latest
          - windows-latest
        julia-arch:
          - x64
          - x86
        include:
          - os: macOS-latest
            julia-arch: aarch64
            julia-version: '~1.12.0-0'
          - os: macOS-15-intel
            julia-arch: x64
            julia-version: '~1.12.0-0'
    steps:
      - uses: actions/checkout@v6
      - uses: julia-actions/setup-julia@v2
        with:
          version: ${{ matrix.julia-version }}
          arch: ${{ matrix.julia-arch }}
      - uses: julia-actions/cache@v2
      - uses: julia-actions/julia-buildpkg@v1
      - uses: julia-actions/julia-runtest@v1
      - uses: julia-actions/julia-processcoverage@v1
      - uses: codecov/codecov-action@v5
        with:
          file: lcov.info
          token: ${{ secrets.CODECOV_TOKEN }}
  aqua-test:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60
    permissions: # needed to allow julia-actions/cache to proactively delete old caches that it has created
      actions: write
      contents: read
    strategy:
      matrix:
        julia-version:
          - '~1.12.0-0'
        os:
          - ubuntu-latest
        julia-arch:
          - x64
    steps:
      - uses: actions/checkout@v6
      - uses: julia-actions/setup-julia@v2
        with:
          version: ${{ matrix.julia-version }}
          arch: ${{ matrix.julia-arch }}
      - uses: julia-actions/cache@v2
      - uses: julia-actions/julia-buildpkg@v1
      - uses: julia-actions/julia-runtest@v1
        env:
          SPARSEARRAYS_AQUA_TEST: true
  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: julia-actions/setup-julia@v2
        with:
          version: '~1.12.0-0'
      - name: Generate docs
        run: |
          julia --project --color=yes -e 'using Pkg; Pkg.activate("docs"); Pkg.develop(PackageSpec(path = pwd()))'
          julia --project=docs --color=yes docs/make.jl pdf
        env:
          DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
