name: XO flatstring builder

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

    container:
      # custom docker image.  see github.com:rconybea/docker-xo-builder for definition
      image: ghcr.io/rconybea/docker-xo-builder:v1

    steps:
    - name: xo-cmake
      run: |
        # treat github.com as known host to prevent shtoopid SSL errors
        mkdir -p ~/.ssh
        ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
        cat ~/.ssh/known_hosts

        git config --global http.sslVerify false

        XO_NAME=xo-cmake
        XO_SRC=repo/${XO_NAME}
        XO_BUILDDIR=${{github.workspace}}/build_${XO_NAME}
        PREFIX=${{github.workspace}}/local

        XO_REPO=https://github.com/rconybea/xo-cmake.git

        mkdir -p ${XO_SRC}
        mkdir -p ${XO_BUILDDIR}

        echo "::group::clone ${XO_NAME}"
        export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'
        export GIT_SSL_NOVERIFY=true
        git clone ${XO_REPO} ${XO_SRC}
        echo "::endgroup"

        echo "::group::configure ${XO_NAME}"
        cmake -B ${XO_BUILDDIR} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} ${XO_SRC}
        echo "::endgroup"

        echo "::group::compile ${XO_NAME}"
        cmake --build ${XO_BUILDDIR} -j
        echo "::endgroup"

        echo "::group::local install ${XO_NAME}"
        cmake --install ${XO_BUILDDIR}
        echo "::endgroup"

        echo "::group::local dir tree"
        tree ${PREFIX}
        echo "::endgroup"

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

    - name: xo-indentlog
      run: |
        XO_NAME=xo-indentlog
        XO_SRC=repo/${XO_NAME}
        XO_BUILDDIR=${{github.workspace}}/build_${XO_NAME}
        PREFIX=${{github.workspace}}/local

        XO_REPO=https://github.com/rconybea/indentlog.git

        mkdir -p ${XO_SRC}
        mkdir -p ${XO_BUILDDIR}

        echo "::group::clone ${XO_NAME}"
        export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'
        export GIT_SSL_NOVERIFY=true
        git clone ${XO_REPO} ${XO_SRC}
        echo "::endgroup"

        echo "::group::configure ${XO_NAME}"
        cmake -B ${XO_BUILDDIR} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} ${XO_SRC}
        echo "::endgroup"

        echo "::group::compile ${XO_NAME}"
        cmake --build ${XO_BUILDDIR} -j
        echo "::endgroup"

        echo "::group::local install ${XO_NAME}"
        cmake --install ${XO_BUILDDIR}
        echo "::endgroup"

        echo "::group::local dir tree"
        tree ${PREFIX}
        echo "::endgroup"

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

    - name: xo-flatstring
      run: |
        XO_NAME=xo-flatstring
        XO_SRC=repo/${XO_NAME}
        XO_BUILDDIR=${{github.workspace}}/build_${XO_NAME}
        PREFIX=${{github.workspace}}/local

        XO_REPO=https://github.com/rconybea/${XO_NAME}.git

        mkdir -p ${XO_SRC}
        mkdir -p ${XO_BUILDDIR}

        echo "::group::clone ${XO_NAME}"
        export GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'
        export GIT_SSL_NOVERIFY=true
        git clone ${XO_REPO} ${XO_SRC}
        echo "::endgroup"

        echo "::group::configure ${XO_NAME}"
        cmake -B ${XO_BUILDDIR} -DCMAKE_INSTALL_PREFIX=${PREFIX} -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} ${XO_SRC}
        echo "::endgroup"

        echo "::group::compile ${XO_NAME}"
        cmake --build ${XO_BUILDDIR} -j
        echo "::endgroup"

        echo "::group::test ${XO_NAME}"
        cmake --build ${XO_BUILDDIR} -- test
        echo "::endgroup"

        echo "::group::build ${XO_NAME} docs"
        cmake --build ${XO_BUILDDIR} -- doxygen
        # note: sphinx+breathe not working (cause unknown) from docker-xo-builder, asof 25apr2024.
        echo "::endgroup"

        echo "::group::local install ${XO_NAME}"
        cmake --install ${XO_BUILDDIR}
        echo "::endgroup"

        echo "::group::local dir tree"
        tree ${PREFIX}
        echo "::endgroup"
