Skip to content

ADD TO: workflow iterate #6

ADD TO: workflow iterate

ADD TO: workflow iterate #6

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/build-phar.php'
pull_request:
paths:
- '.github/workflows/test-requirements-check.yml'
- '.github/workflows/reusable-build-phar.yml'
- 'bin/phpcs'
- 'bin/phpcbf'
- 'requirements.php'
- 'scripts/build-phar.php'
# 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
build:
name: "Build Phar on PHP: 8.0"
uses: ./.github/workflows/reusable-build-phar.yml
with:
uploadArtifacts: true
test-plain:
needs: lint
# if: ${{ needs.prepare-matrix.outputs.matrix != '' }}
# strategy:
# fail-fast: false
# matrix:
# os: ['ubuntu-latest', 'windows-latest']
# cmd: ['phpcs', 'phpcbf']
# include: ${{ fromJson(needs.prepare-matrix.outputs.matrix_include) }}
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest', 'windows-latest']
cmd: ['phpcs', 'phpcbf']
include:
# Test runs where the requirements check should pass.
- name: "PHP 7.2, extensions: default, expected: success"
php: '7.2'
extensions: ''
expected: 'success'
- name: "PHP latest, extensions: default, expected: success"
php: 'latest'
extensions: ''
expected: 'success'
# This test _should_ pass, but is allowed to continue-on-error in the actual workflows.
- name: "PHP nightly, extensions: default, expected: success"
php: 'nightly'
extensions: ''
expected: 'success'
# Test runs where only the _minimum_ extension requirements are met should pass.
- name: "PHP 7.2, extensions: minimal, expected: success"
php: '7.2'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
- name: "PHP latest, extensions: minimal, expected: success"
php: 'latest'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
# This test _should_ pass, but is allowed to continue-on-error in the actual workflows.
- name: "PHP nightly, extensions: minimal, expected: success"
php: 'nightly'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
# Test failing the requirements check when the PHP version is too low.
- name: "PHP 5.3, fail on PHP too low"
php: '5.3'
extensions: ''
expected: 'fail'
- name: "PHP 7.1, fail on PHP too low"
php: '7.1'
extensions: ''
expected: 'fail'
# Test failing the requirements check when a required extension is missing.
- name: "PHP 7.2, fail on missing tokenizer"
php: '7.2'
extensions: ':tokenizer'
expected: 'fail'
- name: "PHP latest, fail on missing tokenizer"
php: 'latest'
extensions: ':tokenizer'
expected: 'fail'
- name: "PHP 7.2, fail on missing xmlwriter"
php: '7.2'
extensions: ':xmlwriter'
expected: 'fail'
- name: "PHP latest, fail on missing xmlwriter"
php: 'latest'
extensions: ':xmlwriter'
expected: 'fail'
- name: "PHP 7.2, fail on missing SimpleXML"
php: '7.2'
extensions: ':SimpleXML'
expected: 'fail'
- name: "PHP latest, fail on missing SimpleXML"
php: 'latest'
extensions: ':SimpleXML'
expected: 'fail'
- name: "PHP 7.2, fail on missing all required extensions"
php: '7.2'
extensions: ':tokenizer, :xmlwriter, :SimpleXML'
expected: 'fail'
- name: "PHP latest, fail on missing all required extensions"
php: 'latest'
extensions: ':tokenizer, :xmlwriter, :SimpleXML'
expected: 'fail'
# yamllint disable-line rule:line-length
# TODO
name: "Requirements plain: ${{ matrix.cmd }} ${{ matrix.name }} (${{ matrix.os == 'ubuntu-latest' && 'Linux' || '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' && expected == 'fail' }}
# run: exit 1
# - name: Check the result of a failed test against expectation
# if: ${{ steps.check.outcome != 'success' && expected == 'success' }}
# run: exit 1
test-phar:
needs: [lint, build]
# if: ${{ needs.prepare-matrix.outputs.matrix != '' }}
# strategy:
# fail-fast: false
# matrix: ${{ fromJson(needs.prepare-matrix.outputs.matrix) }}
strategy:
fail-fast: false
matrix:
os: ['ubuntu-latest', 'windows-latest']
cmd: ['phpcs', 'phpcbf']
include:
# Test runs where the requirements check should pass.
- name: "PHP 7.2, extensions: default, expected: success"
php: '7.2'
extensions: ''
expected: 'success'
- name: "PHP latest, extensions: default, expected: success"
php: 'latest'
extensions: ''
expected: 'success'
# This test _should_ pass, but is allowed to continue-on-error in the actual workflows.
- name: "PHP nightly, extensions: default, expected: success"
php: 'nightly'
extensions: ''
expected: 'success'
# Test runs where only the _minimum_ extension requirements are met should pass.
- name: "PHP 7.2, extensions: minimal, expected: success"
php: '7.2'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
- name: "PHP latest, extensions: minimal, expected: success"
php: 'latest'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
# This test _should_ pass, but is allowed to continue-on-error in the actual workflows.
- name: "PHP nightly, extensions: minimal, expected: success"
php: 'nightly'
extensions: 'none, tokenizer, xmlwriter, SimpleXML'
expected: 'success'
# Test failing the requirements check when the PHP version is too low.
- name: "PHP 5.3, fail on PHP too low"
php: '5.3'
extensions: ''
expected: 'fail'
- name: "PHP 7.1, fail on PHP too low"
php: '7.1'
extensions: ''
expected: 'fail'
# Test failing the requirements check when a required extension is missing.
- name: "PHP 7.2, fail on missing tokenizer"
php: '7.2'
extensions: ':tokenizer'
expected: 'fail'
- name: "PHP latest, fail on missing tokenizer"
php: 'latest'
extensions: ':tokenizer'
expected: 'fail'
- name: "PHP 7.2, fail on missing xmlwriter"
php: '7.2'
extensions: ':xmlwriter'
expected: 'fail'
- name: "PHP latest, fail on missing xmlwriter"
php: 'latest'
extensions: ':xmlwriter'
expected: 'fail'
- name: "PHP 7.2, fail on missing SimpleXML"
php: '7.2'
extensions: ':SimpleXML'
expected: 'fail'
- name: "PHP latest, fail on missing SimpleXML"
php: 'latest'
extensions: ':SimpleXML'
expected: 'fail'
- name: "PHP 7.2, fail on missing all required extensions"
php: '7.2'
extensions: ':tokenizer, :xmlwriter, :SimpleXML'
expected: 'fail'
- name: "PHP latest, fail on missing all required extensions"
php: 'latest'
extensions: ':tokenizer, :xmlwriter, :SimpleXML'
expected: 'fail'
# yamllint disable-line rule:line-length
# TODO
name: "Requirements PHAR: ${{ matrix.cmd }} ${{ matrix.name }} (${{ matrix.os == 'ubuntu-latest' && 'Linux' || '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' && expected == 'fail' }}
# run: exit 1
# - name: Check the result of a failed test against expectation
# if: ${{ steps.check.outcome != 'success' && expected == 'success' }}
# run: exit 1