name: Build & Test (Arch)

on: [push, pull_request, workflow_dispatch]
jobs:
  gcc:
    name: "gcc build / clang test"
    runs-on: ubuntu-latest
    container:
      image: archlinux
    steps:
      - name: Checkout repository actions
        uses: actions/checkout@v4
        with:
          sparse-checkout: .github/actions

      - name: Get required pkgs
        run: |
          sed -i 's/SigLevel    = Required DatabaseOptional/SigLevel    = Optional TrustAll/' /etc/pacman.conf
          pacman --noconfirm --noprogressbar -Syyu
          pacman --noconfirm --noprogressbar -Sy gcc base-devel cmake clang

      - name: Build with gcc
        run: |
          CC="/usr/bin/gcc" CXX="/usr/bin/g++" cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
          CC="/usr/bin/gcc" CXX="/usr/bin/g++" cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
          cp ./build/libhyprlang.so /usr/lib

      - name: Build with clang
        run: |
          rm -rf ./build
          CC="/usr/bin/clang" CXX="/usr/bin/clang++" cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
          CC="/usr/bin/clang" CXX="/usr/bin/clang++" cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
          rm ./build/libhyprlang.so

      - name: Run tests
        run: |
          cd ./tests && ../build/hyprlang_test

  clang:
    name: "clang build / gcc test"
    runs-on: ubuntu-latest
    container:
      image: archlinux
    steps:
      - name: Checkout repository actions
        uses: actions/checkout@v4
        with:
          sparse-checkout: .github/actions

      - name: Get required pkgs
        run: |
          sed -i 's/SigLevel    = Required DatabaseOptional/SigLevel    = Optional TrustAll/' /etc/pacman.conf
          pacman --noconfirm --noprogressbar -Syyu
          pacman --noconfirm --noprogressbar -Sy gcc base-devel cmake clang

      - name: Build with clang
        run: |
          CC="/usr/bin/clang" CXX="/usr/bin/clang++" cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
          CC="/usr/bin/clang" CXX="/usr/bin/clang++" cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
          cp ./build/libhyprlang.so /usr/lib

      - name: Build with gcc
        run: |
          rm -rf ./build
          CC="/usr/bin/gcc" CXX="/usr/bin/g++" cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -S . -B ./build
          CC="/usr/bin/gcc" CXX="/usr/bin/g++" cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
          rm ./build/libhyprlang.so

      - name: Run tests
        run: |
          cd ./tests && ../build/hyprlang_test

  doxygen:
    name: "Deploy docs"
    runs-on: ubuntu-latest
    container:
      image: archlinux
    steps:
      - name: Checkout repository actions
        uses: actions/checkout@v4
        with:
          sparse-checkout: .github/actions

      - name: Get required pkgs
        run: |
          sed -i 's/SigLevel    = Required DatabaseOptional/SigLevel    = Optional TrustAll/' /etc/pacman.conf
          pacman --noconfirm --noprogressbar -Syyu
          pacman --noconfirm --noprogressbar -Sy gcc base-devel cmake clang doxygen git openssh

      - name: Get doxygen theme
        run: |
          git clone https://github.com/jothepro/doxygen-awesome-css
          cd doxygen-awesome-css && git checkout v2.3.1 && cd ..
      
      - name: Build doxygen site
        run: |
          doxygen hyprlang-docs

      - name: Deploy
        env:
          PK: ${{ secrets.UPDATE_DOCS_PK }}
          PT: ${{ secrets.DEPLOY_PORT5 }}
          AD: ${{ secrets.DEPLOY_USER }}
          PH: ${{ secrets.DEPLOY_PATH }}
        run: |
          echo "$PK" > ./pk
          chmod 400 ./pk
          eval $(ssh-agent -s) && ssh-add ./pk 2>&1 > /dev/null
          scp -O -o "StrictHostKeyChecking=no" -q -o "LogLevel=QUIET" -P $PT -r ./doxygen/html/* $AD:.$PH 2>&1 > /dev/null