Skip to content

Try this

Try this #16

name: Test requirements check
on:
# Run on pushes to master 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:
# - master
# tags:
# - '**'
paths:
# TODO: verify!!!
- '.github/workflows/test-requirements-check.yml'
- '.github/workflows/reusable-build-phar.yml'
- 'bin/phpcs'
- 'bin/phpcbf'
- 'requirements.php'
- 'scripts/**'
pull_request:
paths:
- '.github/workflows/test-requirements-check.yml'
- '.github/workflows/reusable-build-phar.yml'
- 'bin/phpcs'
- 'bin/phpcbf'
- '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 don't contain parse errors on 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@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
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
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@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: 'latest'
ini-values: 'error_reporting=-1, display_errors=On'
coverage: none
- name: Set matrix
id: set-matrix
run: echo "MATRIX=$(php scripts/get-requirements-check-matrix.php)" >> "$GITHUB_OUTPUT"
test-plain:
needs: prepare-matrix
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
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@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: 'error_reporting=-1, display_errors=On'
extensions: ${{ matrix.extensions }}
coverage: none
env:
fail-fast: true
- name: Run the test
id: check
continue-on-error: true
run: php "bin/${{ matrix.cmd }}" ./scripts
# TEMPORARY
# - name: Check the result of a successful test against expectation
# if: ${{ steps.check.outcome == 'success' && expect == 'fail' }}
# run: exit 1
# - name: Check the result of a failed test against expectation
# if: ${{ steps.check.outcome != 'success' && expect == 'success' }}
# 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-phar:
needs: [prepare-matrix, build-phars]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
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@v4
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: 'error_reporting=-1, display_errors=On'
extensions: ${{ matrix.extensions }}
coverage: none
env:
fail-fast: true
- name: Download the phar
uses: actions/download-artifact@v4
with:
name: ${{ matrix.cmd }}-phar
- name: Run the test
id: check
continue-on-error: true
run: php ${{ matrix.cmd }}.phar ./scripts
# TEMPORARY
# - name: Check the result of a successful test against expectation
# if: ${{ steps.check.outcome == 'success' && expect == 'fail' }}
# run: exit 1
# - name: Check the result of a failed test against expectation
# if: ${{ steps.check.outcome != 'success' && expect == 'success' }}
# run: exit 1