mirror of
https://github.com/flarum/framework.git
synced 2024-11-23 14:38:22 +08:00
1ee5cf6ba9
* chore: test with php 8.2 * chore: bump httphandlerunnder * chore: bump httphandlerunner * chore: address php8.2 deprecation * chore: php 8.2 * chore: bump less.php version * avoid dynamic properties * avoid another dynamic property * Apply fixes from StyleCI * tags php82 * php82 * fix: check for property existence * Rerun checks after s9e/text-formatter update * chore: disable deprecation warnings for php 8.2 * chore: PHP8.2 does not accept dynamic properties * chore: temporarily disable package manager tests workflow Co-authored-by: Sami Mazouz <sychocouldy@gmail.com>
191 lines
6.0 KiB
YAML
191 lines
6.0 KiB
YAML
name: Flarum Backend Jobs
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
enable_backend_testing:
|
|
description: "Enable Backend Testing?"
|
|
type: boolean
|
|
default: true
|
|
required: false
|
|
|
|
enable_phpstan:
|
|
description: "Enable PHPStan Static Analysis?"
|
|
type: boolean
|
|
default: false
|
|
required: false
|
|
|
|
backend_directory:
|
|
description: The directory of the project where backend code is located. This should contain a `composer.json` file, and is generally the root directory of the repo.
|
|
type: string
|
|
required: false
|
|
default: '.'
|
|
|
|
php_versions:
|
|
description: Versions of PHP to test with. Should be array of strings encoded as JSON array
|
|
type: string
|
|
required: false
|
|
default: '["7.3", "7.4", "8.0", "8.1", "8.2"]'
|
|
|
|
php_extensions:
|
|
description: PHP extensions to install.
|
|
type: string
|
|
required: false
|
|
default: 'curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip'
|
|
|
|
db_versions:
|
|
description: Versions of databases to test with. Should be array of strings encoded as JSON array
|
|
type: string
|
|
required: false
|
|
default: '["mysql:5.7", "mysql:8.0.30", "mariadb"]'
|
|
|
|
php_ini_values:
|
|
description: PHP ini values
|
|
type: string
|
|
required: false
|
|
default: error_reporting=E_ALL
|
|
|
|
env:
|
|
COMPOSER_ROOT_VERSION: dev-main
|
|
FLARUM_TEST_TMP_DIR_LOCAL: tests/integration/tmp
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
matrix:
|
|
php: ${{ fromJSON(inputs.php_versions) }}
|
|
service: ${{ fromJSON(inputs.db_versions) }}
|
|
prefix: ['']
|
|
php_ini_values: [inputs.php_ini_values]
|
|
|
|
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude
|
|
include:
|
|
# Expands the matrix by naming DBs.
|
|
- service: 'mysql:5.7'
|
|
db: MySQL 5.7
|
|
- service: 'mysql:8.0.30'
|
|
db: MySQL 8.0
|
|
- service: mariadb
|
|
db: MariaDB
|
|
|
|
# Include Database prefix tests with only one PHP version.
|
|
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
service: 'mysql:5.7'
|
|
db: MySQL 5.7
|
|
prefix: flarum_
|
|
prefixStr: (prefix)
|
|
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
service: 'mysql:8.0.30'
|
|
db: MySQL 8.0
|
|
prefix: flarum_
|
|
prefixStr: (prefix)
|
|
- php: ${{ fromJSON(inputs.php_versions)[0] }}
|
|
service: mariadb
|
|
db: MariaDB
|
|
prefix: flarum_
|
|
prefixStr: (prefix)
|
|
|
|
# @TODO: remove in 2.0
|
|
# Include testing PHP 8.2 with deprecation warnings disabled.
|
|
- php: 8.2
|
|
php_ini_values: error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED
|
|
|
|
# To reduce number of actions, we exclude some PHP versions from running with some DB versions.
|
|
exclude:
|
|
- php: ${{ fromJSON(inputs.php_versions)[1] }}
|
|
service: 'mysql:8.0.30'
|
|
- php: ${{ fromJSON(inputs.php_versions)[2] }}
|
|
service: 'mysql:8.0.30'
|
|
- php: ${{ fromJSON(inputs.php_versions)[3] }}
|
|
service: 'mysql:8.0.30'
|
|
|
|
# @TODO: remove in 2.0
|
|
# Exclude testing PHP 8.2 with deprecation warnings enabled.
|
|
- php: 8.2
|
|
php_ini_values: error_reporting=E_ALL
|
|
|
|
services:
|
|
mysql:
|
|
image: ${{ matrix.service }}
|
|
ports:
|
|
- 13306:3306
|
|
|
|
name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}'
|
|
|
|
if: >-
|
|
inputs.enable_backend_testing &&
|
|
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
|
|
|
steps:
|
|
- uses: actions/checkout@master
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
coverage: xdebug
|
|
extensions: ${{ inputs.php_extensions }}
|
|
tools: phpunit, composer:v2
|
|
ini-values: ${{ matrix.php_ini_values }}
|
|
|
|
# The authentication alter is necessary because newer mysql versions use the `caching_sha2_password` driver,
|
|
# which isn't supported prior to PHP7.4
|
|
# When we drop support for PHP7.3, we should remove this from the setup.
|
|
- name: Create MySQL Database
|
|
run: |
|
|
sudo systemctl start mysql
|
|
mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306
|
|
mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" --port 13306
|
|
|
|
- name: Install Composer dependencies
|
|
run: composer install
|
|
working-directory: ${{ inputs.backend_directory }}
|
|
|
|
- name: Setup Composer tests
|
|
run: composer test:setup
|
|
working-directory: ${{ inputs.backend_directory }}
|
|
env:
|
|
DB_PORT: 13306
|
|
DB_PASSWORD: root
|
|
DB_PREFIX: ${{ matrix.prefix }}
|
|
|
|
- name: Run Composer tests
|
|
run: composer test
|
|
working-directory: ${{ inputs.backend_directory }}
|
|
env:
|
|
COMPOSER_PROCESS_TIMEOUT: 600
|
|
|
|
phpstan:
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
matrix:
|
|
php: ${{ fromJSON(inputs.php_versions) }}
|
|
|
|
name: 'PHPStan PHP ${{ matrix.php }}'
|
|
|
|
if: >-
|
|
inputs.enable_phpstan &&
|
|
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
|
|
|
steps:
|
|
- uses: actions/checkout@master
|
|
|
|
- name: Setup PHP
|
|
uses: shivammathur/setup-php@v2
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
coverage: xdebug
|
|
extensions: ${{ inputs.php_extensions }}
|
|
tools: phpunit, composer:v2
|
|
ini-values: ${{ matrix.php_ini_values }}
|
|
|
|
- name: Install Composer dependencies
|
|
run: composer install
|
|
working-directory: ${{ inputs.backend_directory }}
|
|
|
|
- name: Run PHPStan
|
|
run: composer analyse:phpstan
|