name: Catalog Previews permissions: contents: read # Suppress hyperframes CLI telemetry from HeyGen's own CI runs. # External users' CI continues to emit telemetry unless they set this themselves. env: HYPERFRAMES_NO_TELEMETRY: "1" 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