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