Skip to content

fix(#620) user-friendly balance errors + feat(#636) E2E job-lifecycle… #127

fix(#620) user-friendly balance errors + feat(#636) E2E job-lifecycle…

fix(#620) user-friendly balance errors + feat(#636) E2E job-lifecycle… #127

Workflow file for this run

name: Preview Deployment
on:
pull_request:
branches: [main]
paths:
- 'frontend/**'
- '.github/workflows/deploy-preview.yml'
concurrency:
group: preview-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
deploy-preview:
name: Deploy Preview
runs-on: ubuntu-latest
environment: preview
defaults:
run:
working-directory: frontend
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Type check
run: npm run typecheck
- name: Build
run: npm run build
- name: Install Vercel CLI
run: npm install --global vercel@latest
- name: Pull Vercel environment
run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
- name: Build project artifacts
run: vercel build --token=${{ secrets.VERCEL_TOKEN }}
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
- name: Deploy to Vercel (preview)
id: deploy
run: |
DEPLOY_URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})
echo "url=$DEPLOY_URL" >> $GITHUB_OUTPUT
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
- name: Comment preview URL on PR
uses: actions/github-script@v7
with:
script: |
const deployUrl = '${{ steps.deploy.outputs.url }}';
const body = [
'## 🚀 Preview Deployment',
'',
`Preview URL: **${deployUrl}**`,
'',
'| Field | Value |',
'|---|---|',
`| Branch | \`${{ github.head_ref }}\` |`,
`| Commit | \`${{ github.event.pull_request.head.sha }}\` |`,
`| Status | ✅ Deployed |`,
].join('\n');
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});
const existing = comments.find(c =>
c.user.login === 'github-actions[bot]' &&
c.body.includes('🚀 Preview Deployment')
);
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body,
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body,
});
}