ADD TO: workflow iterate #6
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |