name: CI workflow on: push: branches: [ dev, main ] tags: - '*.*.*' pull_request: branches: [ dev ] jobs: tests: runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} strategy: fail-fast: false matrix: php: [ 7.3 ] os: [ ubuntu-18.04 ] wordpress: [ 5.8.1, latest ] experimental: [false] include: - php: 7.4 os: ubuntu-20.04 wordpress: latest experimental: true name: Test - PHP ${{ matrix.php }} - WP ${{ matrix.wordpress }} env: WP_VERSION: ${{ matrix.wordpress }} WP_MULTISITE: 1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Install Node uses: actions/setup-node@v2 with: node-version: '14' - name: Install OS dependencies run: sudo apt-get install libxml2-utils ghostscript poppler-utils - name: Start required services run: sudo systemctl start mysql.service - name: Cache PHP dependencies uses: actions/cache@v2 with: path: vendor key: php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }} - name: Cache node modules uses: actions/cache@v2 with: path: node_modules key: ${{ runner.OS }}-build-${{ hashFiles('**/package-lock.json') }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} tools: phpcs, composer:v1 coverage: pcov - name: Install Node dependencies run: | node -v npm install if: matrix.experimental == false - name: Install PHP dependencies run: | export PATH="$HOME/.composer/vendor/bin:$PATH" composer install --no-interaction composer global require "phpunit/phpunit:7.5.20" - name: Run Lint run: npm run lint if: matrix.experimental == false - name: Run PHP CodeSniffer run: composer standards - name: Install WP tests run: bash bin/install-wp-tests.sh wordpress_test root root localhost ${{ matrix.wordpress }} - name: Run Coverage run: composer require pcov/clobber; vendor/bin/pcov clobber; vendor/bin/phpunit --configuration phpunit.xml --coverage-clover coverage.xml if: matrix.experimental == false - name: Run Frontend Tests run: npm run test if: matrix.experimental == false - name: Run PHP Tests run: vendor/bin/phpunit - name: Upload Coverage to Codecov run: bash <(curl -s https://codecov.io/bash) if: matrix.experimental == false - name: Prepare Build if: startsWith(github.ref, 'refs/tags/') run: | export GITHUB_BUILD_PATH=${{github.workspace}} export GITHUB_REPO_SLUG="$(basename ${{github.workspace}})" export GITHUB_TAG="$(basename ${{github.ref}})" echo "File to be created : $GITHUB_BUILD_PATH/$GITHUB_REPO_SLUG-$GITHUB_TAG.zip" curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar mv wp-cli.phar /usr/local/bin/wp wp package install wp-cli/dist-archive-command npm run build composer install --no-dev --optimize-autoloader cd .. wp dist-archive $GITHUB_REPO_SLUG $GITHUB_BUILD_PATH/$GITHUB_REPO_SLUG-$GITHUB_TAG.zip cd $GITHUB_BUILD_PATH ls $GITHUB_BUILD_PATH - name: Deploy if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: files: ${{github.workspace}}/*.zip