Skip to content

Merge branch '3.x' into 4.x #71

Merge branch '3.x' into 4.x

Merge branch '3.x' into 4.x #71

name: Test requirements check
on:
# Run on pushes to the main branches and on pull requests which touch files related to the requirements check.
# No need to run this workflow when there are only irrelevant changes.
push:
branches:
- 4.x
tags:
- '**'
paths:
- '.github/workflows/test-requirements-check.yml'
- '.github/workflows/reusable-build-phar.yml'
- 'bin/phpcs'
- 'bin/phpcbf'
- 'phpcs.xml.dist'
- 'requirements.php'
- 'scripts/**'
pull_request:
paths:
- '.github/workflows/test-requirements-check.yml'
- '.github/workflows/reusable-build-phar.yml'
- 'bin/phpcs'
- 'bin/phpcbf'
- 'phpcs.xml.dist'
- 'requirements.php'
- 'scripts/**'
# Allow manually triggering the workflow.
workflow_dispatch:
# Cancels all previous workflow runs for the same branch that have not yet completed.
concurrency:
# The concurrency group contains the workflow name and the branch name.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Make sure that the files involved in the requirements check don't contain parse errors
# for the PHP versions supported by the requirements check to prevent the tests being run
# failing on the parse errors instead of on the requirements check
# (which would easily go unnoticed).
lint:
runs-on: ubuntu-latest
strategy:
matrix:
php: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1']
name: "Lint: PHP ${{ matrix.php }}"
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Install PHP
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
with:
php-version: ${{ matrix.php }}
coverage: none
- name: "Lint bin/phpcs"
run: php -l ./bin/phpcs
- name: "Lint bin/phpcbf"
run: php -l ./bin/phpcbf
- name: "Lint requirements.php"
run: php -l ./requirements.php
# The matrix for these tests should be the same for the "plain" file test as for the PHAR test.
# This matrix, however, is quite complex, making maintaining it manually pretty error prone.
# So this job uses a PHP script to generate the matrix based on a fixed set of variables.
#
# The resulting matrix contains builds which combine the following variables:
# - os: ubuntu / windows
# - cmd: phpcs / phpcbf
# - php: 7.2 (minimum PHP version for 4.x), latest and nightly with the required extensions (should pass the check).
# - php: 5.3 (minimum for the requirements check) and 7.1 with the required extension (should fail the PHP version check).
# - php: 7.2 (minimum PHP version for 4.x), latest and nightly WITHOUT required extensions (should fail the check for extensions).
#
# Each combination also contains a "expect" key to set the expectations for success / failure.
#
# The scripts involved in generating the matrix can be found in the `/scripts/` directory.
prepare-matrix:
needs: lint
name: Get test matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.MATRIX }}
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Install PHP
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
with:
php-version: 'latest'
ini-values: 'error_reporting=-1, display_errors=On, display_startup_errors=On'
coverage: none
- name: Set matrix
id: set-matrix
run: echo "MATRIX=$(php scripts/get-requirements-check-matrix.php)" >> "$GITHUB_OUTPUT"
- name: "DEBUG: show generated matrix"
run: echo ${{ steps.set-matrix.outputs.MATRIX }}
# Test that the requirements check works correctly when using a Composer install or git clone of PHPCS.
test-plain:
needs: prepare-matrix
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare-matrix.outputs.MATRIX) }}
# yamllint disable-line rule:line-length
name: "Plain: ${{ matrix.cmd == 'phpcs' && 'cs' || 'cbf' }} / ${{ matrix.php }} / ${{ matrix.name }} (${{ matrix.os == 'ubuntu-latest' && 'nix' || 'Win' }})"
continue-on-error: ${{ matrix.php == 'nightly' }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- 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'
extensions: ${{ matrix.extensions }}
coverage: none
env:
fail-fast: true
# We're only testing the requirements check here, so we just need to verify that PHPCS/PHPCBF starts. Nothing more.
- name: Run the test
id: check
continue-on-error: true
shell: bash
run: |
set +e
php "bin/${{ matrix.cmd }}" --version
exitcode="$?"
echo "EXITCODE=$exitcode" >> "$GITHUB_OUTPUT"
echo "Exitcode is: $exitcode"
exit "$exitcode"
- name: Check the result of a successful test against expectation
if: ${{ steps.check.outcome == 'success' && matrix.expect == 'fail' }}
run: exit 1
- name: Check the result of a failed test against expectation
if: ${{ steps.check.outcome != 'success' && matrix.expect == 'success' }}
run: exit 1
- name: Verify the exit code is 0 when requirements are met
if: ${{ matrix.expect == 'success' && steps.check.outputs.EXITCODE != 0 }}
run: exit 1
- name: Verify the exit code is 64 when requirements are not met
if: ${{ matrix.expect == 'fail' && steps.check.outputs.EXITCODE != 64 }}
run: exit 1
build-phars:
needs: lint
name: "Build Phar on PHP 8.0"
uses: ./.github/workflows/reusable-build-phar.yml
with:
uploadArtifacts: true
# Test that the requirements check works correctly when using a PHPCS/PHPCBF PHAR file.
test-phar:
needs: [prepare-matrix, build-phars]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare-matrix.outputs.MATRIX) }}
# yamllint disable-line rule:line-length
name: "PHAR: ${{ matrix.cmd == 'phpcs' && 'cs' || 'cbf' }} / ${{ matrix.php }} / ${{ matrix.name }} (${{ matrix.os == 'ubuntu-latest' && 'nix' || 'Win' }})"
continue-on-error: ${{ matrix.php == 'nightly' }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- 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'
extensions: ${{ matrix.extensions }}
coverage: none
env:
fail-fast: true
- name: Download the phar
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: ${{ matrix.cmd }}-phar
# We're only testing the requirements check here, so we just need to verify that PHPCS/PHPCBF starts. Nothing more.
- name: Run the test
id: check
continue-on-error: true
shell: bash
run: |
set +e
php ${{ matrix.cmd }}.phar --version
exitcode="$?"
echo "EXITCODE=$exitcode" >> "$GITHUB_OUTPUT"
echo "Exitcode is: $exitcode"
exit "$exitcode"
- name: Check the result of a successful test against expectation
if: ${{ steps.check.outcome == 'success' && matrix.expect == 'fail' }}
run: exit 1
- name: Check the result of a failed test against expectation
if: ${{ steps.check.outcome != 'success' && matrix.expect == 'success' }}
run: exit 1
- name: Verify the exit code is 0 when requirements are met
if: ${{ matrix.expect == 'success' && steps.check.outputs.EXITCODE != 0 }}
run: exit 1
- name: Verify the exit code is 64 when requirements are not met
if: ${{ matrix.expect == 'fail' && steps.check.outputs.EXITCODE != 64 }}
run: exit 1