name: Catalog Previews on: pull_request: branches: [main] paths: - "registry/blocks/**" - "registry/components/**" - "scripts/generate-catalog-previews.ts" concurrency: group: catalog-previews-${{ github.ref }} cancel-in-progress: true jobs: render-previews: name: Render catalog previews 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 # FFmpeg for video encoding - uses: FedericoCarboni/setup-ffmpeg@36c6454b5a2348e7794ba2d82a21506605921e3d # v3 - name: Render changed block/component previews run: | # Find which blocks/components changed in this PR BASE_SHA=${{ github.event.pull_request.base.sha }} CHANGED_ITEMS=$(git diff --name-only "$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