# 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

# CPP compiling is too slow, so let's do it in parallel with testing other modules.
# As there is no Java client, we just use one JDK.
name: C++ Client

on:
  push:
    branches:
      - master
      - "rel/*"
      - "new_*"
    paths-ignore:
      - 'docs/**'
      - 'site/**'
  pull_request:
    branches:
      - master
      - "rel/*"
      - "new_*"
    paths-ignore:
      - 'docs/**'
      - 'site/**'
  # allow manually run the action:
  workflow_dispatch:

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

jobs:
  build:
    strategy:
      fail-fast: false
      max-parallel: 20
      matrix:
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os}}

    steps:
      - uses: actions/checkout@v3
      - name: Install CPP Dependencies (Ubuntu)
        if: matrix.os == 'ubuntu-latest'
        shell: bash
        run: sudo apt-get update && sudo apt-get install libboost-all-dev
      - name: Install CPP Dependencies (Mac)`
        if: matrix.os == 'macos-latest'
        shell: bash
        run: |
          brew install boost
          brew install bison
          echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile
          source ~/.bash_profile && export LDFLAGS="-L/usr/local/opt/bison/lib"
          brew install openssl
      - name: Cache Maven packages
        uses: actions/cache@v3
        with:
          path: ~/.m2
          key: client-${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2-
      - name: Build IoTDB server
        # Explicitly using mvnw here as the build requires maven 3.9 and the default installation is older
        # Explicitly using "install" instead of package in order to be sure we're using libs built on this machine
        # (was causing problems on windows, but could cause problem on linux, when updating the thrift module)
        run: ./mvnw clean install -P with-tools,with-cpp -pl distribution -am -DskipTests
      - name: Test with Maven
        # Explicitly using mvnw here as the build requires maven 3.9 and the default installation is older
        run: ./mvnw clean verify -P with-tools,with-cpp -pl iotdb-client/client-cpp -am
      - name: Show test result
        if: failure()
        run: cat iotdb-client/client-cpp/target/build/test/Testing/Temporary/LastTest_*.log

  build-win:
    runs-on: windows-latest

    steps:
      - uses: actions/checkout@v3
      - name: Cache Maven packages
        uses: actions/cache@v3
        with:
          path: ~/.m2
          key: client-${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
          restore-keys: ${{ runner.os }}-m2-
      - name: Install Win_Flex_Bison
        run: choco install winflexbison
      - name: Download Boost
        run: choco install boost-msvc-14.3 --version=1.78.0
      - name: Install OpenSSL
        run:  choco install openssl
      - name: Build IoTDB server
        shell: bash
        # Explicitly using mvnw here as the build requires maven 3.9 and the default installation is older
        # Explicitly using "install" instead of package in order to be sure we're using libs built on this machine
        # (was causing problems on windows, but could cause problem on linux, when updating the thrift module)
        run: ./mvnw clean install -P with-tools,with-cpp -pl distribution -am -DskipTests
      - name: Test with Maven
        shell: bash
        # Explicitly using mvnw here as the build requires maven 3.9 and the default installation is older
        run: ./mvnw clean verify -P with-tools,with-cpp -pl iotdb-client/client-cpp -am
      - name: Upload Artifact
        if: failure()
        uses: actions/upload-artifact@v3
        with:
          name: cpp-IT-${{ runner.os }}
          path: iotdb-client/client-cpp/target/build/test/Testing
          retention-days: 1
