name: Test and Build

defaults:
  run:
    shell: bash

on:
  push:
    branches:
      - master

  pull_request:
    branches:
      - master

  workflow_dispatch:

jobs:
  Test-phpunit:
    name: PHPUNIT (PHP-${{ matrix.php-versions }} && DB-${{ matrix.database }})
    runs-on: ubuntu-latest

    strategy:
      matrix:
        php-versions: ['8.1']
        database: ['mysql', 'postgres', 'sqlite']

    env:
        PHP_V: ${{ matrix.php-versions }}
        DB: ${{ matrix.database }}
        TEST_ARG: 'phpunit'

    services:
      mysql:
        image: mysql:latest
        env:
          MYSQL_ROOT_PASSWORD: cypht_test
          MYSQL_DATABASE: cypht_test
          MYSQL_USER: cypht_test
          MYSQL_PASSWORD: cypht_test
        ports:
          - 3306:3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

      postgresql:
        image: postgres:latest
        env:
          POSTGRES_USER: cypht_test
          POSTGRES_PASSWORD: cypht_test
          POSTGRES_DB: cypht_test
        ports:
          - 5432:5432
        options: --health-cmd="pg_isready" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - name: "System Install Dependencies"
        run: sudo apt-get install -y mysql-client postgresql-client sqlite3 libsodium-dev

      - name: "Checkout code"
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: "Set up PHP"
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: pdo, sodium, sqlite, pdo_mysql, pdo_pgsql, memcached, redis, gd, gnupg
          tools: phpunit, composer
          ini-values: cgi.fix_pathinfo=1
        env:
          fail-fast: true

      - name: "Script: setup.sh"
        run: bash .github/tests/setup.sh

      - name: "Composer Install Dependencies"
        run: |
            composer install
            composer require --dev php-coveralls/php-coveralls
            php scripts/config_gen.php

      - name: "Script: test.sh"
        run: bash .github/tests/test.sh


  Test-selenium:
    name: SELENIUM (PHP-${{ matrix.php-versions }} && DB-${{ matrix.database }})
    runs-on: ubuntu-latest
    needs: Test-phpunit

    strategy:
      matrix:
        php-versions: ['8.1']
        database: ['sqlite']

    env:
        PHP_V: ${{ matrix.php-versions }}
        DB: ${{ matrix.database }}
        TEST_ARG: 'selenium'

    steps:
      - name: "Checkout code"
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: "System Install Dependencies"
        run: |
            sudo hostnamectl set-hostname cypht-test.org
            sudo usermod -aG docker www-data
            sudo chmod g+s -R "$(pwd)"
            sudo setfacl -d -m g::rwx "$(pwd)"
            # chrome
            #wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor > /etc/apt/trusted.gpg.d/google.gpg
            sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
            sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
            sudo apt-get update
            sudo apt-get install -y google-chrome-stable dovecot-imapd dovecot-lmtpd postfix python3-pip
            sudo bash .github/tests/selenium/webdriver/webdriver.sh
            pip install -r tests/selenium/requirements.txt

      - name: "Set up PHP"
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ env.PHP_V }}
          extensions: pdo, sodium, curl, mbstring, xml, sqlite, pdo_mysql, pdo_pgsql, memcached, redis, gd, gnupg, imagick, bcmath, tidy, soap, xdebug, bcmath
          tools: phpunit, composer
          ini-values: cgi.fix_pathinfo=1
        env:
          fail-fast: true

      - name: "Composer Install Dependencies"
        run: |
            composer install
            php scripts/config_gen.php

      - name: "Script: setup.sh"
        run: bash .github/tests/setup.sh

      - name: "Script: test.sh"
        run: bash .github/tests/test.sh

  Call-Image-Build:
    needs: Test-selenium
    uses: ./.github/workflows/Nightly-Image.yml