@@ -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 :
922 - master
23+ paths :
24+ - ' src/**'
25+ - ' test/**'
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/realtime-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 : realtime-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 : ' <!-- realtime-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+ <!-- realtime-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