name: CI — Lint & Test # Runs on every PR and every push to main. Validates PHPUnit tests + lint + # coding standards before deploy can happen. deploy.yml on main continues to # run its own validate job as a belt-and-suspenders check, but this CI workflow # is what gives PRs an immediate signal so fixes happen before merge. on: push: branches: [main] pull_request: branches: [main] permissions: contents: read jobs: php-lint: name: PHP Lint (${{ matrix.php }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: php: ['7.4', '8.1', '8.3'] steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} coverage: none - name: Syntax check all PHP files # Exclude .github/mu-plugins — those run on the production server (PHP 8+) # and may use PHP 8+ syntax (union types etc.) that 7.4 rejects. run: | set -e find . -name '*.php' \ -not -path './vendor/*' \ -not -path './node_modules/*' \ -not -path './.git/*' \ -not -path './.github/*' \ -print0 | xargs -0 -n1 -P4 php -l > /dev/null phpcs: name: PHPCS (WordPress standards) runs-on: ubuntu-latest continue-on-error: false # now strict after PHPCS cleanup in v0.8.3 permissions: contents: write # allows phpcbf auto-fix commits back to the PR branch steps: - uses: actions/checkout@v4 with: # Check out the actual branch so phpcbf can push fixes back. # github.head_ref is set on PR events; github.ref_name on push events. ref: ${{ github.head_ref || github.ref_name }} token: ${{ secrets.GITHUB_TOKEN }} - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' coverage: none tools: composer:v2, phpcs - name: Install WordPress Coding Standards run: | # Allow the PHPCS composer-installer plugin (auto-registers standards). composer global config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true # WPCS 3.x requires PHPCSExtra (for the Universal.* and NormalizedArrays.* sniffs) # AND phpcsutils. Installing the installer itself lets it auto-register the standards path. composer global require --no-interaction \ "dealerdirect/phpcodesniffer-composer-installer:^1.0" \ "wp-coding-standards/wpcs:^3.0" \ "phpcsstandards/phpcsutils:^1.0" \ "phpcsstandards/phpcsextra:^1.0" - name: Auto-fix with phpcbf (commit back to branch if changed) # phpcbf exits 1 when it makes fixes, 0 when nothing to fix — both are success here. # Commits made via GITHUB_TOKEN do not trigger a new CI run (GitHub prevents loops). run: | phpcbf --standard=phpcs.xml \ --extensions=php \ --ignore=vendor/*,tests/*,node_modules/* \ includes/ prautoblogger.php uninstall.php || true if ! git diff --quiet; then git config user.name "peptiderepo" git config user.email "peptiderepo@users.noreply.github.com" git add -A git commit -m "style: auto-fix PHPCS violations via phpcbf" git push fi - name: Run PHPCS (only non-auto-fixable violations can fail here) run: | phpcs --standard=phpcs.xml \ --extensions=php \ --ignore=vendor/*,tests/*,node_modules/* \ --warning-severity=0 \ --report=full \ includes/ prautoblogger.php uninstall.php phpunit: name: PHPUnit (PHP ${{ matrix.php }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: php: ['7.4', '8.1', '8.3'] steps: - uses: actions/checkout@v4 - name: Setup PHP ${{ matrix.php }} uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} coverage: none tools: composer:v2 - name: Install composer dependencies run: composer install --no-progress --no-interaction --prefer-dist - name: Run PHPUnit (Brain Monkey — no WP install required) run: vendor/bin/phpunit --testdox