ci: fast-fail regression matrix + preflight gate before expensive jobs #110
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Catalog Previews | |
| permissions: | |
| contents: read | |
| on: | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - "registry/blocks/**" | |
| - "registry/components/**" | |
| - "scripts/generate-catalog-previews.ts" | |
| - ".github/workflows/catalog-previews.yml" | |
| concurrency: | |
| group: catalog-previews-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| preflight: | |
| name: Preflight (lint + format) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| - uses: ./.github/actions/preflight | |
| render-previews: | |
| name: Render catalog previews | |
| needs: preflight | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2 | |
| - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: 22 | |
| - run: bun install --frozen-lockfile | |
| - run: bun run build | |
| # Chrome headless shell for rendering | |
| - uses: browser-actions/setup-chrome@c785b87e244131f27c9f19c1a33e2ead956ab7ce # v1 | |
| with: | |
| chrome-version: stable | |
| - name: Render changed block/component previews | |
| env: | |
| BASE_SHA: ${{ github.event.pull_request.base.sha }} | |
| run: | | |
| # Find which blocks/components changed in this PR | |
| CHANGED_ITEMS=$(git diff --name-only --diff-filter=ACMR "$BASE_SHA"...HEAD -- registry/blocks/ registry/components/ \ | |
| | grep -E '^registry/(blocks|components)/' \ | |
| | sed 's|^registry/[^/]*/\([^/]*\)/.*|\1|' \ | |
| | sort -u) | |
| if [ -z "$CHANGED_ITEMS" ]; then | |
| echo "No block/component changes detected." | |
| exit 0 | |
| fi | |
| echo "Changed items: $CHANGED_ITEMS" | |
| FAILED=0 | |
| for item in $CHANGED_ITEMS; do | |
| echo "Rendering preview for: $item" | |
| if ! timeout 120 npx tsx scripts/generate-catalog-previews.ts --only "$item" --skip-video; then | |
| echo "::warning::Failed to render preview for $item" | |
| FAILED=$((FAILED + 1)) | |
| fi | |
| done | |
| if [ "$FAILED" -gt 0 ]; then | |
| echo "::warning::$FAILED item(s) failed to render" | |
| exit 1 | |
| fi | |
| - name: Upload preview artifacts | |
| if: always() | |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| with: | |
| name: catalog-previews | |
| path: docs/images/catalog/ | |
| if-no-files-found: ignore | |
| retention-days: 7 |