name: "Tests" on: push: pull_request: # Allow manually triggering the workflow. workflow_dispatch: jobs: coding-standard: runs-on: ubuntu-18.04 name: Coding standards steps: - name: Check out code uses: actions/checkout@v2 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: '8.0' coverage: none tools: cs2pr # Install dependencies and handle caching in one go. # @link https://github.com/marketplace/actions/install-composer-dependencies - name: Install Composer dependencies uses: "ramsey/composer-install@v1" - name: Check coding standards continue-on-error: true run: ./vendor/bin/phpcs -s --report-full --report-checkstyle=./phpcs-report.xml - name: Show PHPCS results in PR run: cs2pr ./phpcs-report.xml lint: runs-on: ubuntu-18.04 strategy: matrix: php: ['5.5', '7.2', '8.0'] experimental: [false] include: - php: '8.1' experimental: true name: "Lint: PHP ${{ matrix.php }}" continue-on-error: ${{ matrix.experimental }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Install PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} coverage: none tools: cs2pr # Install dependencies and handle caching in one go. # @link https://github.com/marketplace/actions/install-composer-dependencies - name: Install Composer dependencies uses: "ramsey/composer-install@v1" - name: Lint against parse errors if: ${{ matrix.php != '8.1' }} run: composer lint -- --checkstyle | cs2pr - name: Lint against parse errors (PHP 8.1) if: ${{ matrix.php == '8.1' }} run: composer lint test: needs: ['coding-standard', 'lint'] runs-on: ubuntu-18.04 strategy: matrix: php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] coverage: [false] experimental: [false] include: # Run code coverage on high/low PHP. - php: '5.5' coverage: true experimental: false - php: '8.0' coverage: true experimental: false # Experimental builds. These are allowed to fail. - php: '8.1' coverage: false experimental: true name: "Test: PHP ${{ matrix.php }}" continue-on-error: ${{ matrix.experimental }} steps: - name: Check out code uses: actions/checkout@v2 - name: Set coverage variable id: set_cov run: | if [ ${{ matrix.coverage }} == "true" ]; then echo '::set-output name=COV::xdebug' else echo '::set-output name=COV::none' fi - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} coverage: ${{ steps.set_cov.outputs.COV }} ini-values: sendmail_path=/usr/sbin/sendmail -t -i, zend.multibyte=1, zend.script_encoding=UTF-8, default_charset=UTF-8, error_reporting=E_ALL, display_errors=On extensions: imap, mbstring, intl, ctype, filter, hash # Install dependencies and handle caching in one go. # @link https://github.com/marketplace/actions/install-composer-dependencies - name: Install PHP packages - normal if: ${{ matrix.php != '8.1' }} uses: "ramsey/composer-install@v1" - name: Install PHP packages - ignore-platform-reqs if: ${{ matrix.php == '8.1' }} uses: "ramsey/composer-install@v1" with: composer-options: --ignore-platform-reqs - name: Install postfix run: | sudo apt-get install -y -qq postfix qmail sudo service postfix stop - name: Set up sendmail run: | smtp-sink -d "%d.%H.%M.%S" localhost:2500 1000 & mkdir -p build/logs sudo cp test/testbootstrap-dist.php test/testbootstrap.php sudo chmod +x test/fakesendmail.sh sudo mkdir -p /var/qmail/bin sudo cp test/fakesendmail.sh /var/qmail/bin/sendmail sudo cp test/fakesendmail.sh /usr/sbin/sendmail - name: Run tests, no code coverage if: ${{ matrix.coverage == false }} run: ./vendor/bin/phpunit --no-coverage - name: Run tests with code coverage if: ${{ matrix.coverage == true }} run: vendor/bin/phpunit - name: Send coverage report to Codecov if: ${{ success() && matrix.coverage == true }} uses: codecov/codecov-action@v1 with: files: ./build/logs/clover.xml fail_ci_if_error: true verbose: true