@@ -4,19 +4,47 @@ permissions:
4
4
pull-requests : write
5
5
6
6
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
7
20
push :
8
21
branches :
9
22
- master
23
+ paths :
24
+ - ' src/**'
25
+ - ' test/**'
26
+ - ' package.json'
27
+ - ' package-lock.json'
28
+ - ' tsconfig.json'
29
+
30
+ # PR triggers - only when labeled
10
31
pull_request :
11
- types : [opened , synchronize, labeled ]
32
+ types : [labeled , synchronize]
12
33
13
34
jobs :
14
35
preview :
36
+ # Run only for PRs with 'trigger: preview' label or pushes to master
15
37
if : >
16
38
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
+ )
19
44
runs-on : ubuntu-latest
45
+ outputs :
46
+ preview-url : ${{ steps.preview.outputs.url }}
47
+ package-name : ${{ steps.preview.outputs.package }}
20
48
steps :
21
49
- name : Checkout code
22
50
uses : actions/checkout@v4
@@ -33,4 +61,104 @@ jobs:
33
61
- name : Build
34
62
run : npm run build
35
63
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