name: GitHubBuild

on: [push]

jobs:
  lint_etc:
    runs-on: ubuntu-24.04
    steps:
    - uses: actions/checkout@v4

    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: 7.4
        tools: composer
        extensions: sqlite3, gd

    - name: Get composer cache directory
      if: ${{ !env.ACT }}
      id: composer-cache
      run: echo "::set-output name=dir::$(composer config cache-files-dir)"

    - name: Cache dependencies
      if: ${{ !env.ACT }}
      uses: actions/cache@v4
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: ${{ runner.os }}-composer-

    - name: run install.sh
      run: /bin/bash install.sh

    - name: check composer
      run: composer validate

# Needing to 'update' here isn't ideal, but we need to cope with tests that run under different PHP versions :-/
    - name: Install dependencies
      run: composer update --prefer-dist -n

    - name: check formatting
      run: composer check-format

    - name: touch config.local.php
      run: touch config.local.php

    - name: psalm static analysis
      run: composer psalm

  testsuite:
    needs: [lint_etc]
    runs-on: ubuntu-24.04
    strategy:
      matrix:
        php-versions: [ '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ]

    steps:
    - uses: actions/checkout@v4

    - name: Install Dovecot
      run: |
        set -eux
        sudo apt-get update -q
        sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq dovecot-core
        sudo sh -c '/sbin/useradd -G dovecot runner || usermod -aG dovecot runner '

    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: ${{ matrix.php-versions }}
        tools: composer
        extensions: sqlite3, gd

    - name: Get composer cache directory
      if: ${{ !env.ACT }}
      id: composer-cache
      run: echo "::set-output name=dir::$(composer config cache-files-dir)"

    - name: Cache dependencies
      if: ${{ !env.ACT }}
      uses: actions/cache@v4
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ matrix.php-versions}}-${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
        restore-keys: ${{ runner.os }}-composer-

    - name: run install.sh
      run: /bin/bash install.sh

    - name: touch config.local.php
      run: touch config.local.php && php -v

    - name: Install dependencies
      run: composer install --prefer-dist -n

    - name: Build/test
      run: sudo -u runner composer test

#  build_coverage_report:
#    needs: [testsuite]
#    continue-on-error: true
#    runs-on: ubuntu-22.04
#    steps:
#    - uses: actions/checkout@v4
#
#    - name: Setup PHP
#      uses: shivammathur/setup-php@v2
#      with:
#        php-version: '7.4'
#        tools: composer
#        extensions: sqlite3, gd
#
#    - name: run install.sh
#      run: /bin/bash install.sh
#
#    - name: touch config.local.php
#      run: touch config.local.php && php -v
#
#    - name: Install dependencies
#      run: composer update --prefer-dist -n
#
#    - name: build coveralls coverage
#      run: php -d xdebug.mode=coverage vendor/bin/phpunit tests
#
#    - name: Coveralls
#      run: vendor/bin/php-coveralls --coverage_clover=build/logs/clover.xml -v || true
#      env:
#        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
