Skip to content

GitHub Actions(deps): Bump actions/checkout from 5.0.0 to 6.0.0 #393

GitHub Actions(deps): Bump actions/checkout from 5.0.0 to 6.0.0

GitHub Actions(deps): Bump actions/checkout from 5.0.0 to 6.0.0 #393

name: Codecoverage-Main
# Runs PHPUnit unit and Codeception wp-browser wpunit tests, merges the code coverage, commits the html report to
# GitHub Pages, generates a README badge with the coverage percentage.
on:
push:
branches:
- main
pull_request:
types: [ opened, reopened, ready_for_review, synchronize ]
branches:
- main
workflow_dispatch:
jobs:
codecoverage:
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7 # Password auth did not work on 8.0 on PHP 7.3, it did seem to work for PHP 7.4+
env: # These are the same username and password as the wp-env container defaults
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: tests-wordpress
ports: # This mapping matches the .wp-env.json configuration
- 33306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
strategy:
matrix: # Supported PHP versions
php: [ '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ]
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
fetch-depth: 0 # attempting to get all branch names.
# TODO: a DEPLOY_KEY is needed to enable gh-pages for the first time (the branch can be created and pushed but
# it will not be reachable as a website).
# Consider @see https://github.com/peaceiris/actions-gh-pages
# - name: Check does gh-pages branch need to be created
# run: |
# git branch -l;
# if [[ $(git branch -l gh-pages) == "" ]]; then
# gh_pages_branch_needed=true;
# echo "gh-pages branch is needed";
# else
# gh_pages_branch_needed=false
# echo "gh-pages branch already exists";
# fi
# echo "GH_PAGES_BRANCH_NEEDED=$gh_pages_branch_needed" >> $GITHUB_ENV;
# mkdir gh-pages
#
# - name: Maybe create gh-pages branch
# if: ${{ env.GH_PAGES_BRANCH_NEEDED }}
# uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4.0.0
# with:
# github_token: ${{ secrets.GITHUB_TOKEN }}
# publish_dir: ./gh-pages
# force_orphan: true
# allow_empty_commit: true
# commit_message: "🤖 Creating gh-pages branch"
- name: Checkout GitHub Pages branch for code coverage report
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
ref: gh-pages
path: gh-pages
- name: Install PHP
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
with:
php-version: ${{ matrix.php }}
coverage: xdebug
tools: composer, jaschilz/php-coverage-badger
extensions: zip
- name: Read .env.testing
uses: c-py/action-dotenv-to-setenv@925b5d99a3f1e4bd7b4e9928be4e2491e29891d9 # v5
with:
env-file: .env.testing
- name: Run composer install
continue-on-error: true
run: composer install -v
- name: Allow writing to wp-content
if: ${{ hashFiles('wp-content') != '' }} # TODO: This may be incorrect since it's a directory.
run: sudo chmod -R a+w wp-content
# On main, there will be a previous coverage report. On PRs we create a new directory using the commit SHA.
- name: Clear previous code coverage
if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }}
run: |
rm -rf gh-pages/phpunit || true;
mkdir gh-pages/phpunit || true;
- name: Run unit tests
if: ${{ hashFiles('tests/phpunit/bootstrap.php') != '' }} # Only run unit tests if they are present.
run: XDEBUG_MODE=coverage vendor/bin/phpunit --bootstrap tests/phpunit/bootstrap.php --coverage-php tests/_output/unit.cov --debug
- name: Run wpunit tests
run: XDEBUG_MODE=coverage vendor/bin/codecept run wpunit --coverage tests/_output/wpunit.cov --debug
# For PRs, we'll generate the coverage report on each pushed commit
- name: Merge code coverage for PR
if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }}
run: |
vendor/bin/phpcov merge --clover clover.xml tests/_output/;
vendor/bin/phpcov merge --clover gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/clover.xml --php gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/phpunit.cov --html gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/html/ tests/_output/;
# On main, we want it output to a different path
- name: Merge code coverage for main
if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }}
run: |
vendor/bin/phpcov merge --clover clover.xml tests/_output/;
vendor/bin/phpcov merge --clover gh-pages/phpunit/clover.xml --php gh-pages/phpunit/phpunit.cov --html gh-pages/phpunit/html/ tests/_output/;
# This makes the coverage percentage available in `{{ steps.coverage-percentage.outputs.coverage-rounded }}`.
- name: Check test coverage
if: ${{ matrix.php == '7.3' }}
uses: johanvanhelden/gha-clover-test-coverage-check@2543c79a701f179bd63aa14c16c6938c509b2cec # v1
id: coverage-percentage
with:
percentage: 25
exit: false
filename: clover.xml
rounded-precision: "0"
# See: https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/
- name: Add `.nojekyll` file so code coverage report successfully deploys to gh-pages
if: ${{ (matrix.php == '7.3') }}
working-directory: gh-pages
run: |
touch .nojekyll
git add -- .nojekyll *
- name: Update README coverage badge
if: ${{ (matrix.php == '7.3') && (github.ref == 'refs/heads/main') }} # only commit on main, on the PHP version we're using in production.
run: php-coverage-badger clover.xml gh-pages/phpunit/coverage.svg
- name: Generate PR coverage badge
if: ${{ (matrix.php == '7.3') && github.event_name == 'pull_request' }}
run: php-coverage-badger clover.xml gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/coverage.svg
- name: Commit code coverage to gh-pages
if: ${{ matrix.php == '7.3' }}
uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # v7.0.0
with:
repository: gh-pages
branch: gh-pages
commit_message: ${{ format('🤖 Save code coverage report to gh-pages {0}%', steps.coverage-percentage.outputs.coverage-rounded) }}
commit_options: ""
env:
GITHUB_TOKEN: "${{ github.token }}"
- name: Add coverage badge to PR comment
if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }}
run: |
echo "[![Code Coverage ](https://newfold-labs.github.io/wp-module-performance/${{ github.event.pull_request.head.sha }}/phpunit/coverage.svg)](https://newfold-labs.github.io/wp-module-performance/${{ github.event.pull_request.head.sha }}/phpunit/html/)" >> coverage-comment.md
echo "" >> coverage-comment.md
echo "" >> coverage-comment.md
- name: Add coverage report link to PR comment
if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }}
run: |
echo "${{ format('[project coverage report {0}%](https://newfold-labs.github.io/wp-module-performance/{1}/phpunit/html/) @ {2}', steps.coverage-percentage.outputs.coverage-rounded, github.event.pull_request.head.sha, github.event.pull_request.head.sha) }}" >> coverage-comment.md
echo "" >> coverage-comment.md
echo "" >> coverage-comment.md
- name: Add phpcov uncovered lines report to PR comment
if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }}
continue-on-error: true # phpcov can fail if there are no uncovered lines
run: |
BRANCHED_COMMIT=$(git rev-list origin..HEAD | tail -n 1);
echo "BRANCHED_COMMIT=$BRANCHED_COMMIT"
git diff $BRANCHED_COMMIT...${{ github.event.pull_request.head.sha }} > branch.diff;
cat branch.diff;
OUTPUT=${vendor/bin/phpcov patch-coverage --path-prefix $(pwd) ./gh-pages/${{ github.event.pull_request.head.sha }}/phpunit/phpunit.cov branch.diff || true}
echo $OUTPUT;
echo "$OUTPUT" >> coverage-comment.md
- name: Add coverage PR comment
uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
if: ${{ matrix.php == '7.3' && github.event_name == 'pull_request' }}
with:
message-id: coverage-report
message-path: coverage-comment.md