name: More Linux

on:
  schedule:
  - cron:  '0 0 * * 0'
  workflow_dispatch:

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        cfg:
#-------- Operating Systems ----------------
          - { os: ubuntu,      tag: 20.04,    arch: debian, arch_ver: 11 }
          - { os: debian,      tag: 10,       arch: debian, arch_ver: 10 }
          - { os: debian,      tag: 11,       arch: debian, arch_ver: 11 }
          - { os: debian,      tag: bookworm, arch: debian, arch_ver: 12 }
          - { os: almalinux,   tag: 8,        arch: rhel,   arch_ver: 8  }
        python: [2, 3]

#-------- Defaults --------------------------
        include:
          - cfg: {}
            deps: >-
              bison
              clang
              flex
              git
              llvm
              make
              maven
              cmake
              zip
            install_gtest: echo gtest already installed
            conf_pkg:  echo package manager already configured
            install_cmd: install -y
#-------- Debian-based Dependencies ----------------
          - cfg: { arch: debian }
            pkg_mgr: apt-get
            conf_pkg:  apt-get update
            arch_deps: >-
              swig
              curl
              g++
              libx11-dev
              libxml2-dev
              libxt-dev
              libmotif-common
              libmotif-dev
              zlib1g-dev
              llvm-dev
              libclang-dev
              libudunits2-dev
              libgtest-dev
              default-jdk
              python3-dev
              python3-pip
              python3-venv
            install_gtest: |
              apt-get install -y libgtest-dev
              cd /usr/src/gtest
              cmake .
              make
              cp lib/libgtest* /usr/lib/
#-------- RHEL Dependencies ----------------
          - cfg: { arch: rhel }
            arch_deps: >-
              clang-devel
              gcc
              gcc-c++
              java-11-openjdk-devel
              libxml2-devel
              llvm-devel
              llvm-static
              ncurses-devel
              openmotif
              openmotif-devel
              perl
              perl-Digest-MD5
              udunits2
              udunits2-devel
              which
              zlib-devel
              python2-devel
              python3-devel
#-------- RHEL 8-based Only Dependencies ----------------
          - cfg: { arch: rhel, arch_ver: 8 }
            pkg_mgr: dnf
            tag_deps: >-
              swig
              diffutils
            conf_pkg: |
              dnf -y install epel-release
              dnf -y update
              dnf install -y 'dnf-command(config-manager)'
            install_gtest: |
              dnf config-manager --enable powertools
              dnf install -y gtest-devel
#-------- Debian 10-based Only Dependencies ----------------
          - cfg: { arch: debian, arch_ver: 10 }
            install_gtest: |
              apt-get install -y libgtest-dev
              cd /usr/src/gtest
              cmake .
              make
              cp libgtest* /usr/lib/
#-------- Debian 11-based Only Dependencies ----------------              
          - cfg: { arch: debian, arch_ver: 11 }
            conf_pkg: |
              export DEBIAN_FRONTEND=noninteractive
              apt-get update
              apt-get install -y tzdata
#-------- Python2.7 dependencies ---------------------------              
          - cfg: { arch: debian }
            python: 2
            python_deps: >-
              python2.7-dev
#-------- Exclude bookworm on python 2 ---------------------         
        exclude:
          - cfg: { tag: bookworm }
            python: 2
            
#-------- OS and Version Specific Dependencies ----------------
# None
#-------- Job definition ----------------
    runs-on: ubuntu-latest
    container: docker://${{matrix.cfg.os}}:${{matrix.cfg.tag}}
    steps:
      - name: Update Package Manager
        run: ${{matrix.conf_pkg}}
      - name: Install Dependencies
        run: >
          ${{matrix.pkg_mgr}} 
          ${{matrix.install_cmd}} 
          ${{matrix.deps}} 
          ${{matrix.arch_deps}} 
          ${{matrix.os_deps}} 
          ${{matrix.tag_deps}}
          ${{matrix.python_deps}}
      - name: Install GTest
        run: ${{matrix.install_gtest}}
      - name: Checkout repository
        uses: actions/checkout@v3
      - name: Configure Trick
        run: |
          export MAKEFLAGS=-j`nproc`
          export PYTHON_VERSION=${{matrix.python}}
          ./configure
      - name: Build Trick
        run: |
          export MAKEFLAGS=-j`nproc`
          make
      - name: Test
        run: |
          cd share/trick/trickops/
          python3 -m venv .venv && . .venv/bin/activate && pip3 install -r requirements.txt
          cd ../../../; make test32