name: CI

on:
  push:
    branches:
      - main
      - 'releases/*'
  pull_request:
    branches:
      - '*'

env:
  ORG_GRADLE_PROJECT_enableTestDistribution: true
  ORG_GRADLE_PROJECT_junitBuildCacheUsername: ${{ secrets.BUILD_CACHE_USERNAME }}
  ORG_GRADLE_PROJECT_junitBuildCachePassword: ${{ secrets.BUILD_CACHE_PASSWORD }}
  GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }}

jobs:
  Linux:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 1
    - name: Install Graphviz
      run: |
        sudo apt-get update
        sudo apt-get install graphviz
    - name: Install GraalVM
      uses: graalvm/setup-graalvm@v1
      with:
        version: 'latest'
        java-version: '17'
        components: 'native-image'
        github-token: ${{ secrets.GITHUB_TOKEN }}
    - name: Build
      uses: ./.github/actions/main-build
      with:
        arguments: |
          -PenableJaCoCo
          build
          jacocoRootReport
          prepareDocsForUploadToGhPages
    - name: Upload to Codecov.io
      uses: codecov/codecov-action@v3

  Windows:
    runs-on: windows-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 1
    - name: Build
      uses: ./.github/actions/main-build

  macOS:
    runs-on: macos-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 1
    - name: Build
      uses: ./.github/actions/main-build

  publish_artifacts:
    name: Publish Snapshot Artifacts
    needs: linux
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.repository == 'junit-team/junit5' && (startsWith(github.ref, 'refs/heads/releases/') || github.ref == 'refs/heads/main')
    steps:
    - name: Check out repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 1
    - name: Publish
      uses: ./.github/actions/run-gradle
      env:
        ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
        ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
      with:
        arguments: publish -x check

  update_documentation:
    name: Update Snapshot Documentation
    concurrency:
      group: github-pages
      cancel-in-progress: true
    needs: Linux
    runs-on: ubuntu-latest
    if: github.event_name == 'push' && github.repository == 'junit-team/junit5' && github.ref == 'refs/heads/main'
    steps:
    - name: Check out repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 1
    - name: Install Graphviz
      run: |
        sudo apt-get update
        sudo apt-get install graphviz
    - name: Restore Gradle cache and display toolchains
      uses: ./.github/actions/run-gradle
      with:
        arguments: --quiet
    - name: Upload Documentation
      env:
        GRGIT_USER: ${{ secrets.GH_TOKEN }}
      run: ./src/publishDocumentationSnapshotOnlyIfNecessary.sh
