test(types): introduce tstyche instead of tsd #16
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Preview release | |
permissions: | |
pull-requests: write | |
on: | |
# Manual trigger with inputs for control | |
workflow_dispatch: | |
inputs: | |
trigger_supabase_js: | |
description: 'Trigger supabase-js tests' | |
type: boolean | |
default: true | |
target_branch: | |
description: 'Target branch for supabase-js tests' | |
type: string | |
default: 'master' | |
# Push to master - only when source code changes | |
push: | |
branches: | |
- master | |
paths: | |
- 'src/**' | |
- 'package.json' | |
- 'package-lock.json' | |
- 'tsconfig.json' | |
# PR triggers - only when labeled | |
# Using pull_request_target to access secrets when PRs come from forks | |
pull_request_target: | |
types: [labeled, synchronize] | |
jobs: | |
preview: | |
# Run only for PRs with 'trigger: preview' label or pushes to master | |
if: > | |
github.repository == 'supabase/postgrest-js' && | |
( | |
github.event_name == 'workflow_dispatch' || | |
github.event_name == 'push' || | |
(github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'trigger: preview')) | |
) | |
runs-on: ubuntu-latest | |
outputs: | |
preview-url: ${{ steps.preview.outputs.url }} | |
package-name: ${{ steps.preview.outputs.package }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
# For pull_request_target, we need to explicitly checkout the PR's head | |
ref: ${{ github.event_name == 'pull_request_target' && github.event.pull_request.head.sha || github.sha }} | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '20' | |
cache: 'npm' | |
- name: Install dependencies | |
run: npm ci | |
- name: Build | |
run: npm run build | |
- name: Publish preview | |
id: preview | |
run: | | |
OUTPUT=$(npx pkg-pr-new@latest publish --compact 2>&1) | |
PREVIEW_URL=$(echo "$OUTPUT" | grep -o 'https://pkg\.pr\.new/@supabase/[^[:space:]]*' | head -1) | |
REPO_NAME=$(echo "$GITHUB_REPOSITORY" | cut -d'/' -f2) | |
if [ -z "$PREVIEW_URL" ]; then | |
echo "Error: Failed to extract preview URL from pkg-pr-new output" | |
echo "Output was: $OUTPUT" | |
exit 1 | |
fi | |
echo "Preview Release URL: $PREVIEW_URL" | |
echo "url=$PREVIEW_URL" >> $GITHUB_OUTPUT | |
echo "package=$REPO_NAME" >> $GITHUB_OUTPUT | |
trigger-supabase-js-tests: | |
needs: preview | |
# Only run if preview URL exists and either: | |
# - Not workflow_dispatch, OR | |
# - workflow_dispatch with trigger_supabase_js = true | |
if: > | |
needs.preview.outputs.preview-url != '' && | |
( | |
github.event_name != 'workflow_dispatch' || | |
github.event.inputs.trigger_supabase_js == 'true' | |
) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Generate GitHub App token | |
id: generate-token | |
uses: actions/create-github-app-token@v1 | |
with: | |
app-id: ${{ vars.CROSS_REPO_APP_ID }} | |
private-key: ${{ secrets.CROSS_REPO_APP_PRIVATE_KEY }} | |
owner: supabase | |
repositories: postgrest-js,supabase-js | |
- name: Trigger supabase-js CI tests | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ steps.generate-token.outputs.token }} | |
script: | | |
const prNumber = context.issue.number || 'push'; | |
const triggeringRepo = context.repo.repo; | |
// Use input target_branch if workflow_dispatch, otherwise default to master | |
const targetBranch = context.eventName === 'workflow_dispatch' && context.payload.inputs?.target_branch | |
? context.payload.inputs.target_branch | |
: 'master'; | |
try { | |
const response = await github.rest.actions.createWorkflowDispatch({ | |
owner: 'supabase', | |
repo: 'supabase-js', | |
workflow_id: 'external-test.yml', | |
ref: targetBranch, | |
inputs: { | |
triggering_repo: triggeringRepo, | |
triggering_pr: prNumber.toString(), | |
preview_url: '${{ needs.preview.outputs.preview-url }}', | |
package_name: '${{ needs.preview.outputs.package-name }}', | |
triggering_sha: context.eventName === 'pull_request_target' ? context.payload.pull_request.head.sha : context.sha | |
} | |
}); | |
console.log('Successfully triggered supabase-js tests'); | |
console.log('Response:', response.status); | |
} catch (error) { | |
console.error('Failed to trigger supabase-js tests:', error); | |
throw error; | |
} | |
- name: Find existing preview comment | |
if: github.event_name == 'pull_request_target' | |
uses: peter-evans/find-comment@v3 | |
id: find-comment | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: '<!-- postgrest-js-preview-status -->' | |
- name: Create or update preview comment | |
if: github.event_name == 'pull_request_target' | |
uses: peter-evans/create-or-update-comment@v4 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
comment-id: ${{ steps.find-comment.outputs.comment-id }} | |
issue-number: ${{ github.event.pull_request.number }} | |
body: | | |
<!-- postgrest-js-preview-status --> | |
🚀 **Preview release created!** | |
supabase-js CI tests have been automatically triggered on feature branch to verify compatibility. | |
**Preview package:** `${{ needs.preview.outputs.preview-url }}` | |
Results will be posted here once testing is complete. | |
edit-mode: replace |