@@ -4,19 +4,47 @@ permissions:
44  pull-requests : write 
55
66on :
7+   #  Manual trigger with inputs for control
8+   workflow_dispatch :
9+     inputs :
10+       trigger_supabase_js :
11+         description : ' Trigger supabase-js tests' 
12+         type : boolean 
13+         default : true 
14+       target_branch :
15+         description : ' Target branch for supabase-js tests' 
16+         type : string 
17+         default : ' master' 
18+ 
19+   #  Push to master - only when source code changes
720  push :
821    branches :
9-       - main 
22+       - master 
23+     paths :
24+       - ' src/**' 
25+       - ' infra/**' 
26+       - ' package.json' 
27+       - ' package-lock.json' 
28+       - ' tsconfig.json' 
29+ 
30+   #  PR triggers - only when labeled
1031  pull_request :
11-     types : [opened , synchronize, labeled ] 
32+     types : [labeled , synchronize] 
1233
1334jobs :
1435  preview :
36+     #  Run only for PRs with 'trigger: preview' label or pushes to master
1537    if : > 
1638      github.repository == 'supabase/storage-js' && 
17-       (github.event_name == 'push' || 
18-       (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'trigger: preview'))) 
39+       ( 
40+         github.event_name == 'workflow_dispatch' || 
41+         github.event_name == 'push' || 
42+         (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'trigger: preview')) 
43+       ) 
1944     runs-on : ubuntu-latest 
45+     outputs :
46+       preview-url : ${{ steps.preview.outputs.url }} 
47+       package-name : ${{ steps.preview.outputs.package }} 
2048    steps :
2149      - name : Checkout code 
2250        uses : actions/checkout@v4 
@@ -33,4 +61,104 @@ jobs:
3361      - name : Build 
3462        run : npm run build 
3563
36-       - run : npx pkg-pr-new@latest publish --compact 
64+       - name : Publish preview 
65+         id : preview 
66+         run : | 
67+           OUTPUT=$(npx pkg-pr-new@latest publish --compact 2>&1) 
68+           PREVIEW_URL=$(echo "$OUTPUT" | grep -o 'https://pkg\.pr\.new/@supabase/[^[:space:]]*' | head -1) 
69+           REPO_NAME=$(echo "$GITHUB_REPOSITORY" | cut -d'/' -f2) 
70+ 
71+           if [ -z "$PREVIEW_URL" ]; then 
72+             echo "Error: Failed to extract preview URL from pkg-pr-new output" 
73+             echo "Output was: $OUTPUT" 
74+             exit 1 
75+           fi 
76+ 
77+           echo "Preview Release URL: $PREVIEW_URL" 
78+           echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT 
79+           echo "package=$REPO_NAME" >> $GITHUB_OUTPUT 
80+ 
81+    trigger-supabase-js-tests :
82+     needs : preview 
83+     #  Only run if preview URL exists and either:
84+     #  - Not workflow_dispatch, OR
85+     #  - workflow_dispatch with trigger_supabase_js = true
86+     if : > 
87+       needs.preview.outputs.preview-url != '' && 
88+       ( 
89+         github.event_name != 'workflow_dispatch' || 
90+         github.event.inputs.trigger_supabase_js == 'true' 
91+       ) 
92+      runs-on : ubuntu-latest 
93+     steps :
94+       - name : Generate GitHub App token 
95+         id : generate-token 
96+         uses : actions/create-github-app-token@v1 
97+         with :
98+           app-id : ${{ vars.CROSS_REPO_APP_ID }} 
99+           private-key : ${{ secrets.CROSS_REPO_APP_PRIVATE_KEY }} 
100+           owner : supabase 
101+           repositories : storage-js,supabase-js 
102+ 
103+       - name : Trigger supabase-js CI tests 
104+         uses : actions/github-script@v7 
105+         with :
106+           github-token : ${{ steps.generate-token.outputs.token }} 
107+           script : | 
108+             const prNumber = context.issue.number || 'push'; 
109+             const triggeringRepo = context.repo.repo; 
110+             // Use input target_branch if workflow_dispatch, otherwise default to master 
111+             const targetBranch = context.eventName === 'workflow_dispatch' && context.payload.inputs?.target_branch 
112+               ? context.payload.inputs.target_branch 
113+               : 'master'; 
114+ 
115+             try { 
116+               const response = await github.rest.actions.createWorkflowDispatch({ 
117+                 owner: 'supabase', 
118+                 repo: 'supabase-js', 
119+                 workflow_id: 'external-test.yml', 
120+                 ref: targetBranch, 
121+                 inputs: { 
122+                   triggering_repo: triggeringRepo, 
123+                   triggering_pr: prNumber.toString(), 
124+                   preview_url: '${{ needs.preview.outputs.preview-url }}', 
125+                   package_name: '${{ needs.preview.outputs.package-name }}', 
126+                   triggering_sha: context.eventName === 'pull_request' ? context.payload.pull_request.head.sha : context.sha 
127+                 } 
128+               }); 
129+                
130+               console.log('Successfully triggered supabase-js tests'); 
131+               console.log('Response:', response.status); 
132+             } catch (error) { 
133+               console.error('Failed to trigger supabase-js tests:', error); 
134+               throw error; 
135+             } 
136+ 
137+        - name : Find existing preview comment 
138+         if : github.event_name == 'pull_request' 
139+         uses : peter-evans/find-comment@v3 
140+         id : find-comment 
141+         with :
142+           token : ${{ secrets.GITHUB_TOKEN }} 
143+           issue-number : ${{ github.event.pull_request.number }} 
144+           comment-author : ' github-actions[bot]' 
145+           body-includes : ' <!-- storage-js-preview-status -->' 
146+ 
147+       - name : Create or update preview comment 
148+         if : github.event_name == 'pull_request' 
149+         uses : peter-evans/create-or-update-comment@v4 
150+         with :
151+           token : ${{ secrets.GITHUB_TOKEN }} 
152+           comment-id : ${{ steps.find-comment.outputs.comment-id }} 
153+           issue-number : ${{ github.event.pull_request.number }} 
154+           body : | 
155+             <!-- storage-js-preview-status --> 
156+             🚀 **Preview release created!** 
157+ 
158+             supabase-js CI tests have been automatically triggered on feature branch to verify compatibility. 
159+ 
160+             **Preview package:** `${{ needs.preview.outputs.preview-url }}` 
161+ 
162+             Results will be posted here once testing is complete. 
163+ 
164+            edit-mode : replace 
0 commit comments