name: Fun with CMake on Ubuntu-Slim

on:
  push:
    branches: [ "main" ]

env:
  BUILD_TYPE: Release

jobs:
  build:
    runs-on: ubuntu-slim
    defaults:
      run:
        working-directory: ${{github.workspace}}

    steps:
      - uses: actions/checkout@v4

      - name: Update apt
        run: sudo apt update

      #- name: Upgrade apt
      #  run: sudo apt upgrade -y

      - name: Install dependencies
        run: sudo apt install cmake doxygen graphviz libjson-c-dev libssl-dev -y

      - name: Configure CMake
        run: cmake -S . -B build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DFUN_DEBUG=OFF -DFUN_WITH_REPL=ON -DFUN_WITH_PCSC=OFF -DFUN_WITH_LIBSQL=OFF -DFUN_WITH_SQLITE=OFF -DFUN_WITH_CURL=OFF -DFUN_WITH_PCRE2=OFF -DFUN_WITH_XML2=OFF -DFUN_WITH_JSON=ON -DFUN_WITH_TCLTK=OFF -DFUN_WITH_INI=OFF -DFUN_WITH_NOTCURSES=OFF -DFUN_WITH_CPP=ON -DFUN_WITH_OPENSSL=ON -DFUN_WITH_LIBRESSL=OFF -DFUN_WITH_YAML=OFF -DFUN_USE_MUSL=OFF -DFUN_WITH_RUST=OFF

      - name: Build
        run: cmake --build build --config ${{env.BUILD_TYPE}} --target all

      - name: Test
        working-directory: ${{github.workspace}}/build
        run: ctest -C ${{env.BUILD_TYPE}}

      - name: Run Opcode include checks.
        run: ./scripts/check_op_includes.py

      - name: Run Examples
        run: ./scripts/run_examples.sh

      - name: Run Examples (algos)
        run: ./scripts/run_examples.sh algos

      - name: Run Examples (arrays)
        run: ./scripts/run_examples.sh arrays

      - name: Run Examples (basics)
        run: ./scripts/run_examples.sh basics

      - name: Run Examples (compose)
        run: ./scripts/run_examples.sh compose

      - name: Run Examples (crypto)
        run: ./scripts/run_examples.sh crypto

      #- name: Run Examples (extensions/curl)
      #  run: ./scripts/run_examples.sh extensions/curl

      #- name: Run Examples (extensions/ini)
      #  run: ./scripts/run_examples.sh extensions/ini

      - name: Run Examples (extensions/json)
        run: ./scripts/run_examples.sh extensions/json

      #- name: Run Examples (extensions/libressl)
      #  run: ./scripts/run_examples.sh extensions/libressl

      #- name: Run Examples (extensions/libsql)
      #  run: ./scripts/run_examples.sh extensions/libsql

      #- name: Run Examples (extensions/notcurses)
      #  run: ./scripts/run_examples.sh extensions/notcurses

      - name: Run Examples (extensions/openssl)
        run: ./scripts/run_examples.sh extensions/openssl

      #- name: Run Examples (extensions/pcre2)
      #  run: ./scripts/run_examples.sh extensions/pcre2

      #- name: Run Examples (extensions/pcsc)
      #  run: ./scripts/run_examples.sh extensions/pcsc

      #- name: Run Examples (extensions/sqlite)
      #  run: ./scripts/run_examples.sh extensions/sqlite

      #- name: Run Examples (extensions/tcltk)
      #  run: ./scripts/run_examples.sh extensions/tcltk

      #- name: Run Examples (extensions/xml2)
      #  run: ./scripts/run_examples.sh extensions/xml2

      - name: Run Examples (functions)
        run: ./scripts/run_examples.sh functions

      - name: Run Examples (io)
        run: ./scripts/run_examples.sh io

      - name: Run Examples (math)
        run: ./scripts/run_examples.sh math

      - name: Run Examples (patterns)
        run: ./scripts/run_examples.sh patterns

      - name: Run Examples (strings)
        run: ./scripts/run_examples.sh strings
