name: linux-ci

on:
  - push
  - pull_request

jobs:
  ubuntu-ci:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        compiler:
          - clang
          - gcc
        strictness:
          - "normal"
          - "strict"

    steps:

      - name: Configure environment
        shell: bash
        run: |
          echo "Nothing to do for Linux"

      - name: Install packages
        run: |
          export DEBIAN_FRONTEND=noninteractive
          sudo apt-get update
          sudo apt-get install -qq \
            valgrind \
            libncurses-dev	\
            libslang2-dev	\
            libx11-dev	\
            libgpm-dev	\
            liballegro4.2-dev	\
            libcairo2-dev	\
            libcups2-dev	\
            libcurl4-openssl-dev	\
            firebird-dev	\
            libfreeimage-dev	\
            libgd-dev	\
            libgs-dev	\
            libmagic-dev	\
            libmysqlclient-dev	\
            unixodbc-dev	\
            libpq-dev	\
            qtbase5-dev


      - name: Checkout code
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.client_payload.branch }}

      - run: pwd
      - run: ls

      - name: Prepare ccache using action
        uses: hendrikmuhs/ccache-action@v1.2.10
        with:
          key: linux-${{ matrix.compiler }}-${{ matrix.strictness }}-ci
          max-size: "32M"

      - name: Configure build shell
        run: |
          set -ex
          HB_USER_CFLAGS=""
          HB_USER_LDFLAGS=""
          case ${{matrix.strictness}} in
            normal) ;;
            strict) case ${{matrix.compiler}} in
                      (gcc) HB_USER_CFLAGS="$HB_USER_CFLAGS -Werror" ;;
                      (*)   HB_USER_CFLAGS="$HB_USER_CFLAGS -Werror" ;;
                    esac ;;
          esac
          tee ./.bashrc <<EOENV

          export HB_BUILD_TEST="${{matrix.strictness}}"
          export HB_BUILD_VERBOSE="yes"
          export HBMK_WITH_SQLITE3="local"
          export HB_USER_CFLAGS="$HB_USER_CFLAGS"
          export HB_USER_LDFLAGS="$HB_USER_LDFLAGS"
          export HB_CCACHE=ccache
          EOENV

      - name: Build Harbour
        run: |
          echo ::group::Build Harbour
          set -ex
          . ./.bashrc
          make -j$(nproc) \
            HB_BUILD_CONTRIBS=no \
            HB_COMPILER=${{matrix.compiler}}

      - name: Build contribs
        run: |
          echo ::group::Build contribs
          set -ex
          . ./.bashrc
          make -j$(nproc) \
            -C contrib \
            HB_COMPILER=${{matrix.compiler}}

      - name: Run tests
        run: |
          echo ::group::Run tests
          set -ex
          VALGRIND="valgrind --error-exitcode=1"

          $VALGRIND bin/linux/${{matrix.compiler}}/hbtest

          cd contrib/hbsqlit3/tests
          ../../../bin/linux/${{matrix.compiler}}/hbmk2 backup.prg
          $VALGRIND ./backup
