name: xo-reflect ubuntu build

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
    # You can convert this to a matrix build if you need cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest

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

    - name: Install catch2
      # install catch2.  see [[https://stackoverflow.com/questions/57982945/how-to-apt-get-install-in-a-github-actions-workflow]]
      run: sudo apt-get install -y catch2

    # ----------------------------------------------------------------

    - name: Clone xo-cmake
      uses: actions/checkout@v3
      with:
        repository: Rconybea/xo-cmake
        path: repo/xo-cmake

    - name: Configure xo-cmake
      run: cmake -B ${{github.workspace}}/build_xo-cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/xo-cmake

    - name: Build xo-cmake (trivial)
      run: cmake --build ${{github.workspace}}/build_xo-cmake --config ${{env.BUILD_TYPE}}

    - name: Install xo-cmake
      run: cmake --install ${{github.workspace}}/build_xo-cmake

    # ----------------------------------------------------------------

    - name: Clone indentlog
      uses: actions/checkout@v3
      with:
        repository: Rconybea/indentlog
        path: repo/indentlog

    - name: Configure indentlog
      # configure cmake for indentlog in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_indentlog -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/indentlog

    - name: Build indentlog
      run: cmake --build ${{github.workspace}}/build_indentlog --config ${{env.BUILD_TYPE}}

    - name: Install indentlog
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_indentlog

    # ----------------------------------------------------------------

    - name: Clone subsys
      uses: actions/checkout@v3
      with:
        repository: Rconybea/subsys
        path: repo/subsys

    - name: Configure subsys
      # configure cmake for subsys in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_subsys -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/subsys

    - name: Build subsys
      run: cmake --build ${{github.workspace}}/build_subsys --config ${{env.BUILD_TYPE}}

    - name: Install subsys
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_subsys

    # ----------------------------------------------------------------

    - name: Clone refcnt
      uses: actions/checkout@v3
      with:
        repository: Rconybea/refcnt
        path: repo/refcnt

    - name: Configure refcnt
      # configure cmake for refcnt in dedicated build directory.
      run: cmake -B ${{github.workspace}}/build_refcnt -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local repo/refcnt

    - name: Build refcnt
      run: cmake --build ${{github.workspace}}/build_refcnt --config ${{env.BUILD_TYPE}}

    - name: Install refcnt
      # install into ${{github.workspace}}/local
      run: cmake --install ${{github.workspace}}/build_refcnt

    # ----------------------------------------------------------------

    - name: Configure self (reflect)
      # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
      # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
      run: cmake -B ${{github.workspace}}/build_reflect -DCMAKE_MODULE_PATH=${{github.workspace}}/local/share/cmake -DCMAKE_PREFIX_PATH=${{github.workspace}}/local -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/local -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

    - name: Build self (reflect)
      # Build your program with the given configuration
      run: cmake --build ${{github.workspace}}/build_reflect --config ${{env.BUILD_TYPE}}

    - name: Test self (reflect)
      working-directory: ${{github.workspace}}/build_reflect
      # Execute tests defined by the CMake configuration.
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: ctest -C ${{env.BUILD_TYPE}}
