Skip to content

End-to-End Tests

End-to-End Tests #1367

Workflow file for this run

name: End-to-End Tests
on:
push:
branches: [ main ]
pull_request: ~
release:
types: [ created ]
schedule:
# Do not make it the first of the month and/or midnight since it is a very busy time
- cron: "* 10 5 * *"
# See https://stackoverflow.com/a/72408109
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-test-phar:
runs-on: ubuntu-latest
name: Build (test) PHAR
strategy:
fail-fast: false
matrix:
php:
- '8.2'
- '8.3'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: phar.readonly=0
tools: composer
coverage: none
- name: Install Composer dependencies
uses: ./.github/actions/install-vendor
- name: Build PHAR
run: make build
# Smoke test
- name: Ensure the PHAR works
run: bin/php-scoper.phar --version
- uses: actions/upload-artifact@v4
name: Upload the PHAR artifact
with:
name: php-scoper-phar-${{ matrix.php }}
path: bin/php-scoper.phar
e2e-tests:
name: 'Test ${{ matrix.e2e }} (PHP: ${{ matrix.php }}) with ${{ matrix.composer }}'
runs-on: ubuntu-latest
needs: build-test-phar
strategy:
fail-fast: false
matrix:
e2e:
- 'e2e_004'
- 'e2e_005'
- 'e2e_011'
- 'e2e_013'
- 'e2e_014'
- 'e2e_015'
- 'e2e_016'
- 'e2e_017'
- 'e2e_018'
- 'e2e_019'
- 'e2e_020'
- 'e2e_024'
- 'e2e_025'
- 'e2e_027'
- 'e2e_028'
- 'e2e_029'
- 'e2e_030'
- 'e2e_031'
- 'e2e_032'
- 'e2e_033'
- 'e2e_034'
- 'e2e_035'
- 'e2e_036'
- 'e2e_037'
- 'e2e_040'
php:
- '8.2'
- '8.3'
composer:
- 'composer:2.2'
- 'composer'
include:
- e2e: 'e2e_039'
php: '8.2'
composer: 'composer:2.2'
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
ini-values: phar.readonly=0
tools: ${{ matrix.composer }}
coverage: pcov
env:
# This is necessary when installing a tool with a specific version
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install Composer dependencies
uses: ./.github/actions/install-vendor
- name: Retrieve built PHAR
uses: actions/download-artifact@v4
with:
name: php-scoper-phar-${{ matrix.php }}
path: bin
- name: Ensure PHAR will not be rebuilt
run: touch -c vendor-hotfix bin/php-scoper.phar
# See https://github.com/actions/download-artifact#limitations
# the permissions are not guaranteed to be preserved
- name: Ensure PHAR is executable
run: chmod 755 bin/php-scoper.phar
- name: Check that the PHAR works
run: bin/php-scoper.phar --version
- name: Install tree
if: matrix.e2e == 'e2e_032'
run: sudo apt-get install -y tree
- name: Run e2e ${{ matrix.e2e }}
run: make ${{ matrix.e2e }}
# Most of the job definitions come from https://github.com/sebastianbergmann/phpunit/blob/main/.github/workflows/ci.yml#L228
# (job name "test-phar").
test-phpunit-scoping:
runs-on: ubuntu-latest
needs: build-test-phar
env:
PHP_EXTENSIONS: none, curl, ctype, dom, json, fileinfo, iconv, libxml, mbstring, phar, soap, tokenizer, xml, xmlwriter
PHP_INI_VALUES: assert.exception=1, phar.readonly=0, zend.assertions=1
strategy:
fail-fast: false
matrix:
php-version:
- '8.3'
coverage:
- xdebug
steps:
- name: Checkout PHPUnit code
uses: actions/checkout@v4
with:
repository: 'sebastianbergmann/phpunit'
- name: Install PHP with extensions
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
coverage: ${{ matrix.coverage }}
extensions: ${{ env.PHP_EXTENSIONS }}
ini-values: ${{ env.PHP_INI_VALUES }}
tools: none
- name: Install java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 11
- name: Retrieve built PHP-Scoper PHAR
uses: actions/download-artifact@v4
with:
name: php-scoper-phar-${{ matrix.php-version }}
path: bin
# See https://github.com/actions/download-artifact#limitations
# the permissions are not guaranteed to be preserved
- name: Ensure PHAR is executable
run: chmod 755 bin/php-scoper.phar
- name: Make the downloaded PHP-Scoper PHAR the PHPUnit scoper used
run: mv -f bin/php-scoper.phar tools/php-scoper
- name: Check that the PHP-Scoper PHAR works
run: tools/php-scoper --version
- name: Build PHPUnit scoped PHAR
run: ant phar-snapshot
# To keep in sync with e2e.file#e2e_038
- name: Run PHPUnit PHAR-specific tests
run: ant run-phar-specific-tests
# This is a "trick", a meta task which does not change, and we can use in
# the protected branch rules as opposed to the E2E tests one above which
# may change regularly.
# This allows us to mark only this job as required instead of each individual
# ever-changing E2E tests.
validate-tests:
name: End-to-End Tests Status
runs-on: ubuntu-latest
needs:
- build-test-phar
- e2e-tests
- test-phpunit-scoping
if: always()
steps:
- name: Successful run
if: ${{ !(contains(needs.*.result, 'failure')) }}
run: exit 0
- name: Failing run
if: ${{ contains(needs.*.result, 'failure') }}
run: exit 1