# https://docs.github.com/en/actions name: "Integrate" on: pull_request: null push: branches: - "master" jobs: code-coverage: name: "Code Coverage" runs-on: "ubuntu-latest" strategy: matrix: php-version: - "8.2" steps: - name: "Checkout" uses: "actions/checkout@v4" - name: "Set up PHP" uses: "shivammathur/setup-php@v2" with: coverage: "xdebug" extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" - name: "Set up problem matchers for PHP" run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" - name: "Set up problem matchers for phpunit/phpunit" run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - name: "Determine composer cache directory" run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" - name: "Cache dependencies installed with composer" uses: "actions/cache@v4" with: path: "${{ env.COMPOSER_CACHE_DIR }}" key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" restore-keys: "php-${{ matrix.php-version }}-composer-" - name: "Install dependencies with composer" run: "composer install --ansi --no-interaction --no-progress" - name: "Collect code coverage from running unit tests with phpunit/phpunit" env: XDEBUG_MODE: "coverage" run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --coverage-text --testsuite=unit" coding-standards: name: "Coding Standards" runs-on: "ubuntu-latest" strategy: matrix: php-version: - "8.2" steps: - name: "Checkout" uses: "actions/checkout@v4" - name: "Set up PHP" uses: "shivammathur/setup-php@v2" with: coverage: "none" extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" - name: "Set up problem matchers for PHP" run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" - name: "Validate composer.json and composer.lock" run: "composer validate --ansi --strict" - name: "Determine composer cache directory" run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" - name: "Cache dependencies installed with composer" uses: "actions/cache@v4" with: path: "${{ env.COMPOSER_CACHE_DIR }}" key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" restore-keys: "php-${{ matrix.php-version }}-composer-" - name: "Install dependencies with composer" run: "composer install --ansi --no-interaction --no-progress" - name: "Run friendsofphp/php-cs-fixer" run: "vendor/bin/php-cs-fixer fix --ansi --config=.php-cs-fixer.php --diff --dry-run --show-progress=dots --verbose" - name: "Get libxml2-utils" run: | set -x export DEBIAN_FRONTEND=noninteractive sudo apt-get update -y | true sudo apt-get install -y libxml2-utils - name: "Validate XML files" run: "for a in $(find . -name '*.xml'); do xmllint --quiet --noout $a; done" tests: name: "Tests" runs-on: "ubuntu-latest" strategy: matrix: php-version: - "8.2" env: HTTP_HOST: "localhost:8080" steps: - name: "Checkout" uses: "actions/checkout@v4" - name: "Set up PHP" uses: "shivammathur/setup-php@v2" with: coverage: "none" extensions: "none, curl, dom, json, mbstring, tokenizer, xml, xmlwriter" php-version: "${{ matrix.php-version }}" - name: "Set up problem matchers for PHP" run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\"" - name: "Set up problem matchers for phpunit/phpunit" run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\"" - name: "Determine composer cache directory" run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> $GITHUB_ENV" - name: "Cache dependencies installed with composer" uses: "actions/cache@v4" with: path: "${{ env.COMPOSER_CACHE_DIR }}" key: "php-${{ matrix.php-version }}-composer-${{ hashFiles('composer.lock') }}" restore-keys: "php-${{ matrix.php-version }}-composer-" - name: "Install dependencies with composer" run: "composer install --ansi --no-interaction --no-progress" - name: "Run unit tests with phpunit/phpunit" run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --testsuite=unit" - name: "Start built-in web server for PHP" run: "php -S ${{ env.HTTP_HOST }} .router.php &" - name: "Run end-to-end tests with phpunit/phpunit" run: "vendor/bin/phpunit --colors=always --configuration=tests/phpunit.xml --testsuite=end-to-end"