name: Run tests
on:
  pull_request:
    branches:
      - 'master'
      - 'release-*'
  push:
    branches:
      - 'master'
      - 'release-*'
    tags: '*'
defaults:
  run:
    shell: bash
concurrency:
  # Skip intermediate builds: all builds except for builds on the `master` or `release-*` branches
  # Cancel intermediate builds: only pull request builds
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.ref != 'refs/heads/master' || 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:
        os:
          - ubuntu-latest
          - macOS-latest
          - windows-latest
        julia-arch:
          - 'x64'
          - 'x86'
        pkg-server:
          - ""
          - "pkg.julialang.org"
        julia-version:
          - '1.8-nightly'
        exclude:
          - os: macOS-latest
            julia-arch: x86
    steps:
      - name: Set git to use LF
        if: matrix.os == 'windows-latest'
        run: |
          git config --global core.autocrlf false
          git config --global core.eol lf
      - uses: actions/checkout@v2
      - uses: julia-actions/setup-julia@latest
        with:
          version: ${{ matrix.julia-version }}
          arch: ${{ matrix.julia-arch }}
      - name: Fix TEMP on windows
        if: matrix.os == 'windows-latest'
        run: |
          # See https://github.com/actions/virtual-environments/issues/712
          echo "TMP=${USERPROFILE}\AppData\Local\Temp" >> ${GITHUB_ENV}
          echo "TEMP=${USERPROFILE}\AppData\Local\Temp" >> ${GITHUB_ENV}
      - run: julia --color=yes .ci/test_and_change_uuid.jl
      - run: julia --project --color=yes --check-bounds=yes -e 'import Pkg; Pkg.build(); Pkg.test(; coverage=true)'
        env:
          JULIA_PKG_SERVER: ${{ matrix.pkg-server }}
          JULIA_PKG_TEST_QUIET: "true" # "true" is the default. i.e. tests are quiet when this env var isn't set
      - uses: julia-actions/julia-processcoverage@v1
        env:
            JULIA_PKG_SERVER: ${{ matrix.pkg-server }}
      - uses: codecov/codecov-action@v1
        with:
          file: lcov.info
  docs:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v1.0.0
      - uses: julia-actions/setup-julia@latest
        with:
          # version: '1.6'
          version: 'nightly'
      - name: Generate docs
        run: |
          julia --color=yes .ci/test_and_change_uuid.jl
          julia --project --color=yes -e 'using Pkg; Pkg.activate("docs"); Pkg.instantiate(); Pkg.develop(PackageSpec(path = pwd()))'
          julia --project=docs --color=yes docs/make.jl pdf
        env:
          DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}
