diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 000000000..bf2e9ac29 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,146 @@ +name: Testing + +on: pull_request + +jobs: + + unit: #----------------------------------------------------------------------- + name: Unit test / PHP ${{ matrix.php }} + strategy: + fail-fast: false + matrix: + php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0'] + runs-on: ubuntu-latest + + steps: + - name: Check out source code + uses: actions/checkout@v2 + + - name: Check existence of composer.json file + id: check_files + uses: andstor/file-existence-action@v1 + with: + files: "composer.json, phpunit.xml.dist" + + - name: Set up PHP environment + if: steps.check_files.outputs.files_exists == 'true' + uses: shivammathur/setup-php@v2 + with: + php-version: '${{ matrix.php }}' + coverage: none + tools: composer,cs2pr + + - name: Get Composer cache Directory + if: steps.check_files.outputs.files_exists == 'true' + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Use Composer cache + if: steps.check_files.outputs.files_exists == 'true' + uses: actions/cache@master + with: + path: ${{ steps['composer-cache'].outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: Install dependencies + if: steps.check_files.outputs.files_exists == 'true' + run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest + + - name: Setup problem matcher to provide annotations for PHPUnit + if: steps.check_files.outputs.files_exists == 'true' + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + + - name: Run PHPUnit + if: steps.check_files.outputs.files_exists == 'true' + run: composer phpunit + + functional: #---------------------------------------------------------------------- + name: Functional - WP ${{ matrix.wp }} on PHP ${{ matrix.php }} + strategy: + fail-fast: false + matrix: + php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4'] + wp: ['latest'] + test: ["composer behat || composer behat-rerun"] + include: + - php: '5.6' + wp: 'trunk' + test: "composer behat || composer behat-rerun" + - php: '7.4' + wp: 'trunk' + test: "composer behat || composer behat-rerun" + - php: '5.6' + wp: '3.7' + test: "composer behat || composer behat-rerun || true" + runs-on: ubuntu-latest + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_DATABASE: wp_cli_test + MYSQL_USER: root + MYSQL_ROOT_PASSWORD: root + ports: + - 3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - name: Check out source code + uses: actions/checkout@v2 + + - name: Check existence of composer.json & behat.yml files + id: check_files + uses: andstor/file-existence-action@v1 + with: + files: "composer.json, behat.yml" + + - name: Set up PHP envirnoment + uses: shivammathur/setup-php@v2 + with: + php-version: '${{ matrix.php }}' + extensions: mysql, zip + coverage: none + tools: composer + + - name: Get Composer cache Directory + if: steps.check_files.outputs.files_exists == 'true' + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Use Composer cache + if: steps.check_files.outputs.files_exists == 'true' + uses: actions/cache@master + with: + path: ${{ steps['composer-cache'].outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: Install dependencies + if: steps.check_files.outputs.files_exists == 'true' + run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest + + - name: Start MySQL server + if: steps.check_files.outputs.files_exists == 'true' + run: sudo service mysql start + + - name: Prepare test database + if: steps.check_files.outputs.files_exists == 'true' + run: | + export MYQSL_HOST=127.0.0.1 + export MYSQL_TCP_PORT=${{ job.services.mysql.ports['3306'] }} + mysql -e 'CREATE DATABASE IF NOT EXISTS wp_cli_test;' -uroot -proot + mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test.* TO "wp_cli_test"@"127.0.0.1" IDENTIFIED BY "password1"' -uroot -proot + mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test_scaffold.* TO "wp_cli_test"@"127.0.0.1" IDENTIFIED BY "password1"' -uroot -proot + + - name: Run Behat + if: steps.check_files.outputs.files_exists == 'true' + env: + WP_VERSION: '${{ matrix.wp }}' + run: ${{ matrix.test }} +