Skip to content

[cache] Standardize cache contract across commands (#162) #527

[cache] Standardize cache contract across commands (#162)

[cache] Standardize cache contract across commands (#162) #527

Workflow file for this run

name: Generate Reports and Deploy to GitHub Pages
on:
workflow_call:
inputs:
cleanup-previews:
description: Remove stale pull request previews without publishing production reports.
required: false
type: boolean
default: false
workflow_dispatch:
inputs:
cleanup-previews:
description: Remove stale pull request previews without publishing production reports.
required: false
type: boolean
default: false
schedule:
- cron: '41 3 * * *'
pull_request:
types: [ "opened", "synchronize", "reopened", "closed" ]
push:
branches: [ "main" ]
permissions:
contents: read
concurrency:
group: ${{ github.event_name == 'pull_request' && format('reports-preview-pr-{0}', github.event.pull_request.number) || 'reports-pages' }}
cancel-in-progress: ${{ github.event_name == 'pull_request' && github.event.action != 'closed' }}
env:
FORCE_COLOR: '1'
jobs:
resolve_php:
name: Resolve PHP Version
runs-on: ubuntu-latest
outputs:
php-version: ${{ steps.resolve.outputs.php-version }}
php-version-source: ${{ steps.resolve.outputs.php-version-source }}
steps:
- uses: actions/checkout@v6
- name: Resolve workflow PHP version
id: resolve
uses: ./.github/actions/php/resolve-version
reports:
needs: resolve_php
if: github.event_name != 'schedule' && !(github.event_name == 'workflow_dispatch' && inputs.cleanup-previews) && (github.event_name != 'pull_request' || github.event.action != 'closed')
name: Generate Reports
runs-on: ubuntu-latest
permissions:
contents: write
env:
REPORTS_TARGET: .dev-tools
REPORTS_ROOT_VERSION: ${{ github.event_name == 'pull_request' && format('dev-{0}', github.event.pull_request.head.ref) || 'dev-main' }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup PHP and install dependencies
uses: ./.github/actions/php/setup-composer
with:
php-version: ${{ needs.resolve_php.outputs.php-version }}
extensions: pcov, pcntl
coverage: pcov
root-version: ${{ env.REPORTS_ROOT_VERSION }}
- name: Generate reports
env:
COMPOSER_ROOT_VERSION: ${{ env.REPORTS_ROOT_VERSION }}
run: composer dev-tools reports -- --target="${REPORTS_TARGET}" --coverage="${REPORTS_TARGET}/coverage" --metrics="${REPORTS_TARGET}/metrics"
- name: Fix permissions
run: |
chmod -c -R +rX "${REPORTS_TARGET}/" | while read line; do
echo "::warning title=Invalid file permissions automatically fixed::$line"
done
- name: Add .nojekyll
run: touch "${REPORTS_TARGET}/.nojekyll"
- name: Remove repository-local caches from published output
run: rm -rf "${REPORTS_TARGET}/cache"
- name: Restore previews from gh-pages
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
uses: actions/checkout@v6
continue-on-error: true
with:
ref: gh-pages
path: gh-pages-current
- name: Copy existing previews into publish directory
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
uses: ./.github/actions/github-pages/restore-previews
with:
source: gh-pages-current
target: ${{ env.REPORTS_TARGET }}
- name: Deploy main reports
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./${{ env.REPORTS_TARGET }}/
destination_dir: .
keep_files: false
force_orphan: false
- name: Deploy PR preview
if: github.event_name == 'pull_request'
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./${{ env.REPORTS_TARGET }}/
destination_dir: previews/pr-${{ github.event.pull_request.number }}
keep_files: false
force_orphan: false
verify_main_reports:
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') && !(github.event_name == 'workflow_dispatch' && inputs.cleanup-previews)
name: Verify Main Reports Deployment
needs: reports
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/github-pages/verify-deployment
with:
base-url: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}
title: Reports health check failed
checks: |
/|Reports index
/coverage/|Coverage report
/metrics/|Metrics report
verify_preview_reports:
if: github.event_name == 'pull_request' && github.event.action != 'closed'
name: Verify Pull Request Reports Preview
needs: reports
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./.github/actions/github-pages/verify-deployment
with:
base-url: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/pr-${{ github.event.pull_request.number }}
title: Preview health check failed
checks: |
/|Preview reports index
/coverage/|Preview coverage report
/metrics/|Preview metrics report
comment_preview:
if: github.event_name == 'pull_request' && github.event.action != 'closed'
name: Comment Pull Request Preview URLs
needs:
- reports
- verify_preview_reports
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Comment preview URLs on pull request
uses: marocchino/sticky-pull-request-comment@v2
with:
header: pr-preview
message: |
🚀 Preview is available for this pull request.
- Docs: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/pr-${{ github.event.pull_request.number }}/
- Coverage: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/pr-${{ github.event.pull_request.number }}/coverage/
- Metrics: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/previews/pr-${{ github.event.pull_request.number }}/metrics/
cleanup_preview:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
name: Cleanup Pull Request Preview
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.repository.default_branch }}
- name: Checkout gh-pages
uses: actions/checkout@v6
with:
ref: gh-pages
path: gh-pages
- uses: ./.github/actions/github-pages/remove-preview
with:
path: gh-pages
pull-request-number: ${{ github.event.pull_request.number }}
- name: Push changes
run: |
cd gh-pages
git push
cleanup_orphaned_previews:
if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.cleanup-previews)
name: Cleanup Orphaned Pull Request Previews
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: read
steps:
- uses: actions/checkout@v6
- name: Checkout gh-pages
uses: actions/checkout@v6
with:
ref: gh-pages
path: gh-pages
- uses: ./.github/actions/github-pages/cleanup-orphaned-previews
with:
path: gh-pages
- name: Push changes
run: |
cd gh-pages
git push