diff --git a/.gitattributes b/.gitattributes index 5727a3b9..a4ac8db3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,7 +8,6 @@ /.gitattributes export-ignore /.gitignore export-ignore /.phpcs.xml.dist export-ignore -/.travis.yml export-ignore /phpunit.xml.dist export-ignore /.github export-ignore /bin export-ignore diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..2ea218da --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,101 @@ +name: Test + +on: + # Run on all pushes and on all pull requests. + # Prevent the "push" build from running when there are only irrelevant changes. + push: + paths-ignore: + - '**.md' + pull_request: + # Allow manually triggering the workflow. + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + # Keys: + # - php: The PHP versions to test against. + # - phpcs_version: The PHPCS versions to test against. + # IMPORTANT: test runs shouldn't fail because of PHPCS being incompatible with a PHP version. + # - PHPCS will run without errors on PHP 5.4 - 7.4 on any supported version. + # - PHP 8.0 needs PHPCS 3.5.7+ to run without errors. + # - The `wpcs_version` key is added to allow additional test builds when multiple WPCS versions + # would be supported. As, at this time, only the latest stable release of WPCS is supported, + # no additional versions are included in the array. + # - experimental: Whether the build is "allowed to fail". + matrix: + php: ['5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] + phpcs_version: ['3.5.5', 'dev-master'] + wpcs_version: ['2.3.*'] + experimental: [false] + + include: + # Complete the matrix by adding PHP 8.0, but only test against compatible PHPCS versions. + - php: '8.0' + phpcs_version: 'dev-master' + wpcs_version: '2.3.*' + experimental: false + - php: '8.0' + # PHPCS 3.5.7 is the lowest version of PHPCS which supports PHP 8.0. + phpcs_version: '3.5.7' + wpcs_version: '2.3.*' + experimental: false + + # Experimental builds. These are allowed to fail. + #- php: '8.1' + # phpcs_version: 'dev-master' + # wpcs_version: '2.3.*' + # experimental: true + + name: "Test: PHP ${{ matrix.php }} - PHPCS ${{ matrix.phpcs_version }} - WPCS ${{ matrix.wpcs_version }}" + + continue-on-error: ${{ matrix.experimental }} + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + # On stable PHPCS versions, allow for PHP deprecation notices. + # Unit tests don't need to fail on those for stable releases where those issues won't get fixed anymore. + - name: Setup ini config + id: set_ini + run: | + if [[ "${{ matrix.phpcs_version }}" != "dev-master" ]]; then + echo '::set-output name=PHP_INI::error_reporting=E_ALL & ~E_DEPRECATED' + else + echo '::set-output name=PHP_INI::error_reporting=E_ALL' + fi + + - name: Install PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + ini-values: ${{ steps.set_ini.outputs.PHP_INI }} + coverage: none + + - name: 'Composer: set PHPCS and WPCS versions for tests' + run: | + composer require --no-update --no-scripts squizlabs/php_codesniffer:"${{ matrix.phpcs_version }}" + composer require --no-update --no-scripts wp-coding-standards/wpcs:"${{ matrix.wpcs_version }}" + + # Install dependencies and handle caching in one go. + # @link https://github.com/marketplace/actions/install-composer-dependencies + - name: Install Composer dependencies - normal + if: ${{ startsWith( matrix.php, '8' ) == false }} + uses: "ramsey/composer-install@v1" + + # PHPUnit 7.x does not allow for installation on PHP 8, so ignore platform + # requirements to get PHPUnit 7.x to install on nightly. + - name: Install Composer dependencies - with ignore platform + if: ${{ startsWith( matrix.php, '8' ) }} + uses: "ramsey/composer-install@v1" + with: + composer-options: --ignore-platform-reqs + + - name: Run the unit tests + run: ./bin/unit-tests + + - name: Run the ruleset tests + run: ./bin/ruleset-tests diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 160a49b1..00000000 --- a/.travis.yml +++ /dev/null @@ -1,76 +0,0 @@ -language: php -os: linux -dist: xenial - -env: - # `master` is now 3.x. - - PHPCS_BRANCH="dev-master" - # Lowest supported release in the 3.x series with which VIPCS is compatible. - - PHPCS_BRANCH="3.5.5" - -cache: - directories: - - $HOME/.cache/composer/files - -php: - - 5.6 - - 7.0 - - 7.1 - - 7.2 - - 7.3 - - 7.4 - - "nightly" - -jobs: - allow_failures: - - php: "nightly" - include: - # Builds which need a different distro or specific PHPCS version. - - php: 8.0 - env: PHPCS_BRANCH="dev-master" - - php: 8.0 - # PHPCS 3.5.7 is the lowest version of PHPCS which supports PHP 8.0. - env: PHPCS_BRANCH="3.5.7" - - php: 5.5 - dist: trusty - env: PHPCS_BRANCH="dev-master" - - php: 5.5 - dist: trusty - env: PHPCS_BRANCH="3.5.5" - - php: 5.4 - dist: trusty - env: PHPCS_BRANCH="dev-master" - - php: 5.4 - dist: trusty - env: PHPCS_BRANCH="3.5.5" - -before_install: - # Speed up build time by disabling Xdebug. - # https://johnblackbourn.com/reducing-travis-ci-build-times-for-wordpress-projects/ - # https://twitter.com/kelunik/status/954242454676475904 - - phpenv config-rm xdebug.ini || echo 'No xdebug config.' - - # On stable PHPCS versions, allow for PHP deprecation notices. - # Unit tests don't need to fail on those for stable releases where those issues won't get fixed anymore. - - | - if [[ $PHPCS_BRANCH != "dev-master" ]]; then - echo 'error_reporting = E_ALL & ~E_DEPRECATED' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini - fi - -install: - - travis_retry composer require squizlabs/php_codesniffer:"$PHPCS_BRANCH" --no-update --no-suggest --no-scripts - - | - if [[ $TRAVIS_PHP_VERSION == "nightly" || $TRAVIS_PHP_VERSION == "8.0" ]]; then - # PHPUnit 7.x does not allow for installation on PHP 8, so ignore platform - # requirements to get PHPUnit 7.x to install on nightly. - travis_retry composer install --ignore-platform-reqs --no-suggest - else - travis_retry composer install --no-suggest - fi - -script: - # Run the unit tests. - - ./bin/unit-tests - - # Run ruleset tests. - - ./bin/ruleset-tests