# 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
        run: mvn clean package -pl distribution -am -DskipTests
      - name: Test with Maven
        run: mvn clean verify -pl iotdb-client/client-cpp -am -P compile-cpp -P cppTest
      - name: Show test result
        run: cat iotdb-client/client-cpp/target/build/test/Testing/Temporary/LastTest_*.log

  build-win:
    strategy:
      fail-fast: false
      max-parallel: 20
      matrix:
        os: [windows-latest]
    runs-on: ${{ matrix.os}}

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK ${{ matrix.java }}
        uses: actions/setup-java@v3
        with:
          distribution: liberica
          java-version: 11
      - 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: mkdir D:\a\cpp ; `
          Invoke-WebRequest https://github.com/lexxmark/winflexbison/releases/download/v2.5.24/win_flex_bison-2.5.24.zip -OutFile D:\a\cpp\win_flex_bison.zip ; `
          [Environment]::SetEnvironmentVariable("Path", $env:Path + ";D:\a\cpp", "User") ; `
      - name: Download Boost
        run: choco install boost-msvc-14.3 --version=1.78.0
      - name: Install Boost
        run: cd C:\local\boost_1_78_0 ; `
          .\bootstrap.bat ; `
          .\b2.exe
      - name: Install OpenSSL
        run:  choco install openssl
      - name: Add Flex and Bison Path and OpenSSL
        shell: bash
        run: cd /d/a/cpp && unzip win_flex_bison.zip && mv win_flex.exe flex.exe && mv win_bison.exe bison.exe  && echo 'export PATH=/d/a/cpp:$PATH' >> ~/.bash_profile && source ~/.bash_profile
      - name: Build IoTDB server
        shell: bash
        run: source ~/.bash_profile && mvn clean package -pl distribution -am -DskipTests
      - name: Test with Maven
        shell: bash
        run: source ~/.bash_profile && mvn clean verify -pl iotdb-client/client-cpp -am -P compile-cpp -P cppTest -Dboost.include.dir=/c/local/boost_1_78_0 -Dboost.library.dir=/c/local/boost_1_78_0/stage/lib -Dcmake.url="https://github.com/Kitware/CMake/releases/download/v3.21.6/cmake-3.21.6-windows-x86_64.zip" -Dcmake.root.dir=/D/a/iotdb/iotdb/iotdb-client/compile-tools/thrift/target/cmake-3.21.6-windows-x86_64/ -Dcmake.generator="Visual Studio 17 2022"
      - 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
