# GENERATED by peptide-e2e/tools/gitea-pipeline/render.py from repos.json. # Do not edit by hand: change repos.json or the template and re-render. name: CI / Deploy on: push: branches: [main] pull_request: {} workflow_dispatch: {} concurrency: group: pipeline-prautoblogger-${{ github.ref }} cancel-in-progress: false jobs: lint-php: name: PHP Lint (${{ matrix.php }}) runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 strategy: fail-fast: false matrix: php: ["8.1", "8.2", "8.3"] steps: - uses: actions/checkout@v4 - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/ci-lint-php@main with: php: ${{ matrix.php }} phpcs: name: PHPCS (WordPress standards) runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 steps: - uses: actions/checkout@v4 with: ref: ${{ github.head_ref || github.ref_name }} token: ${{ secrets.GITHUB_TOKEN }} - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/ci-phpcs@main with: autofix: 'true' file-size: name: 300-line rule (includes) runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 steps: - uses: actions/checkout@v4 - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/ci-file-size@main with: paths: includes phpunit: name: PHPUnit - brain-monkey (PHP ${{ matrix.php }}) runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 strategy: fail-fast: false matrix: php: ["8.1", "8.2", "8.3"] steps: - uses: actions/checkout@v4 - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/ci-phpunit@main with: php: ${{ matrix.php }} tests: brain-monkey check-constants: name: Check PRAUTOBLOGGER_* constants runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 steps: - uses: actions/checkout@v4 - name: Use PHP 8.1 (preinstalled in the CI image) run: update-alternatives --set php /usr/bin/php8.1 && php -v | head -1 # Fails if any PRAUTOBLOGGER_* constant referenced in shipped PHP is neither # defined in prautoblogger.php nor guarded by defined() (v0.19.0 incident class). - run: php scripts/check-constants.php - name: Self-test the scanner run: php scripts/check-constants.php --self-test deploy-staging: name: Deploy to staging needs: ["lint-php", "phpcs", "file-size", "phpunit", "check-constants"] if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} runs-on: peptide-vps steps: - uses: actions/checkout@v4 - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/deploy@main with: stage: staging target_path: wp-content/plugins/prautoblogger ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} ssh_host: ${{ secrets.SSH_HOST }} ssh_port: ${{ secrets.SSH_PORT }} ssh_username: ${{ secrets.SSH_USERNAME }} smoke: name: Smoke tests (staging) needs: deploy-staging runs-on: peptide-vps timeout-minutes: 15 steps: - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/smoke@main with: wp_admin_user: ${{ secrets.STAGING_WP_ADMIN_USER }} wp_admin_password: ${{ secrets.STAGING_WP_ADMIN_PASSWORD }} deploy-production: name: Deploy to production # Smoke is a gate: production runs only if staging deploy AND smoke succeeded. # PROD_DEPLOY_ENABLED (org variable) is the cutover switch / kill switch. needs: [deploy-staging, smoke] if: ${{ vars.PROD_DEPLOY_ENABLED == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' }} runs-on: peptide-vps steps: - uses: actions/checkout@v4 - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/deploy@main with: stage: production target_path: wp-content/plugins/prautoblogger ssh_private_key: ${{ secrets.SSH_PRIVATE_KEY }} ssh_host: ${{ secrets.SSH_HOST }} ssh_port: ${{ secrets.SSH_PORT }} ssh_username: ${{ secrets.SSH_USERNAME }} audit-direct-push: name: Audit - commit came from a PR if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} runs-on: ubuntu-latest container: git.protopeer.com/peptide-repo/ci-php:2026-10 steps: - uses: https://git.protopeer.com/peptide-repo/peptide-e2e/.gitea/actions/audit-direct-push@main with: token: ${{ secrets.GITHUB_TOKEN }}