Split preview into two jobs for platform compatibility
fly-pr-review-apps is a container action (Linux only), so split into:
- snapshots: macOS, captures screenshots and diffs against baseline
- preview: Ubuntu, unpacks snapshot artifact and deploys to Fly

https://claude.ai/code/session_01Bgey3hrVy9av1SHrpdo5bU
change
commit 31b2c13df7dbc509988cef2a314d84efe86a72ff
author Claude <noreply@anthropic.com>
date
parent 8735c6ce
diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml
index 1b55f80..d2a2e94 100644
--- a/.github/workflows/preview.yml
+++ b/.github/workflows/preview.yml
@@ -10,8 +10,30 @@ env:
   FLY_ORG: personal
 
 jobs:
-  preview:
+  snapshots:
+    if: github.event.action != 'closed'
     runs-on: macos-latest
+    steps:
+      - uses: actions/checkout@v6
+      - uses: ruby/setup-ruby@v1
+        with:
+          bundler-cache: true
+      - name: Capture snapshot diff
+        run: |
+          bundle exec rake snapshots:diff
+          snapshot_dir="${XDG_CACHE_HOME:-$HOME/.cache}/ketchup/snapshots"
+          tar czf snapshots.tar.gz -C "$snapshot_dir" .
+        env:
+          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+      - uses: actions/upload-artifact@v4
+        with:
+          name: snapshots
+          path: snapshots.tar.gz
+
+  preview:
+    needs: snapshots
+    if: always()
+    runs-on: ubuntu-latest
     concurrency:
       group: pr-${{ github.event.number }}
     environment:
@@ -21,19 +43,16 @@ jobs:
       - uses: actions/checkout@v6
 
       - if: github.event.action != 'closed'
-        uses: ruby/setup-ruby@v1
+        uses: actions/download-artifact@v4
         with:
-          bundler-cache: true
+          name: snapshots
 
-      - name: Capture snapshot diff
+      - name: Unpack snapshots into public/
         if: github.event.action != 'closed'
         run: |
-          bundle exec rake snapshots:diff
-          snapshot_dir="${XDG_CACHE_HOME:-$HOME/.cache}/ketchup/snapshots"
-          cp -r "$snapshot_dir" public/snapshots
+          mkdir -p public/snapshots
+          tar xzf snapshots.tar.gz -C public/snapshots
           cp public/favicon.svg public/snapshots/
-        env:
-          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 
       - uses: superfly/flyctl-actions/setup-flyctl@master