# 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-Py

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:
        os: [ ubuntu-latest, macos-latest, windows-latest ]
        python-version: ["3.9", "3.11", "3.14"]
    runs-on: ${{ matrix.os }}

    steps:

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

      - name: Set up Python
        uses: actions/setup-python@v6
        with:
          python-version: ${{ matrix.python-version }}

      # 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
            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.
      - name: Build and test with Maven
        shell: bash
        run: |
          # On Windows, prepend MinGW bin so CTest/test exe uses the correct
          # runtime DLLs instead of Git-for-Windows mingw runtime from PATH.
          if [[ "$RUNNER_OS" == "Windows" ]]; then
            export PATH="/c/mingw64/bin:$PATH"
          fi
          BLACK_VER_PROP=""
          if [[ "${{ matrix.python-version }}" == "3.9" ]]; then
            BLACK_VER_PROP="-Dblack.version=25.11.0"
          fi
          ./mvnw${{ steps.platform_suffix.outputs.platform_suffix }} -P with-python -Denable.asan=OFF -Dbuild.type=Release clean verify ${BLACK_VER_PROP}

      - name: Upload whl Artifact
        uses: actions/upload-artifact@v7
        with:
          name: tsfile-${{ runner.os }}-py${{ matrix.python-version }}-whl
          path: python/dist/tsfile-*.whl
          retention-days: 1
