Skip to content

Commit bde6da9

Browse files
authored
chore: trigger external tests on supabase-js (#518)
1 parent 2397ff0 commit bde6da9

File tree

1 file changed

+132
-4
lines changed

1 file changed

+132
-4
lines changed

.github/workflows/preview-release.yml

Lines changed: 132 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,47 @@ permissions:
44
pull-requests: write
55

66
on:
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

1334
jobs:
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

Comments
 (0)