name: Ubuntu (clang)

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]
  workflow_call:
  workflow_dispatch:

env:
  ccache: ON

jobs:
  ubuntu_clang:
    strategy:
      matrix:
        mode: [ Release, Debug ]
        libcxx: [ OFF ]
        ssl: [ ON, OFF ]

    runs-on: ubuntu-22.04

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Dependencies
        run: sudo apt-get install openssl libssl-dev

      - name: Install ninja-build tool
        uses: seanmiddleditch/gha-setup-ninja@master

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ github.job }}-${{ matrix.mode}}-ssl( ${{ matrix.ssl}} )-libcxx( ${{ matrix.libcxx}} )

      - name: Configure
        run: |
          cmake -B ${{github.workspace}}/build -G Ninja \
                -DCMAKE_BUILD_TYPE=${{matrix.mode}} -DBUILD_WITH_LIBCXX=${{matrix.libcxx}} -DENABLE_SSL=${{matrix.ssl}} \
                -DUSE_CCACHE=${{env.ccache}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
      - name: Build
        run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}}

      - name: Test
        working-directory: ${{github.workspace}}/build
        run: ctest -C ${{matrix.mode}} -j 1 -V

  ubuntu_clang_pb:
    strategy:
      matrix:
        mode: [ Release, Debug ]
        libcxx: [ OFF ]
        ssl: [ ON, OFF ]

    runs-on: ubuntu-22.04

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Dependencies
        run: |
          sudo apt-get install openssl libssl-dev
          sudo apt-get install libprotobuf-dev protobuf-compiler libprotoc-dev

      - name: Install ninja-build tool
        uses: seanmiddleditch/gha-setup-ninja@v3

      - name: Check protoc
        run: protoc --version

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ github.job }}-${{ matrix.mode}}-ssl( ${{ matrix.ssl}} )-libcxx( ${{ matrix.libcxx}} )
      - name: Configure
        run: |
          CXX=clang++ CC=clang 
          cmake -B ${{github.workspace}}/build -G Ninja \
                -DCMAKE_BUILD_TYPE=${{matrix.mode}} -DBUILD_WITH_LIBCXX=${{matrix.libcxx}} -DENABLE_SSL=${{matrix.ssl}} \
                -DUSE_CCACHE=${{env.ccache}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++\
                -DBUILD_CORO_HTTP=OFF -DBUILD_CORO_IO=OFF -DBUILD_CORO_RPC=OFF -DBUILD_EASYLOG=OFF -DBUILD_STRUCT_JSON=OFF -DBUILD_STRUCT_XML=OFF -DBUILD_STRUCT_YAML=OFF -DBUILD_UTIL=OFF
      - name: Build
        run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}}

      - name: Test
        working-directory: ${{github.workspace}}/build
        run: ctest -C ${{matrix.mode}} -j 1 -V

  ubuntu_clang_for_liburing:
    strategy:
      matrix:
        mode: [ Release, Debug ]
        libcxx: [ OFF ]
        io_uring: [ ON ]

    runs-on: ubuntu-22.04

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install liburing
        run: sudo apt-get install liburing-dev

      - name: Install ninja-build tool
        uses: seanmiddleditch/gha-setup-ninja@master

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ github.job }}-${{ matrix.mode}}-ssl( ${{ matrix.ssl}} )-libcxx( ${{ matrix.libcxx}} )

      - name: Configure
        run: |
          CXX=clang++ CC=clang 
          cmake -B ${{github.workspace}}/build -G Ninja \
                -DCMAKE_BUILD_TYPE=${{matrix.mode}} \
                -DBUILD_WITH_LIBCXX=${{matrix.libcxx}} \
                -DENABLE_IO_URING=${{matrix.io_uring}} \
                -DUSE_CCACHE=${{env.ccache}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++\
                -DBUILD_STRUCT_JSON=OFF -DBUILD_STRUCT_XML=OFF -DBUILD_STRUCT_PACK=OFF -DBUILD_STRUCT_PB=OFF -DBUILD_STRUCT_YAML=OFF -DBUILD_UTIL=OFF

      - name: Build
        run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}}

      - name: Test
        working-directory: ${{github.workspace}}/build
        run: ctest -C ${{matrix.mode}} -j 1 -V

  ubuntu_clang10:
    strategy:
      matrix:
        mode: [ Release, Debug ]

    runs-on: ubuntu-20.04

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install ninja-build tool
        uses: seanmiddleditch/gha-setup-ninja@master

      - name: Install clang-6
        run:  sudo apt-get install clang-7 clang++-7 

      - name: ccache
        uses: hendrikmuhs/ccache-action@v1.2
        with:
          key: ${{ github.job }}-${{ matrix.mode}}

      - name: Configure
        run: |
          CXX=clang++-7 CC=clang-7 
          cmake -B ${{github.workspace}}/build -G Ninja \
                -DCMAKE_BUILD_TYPE=${{matrix.mode}} \
                -DUSE_CCACHE=${{env.ccache}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
                -DENABLE_CPP_20=OFF

      - name: Build
        run: cmake --build ${{github.workspace}}/build --config ${{matrix.mode}} 

      - name: Test
        working-directory: ${{github.workspace}}/build
        run: ctest -C ${{matrix.mode}} -j 1 -V