# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Unit-Test-Cpp

on:
  push:
    branches:
      - develop
      - iotdb
      - rc/*
    paths-ignore:
      - 'docs/**'
      - 'java/**'
  pull_request:
    branches:
      - develop
      - dev/*
      - iotdb
      - rc/*
    paths-ignore:
      - 'docs/**'
      - 'java/**'
  # Enable manually starting builds, and allow forcing updating of SNAPSHOT dependencies.
  workflow_dispatch:
    inputs:
      forceUpdates:
        description: "Forces a snapshot update"
        required: false
        default: 'false'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
  DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}

jobs:
  unit-test:
    strategy:
      fail-fast: false
      max-parallel: 15
      matrix:
        include:
          # Linux all
          - os: ubuntu-latest
            build_type: Debug
            enable_asan: Asan
          - os: ubuntu-latest
            build_type: Debug
            enable_asan: NoAsan
          - os: ubuntu-latest
            build_type: Release
            enable_asan: Asan
          - os: ubuntu-latest
            build_type: Release
            enable_asan: NoAsan

          # macOS exclude Release+ASan
          - os: macos-latest
            build_type: Debug
            enable_asan: Asan
          - os: macos-latest
            build_type: Debug
            enable_asan: NoAsan
          - os: macos-latest
            build_type: Release
            enable_asan: NoAsan

          # Windows just Release
          - os: windows-latest
            build_type: Release
            enable_asan: NoAsan
    runs-on: ${{ matrix.os }}

    steps:

      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Set up JDK 17
        uses: actions/setup-java@v5
        with:
          distribution: corretto
          java-version: 17

      # Setup caching of the artifacts in the .m2 directory, so they don't have to
      # all be downloaded again for every build.
      - name: Cache Maven packages
        uses: actions/cache@v5
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2-

      # On Windows systems the 'mvnw' script needs an additional ".cmd" appended.
      - name: Calculate platform suffix
        id: platform_suffix
        uses: actions/github-script@v9.0.0
        env:
          OS: ${{ matrix.os }}
        with:
          script: |
            const { OS } = process.env
            if (OS.includes("windows")) {
              core.setOutput('platform_suffix', `.cmd`)
            } else {
              core.setOutput('platform_suffix', ``)
            }

      # Install dependencies
      - name: Install dependencies
        shell: bash
        run: |
          if [[ "$RUNNER_OS" == "Linux" ]]; then
            if command -v apt-get >/dev/null 2>&1; then
              sudo apt-get update
              sudo apt-get install -y uuid-dev
            elif command -v yum >/dev/null 2>&1; then
              sudo yum install -y libuuid-devel
            fi
            sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-17 100
            sudo update-alternatives --set clang-format /usr/bin/clang-format-17
            sudo apt-get update
            sudo apt-get install -y uuid-dev
          elif [[ "$RUNNER_OS" == "Windows" ]]; then
            choco install llvm --version 17.0.6 --force
          else
            brew install llvm@17
            ln -sf $(brew --prefix llvm@17)/bin/clang-format /opt/homebrew/bin/clang-format
          fi

      # Run the actual maven build including all tests.
      # On Windows, prepend MinGW bin to PATH so test exe can find runtime DLLs
      # (e.g. libstdc++-6.dll) when gtest_discover_tests runs it; avoids 0xc0000139.
      - name: Build and test with Maven
        shell: bash
        run: |
          if [ "${{ matrix.enable_asan }}" = "Asan" ]; then
            ASAN_VALUE="ON"
          else
            ASAN_VALUE="OFF"
          fi
          if [[ "$RUNNER_OS" == "Windows" ]]; then
            export PATH="/c/mingw64/bin:$PATH"
          fi
          ./mvnw${{ steps.platform_suffix.outputs.platform_suffix }} -P with-cpp \
           -Denable.asan=$ASAN_VALUE -Dbuild.type=${{ matrix.build_type }} clean verify

