238 lines
8.5 KiB
YAML
238 lines
8.5 KiB
YAML
name: "Tests"
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
# Allow manually triggering the workflow.
|
|
workflow_dispatch:
|
|
|
|
permissions: {}
|
|
|
|
jobs:
|
|
|
|
coding-standard:
|
|
runs-on: ubuntu-22.04
|
|
name: Coding standards
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Set up PHP
|
|
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
|
|
with:
|
|
php-version: 'latest'
|
|
coverage: none
|
|
tools: cs2pr
|
|
|
|
# Install dependencies and handle caching in one go.
|
|
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
|
|
- name: Install Composer dependencies
|
|
uses: "ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520" # 3.1.1
|
|
with:
|
|
# Bust the cache at least once a month - output format: YYYY-MM.
|
|
custom-cache-suffix: $(date -u "+%Y-%m")
|
|
|
|
- name: Check coding standards
|
|
id: phpcs
|
|
run: ./vendor/bin/phpcs -s --report-full --report-checkstyle=./phpcs-report.xml
|
|
|
|
- name: Show PHPCS results in PR
|
|
if: ${{ always() && steps.phpcs.outcome == 'failure' }}
|
|
run: cs2pr ./phpcs-report.xml
|
|
|
|
lint:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
php: ['5.5', '7.2', '8.0', '8.5']
|
|
experimental: [false]
|
|
include:
|
|
- php: 'nightly'
|
|
experimental: true
|
|
|
|
name: "Lint: PHP ${{ matrix.php }}"
|
|
continue-on-error: ${{ matrix.experimental }}
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Install PHP
|
|
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
ini-values: error_reporting=-1, display_errors=On, display_startup_errors=On
|
|
coverage: none
|
|
tools: cs2pr
|
|
|
|
# Install dependencies and handle caching in one go.
|
|
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
|
|
- name: Install Composer dependencies
|
|
uses: "ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520" # 3.1.1
|
|
with:
|
|
# Bust the cache at least once a month - output format: YYYY-MM.
|
|
custom-cache-suffix: $(date -u "+%Y-%m")
|
|
|
|
- name: Lint against parse errors
|
|
if: ${{ matrix.php != 'nightly' }}
|
|
run: composer lint -- --checkstyle | cs2pr
|
|
|
|
- name: Lint against future parse errors (PHP nightly)
|
|
if: ${{ matrix.php == 'nightly' }}
|
|
run: composer lint
|
|
|
|
test:
|
|
needs: ['coding-standard', 'lint']
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4']
|
|
extensions: ['optimal', 'minimal']
|
|
coverage: [false]
|
|
experimental: [false]
|
|
include:
|
|
# Run code coverage on high/low PHP.
|
|
- php: '5.5'
|
|
extensions: 'optimal'
|
|
coverage: true
|
|
experimental: false
|
|
- php: '5.5'
|
|
extensions: 'minimal'
|
|
coverage: true
|
|
experimental: false
|
|
- php: '8.5'
|
|
extensions: 'optimal'
|
|
coverage: true
|
|
experimental: false
|
|
- php: '8.5'
|
|
extensions: 'minimal'
|
|
coverage: true
|
|
experimental: false
|
|
|
|
# Experimental builds. These are allowed to fail.
|
|
- php: '8.6'
|
|
extensions: 'optimal'
|
|
coverage: false
|
|
experimental: true
|
|
- php: '8.6'
|
|
extensions: 'minimal'
|
|
coverage: false
|
|
experimental: true
|
|
|
|
name: "Test: PHP ${{ matrix.php }} - ${{ matrix.extensions }}"
|
|
|
|
continue-on-error: ${{ matrix.experimental }}
|
|
|
|
permissions:
|
|
contents: read # to fetch code (actions/checkout)
|
|
|
|
steps:
|
|
- name: Check out code
|
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
# About the "extensions":
|
|
#
|
|
# In a "normal" test run, the "default" extension set for a PHP version is used
|
|
# and it is ensured that certain extensions will be available, no matter what.
|
|
#
|
|
# For the "minimal" test run, all extensions are disabled and then only
|
|
# a limited set of minimally required extensions are re-enabled.
|
|
# The minimal set is based on the required extensions from PHPUnit + PHPMailer combined
|
|
# + Curl for Composer.
|
|
# Whether Xdebug will be enabled depends on the code coverage settings.
|
|
#
|
|
# Also see:
|
|
# https://github.com/shivammathur/setup-php/?tab=readme-ov-file#heavy_plus_sign-php-extension-support
|
|
# https://github.com/shivammathur/setup-php/wiki
|
|
- name: Determine extensions to use
|
|
id: set_extensions
|
|
run: |
|
|
if [[ "${{ matrix.extensions }}" == "optimal" ]]; then
|
|
# Optimal.
|
|
echo 'EXT=imap, mbstring, openssl, intl, ctype, filter, hash' >> $GITHUB_OUTPUT
|
|
echo 'COMPOSER_OPTIONS=' >> $GITHUB_OUTPUT
|
|
else
|
|
# Minimal.
|
|
echo 'EXT=none, curl, dom, json, libxml, mbstring, tokenizer, xml, xmlwriter, ctype, filter, hash' >> $GITHUB_OUTPUT
|
|
echo 'COMPOSER_OPTIONS=--ignore-platform-req=ext-simplexml' >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Set up PHP
|
|
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
|
ini-values: sendmail_path=/usr/sbin/sendmail -t -i, error_reporting=-1, display_errors=On, display_startup_errors=On
|
|
extensions: ${{ steps.set_extensions.outputs.EXT }}
|
|
|
|
# Install dependencies and handle caching in one go.
|
|
# @link https://github.com/marketplace/actions/install-php-dependencies-with-composer
|
|
- name: Install PHP packages - normal
|
|
if: ${{ matrix.php != '8.6' }}
|
|
uses: "ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520" # 3.1.1
|
|
with:
|
|
composer-options: ${{ steps.set_extensions.outputs.COMPOSER_OPTIONS }}
|
|
# Bust the cache at least once a month - output format: YYYY-MM.
|
|
custom-cache-suffix: $(date -u "+%Y-%m")
|
|
|
|
- name: Install PHP packages - ignore-platform-reqs
|
|
if: ${{ matrix.php == '8.6' }}
|
|
uses: "ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520" # 3.1.1
|
|
with:
|
|
composer-options: --ignore-platform-reqs ${{ steps.set_extensions.outputs.COMPOSER_OPTIONS }}
|
|
# Bust the cache at least once a month - output format: YYYY-MM.
|
|
custom-cache-suffix: $(date -u "+%Y-%m")
|
|
|
|
# Install postfix and automatically retry if the install failed, which happens reguarly.
|
|
# @link https://github.com/marketplace/actions/retry-step
|
|
- name: Install postfix
|
|
uses: nick-invision/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3.0.2
|
|
with:
|
|
timeout_minutes: 2
|
|
max_attempts: 3
|
|
retry_wait_seconds: 8
|
|
command: |
|
|
sudo apt-get install --fix-broken -y libsqlite3-0 postfix
|
|
sudo systemctl stop postfix.service
|
|
|
|
- name: Set up sendmail
|
|
run: |
|
|
smtp-sink -d "%d.%H.%M.%S" localhost:2500 1000 &
|
|
mkdir -p build/logs
|
|
sudo cp test/testbootstrap-dist.php test/testbootstrap.php
|
|
sudo chmod +x test/fakesendmail.sh
|
|
sudo mkdir -p /var/qmail/bin
|
|
sudo cp test/fakesendmail.sh /var/qmail/bin/sendmail
|
|
sudo cp test/fakesendmail.sh /usr/sbin/sendmail
|
|
|
|
- name: Run tests, no code coverage
|
|
if: ${{ matrix.coverage == false }}
|
|
run: ./vendor/bin/phpunit --no-coverage
|
|
|
|
- name: Run tests with code coverage
|
|
if: ${{ matrix.coverage == true }}
|
|
run: vendor/bin/phpunit
|
|
|
|
- name: Send coverage report to Codecov
|
|
if: ${{ success() && matrix.coverage == true && github.event.repository.fork == false }}
|
|
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
|
|
env:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
with:
|
|
files: ./build/logs/clover.xml
|
|
fail_ci_if_error: true
|
|
verbose: true
|