diff --git a/.github/workflows/ci-vercel-website-preview.yaml b/.github/workflows/ci-vercel-website-preview.yaml new file mode 100644 index 0000000000..91784a5087 --- /dev/null +++ b/.github/workflows/ci-vercel-website-preview.yaml @@ -0,0 +1,90 @@ +--- +name: 'CI: Vercel Website Preview' + +on: + pull_request: + types: [opened, synchronize, reopened] + paths: + - 'apps/website/**' + - 'packages/design-system/**' + - 'packages/tailwind-utils/**' + push: + branches: [main] + paths: + - 'apps/website/**' + - 'packages/design-system/**' + - 'packages/tailwind-utils/**' + +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_WEBSITE_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_WEBSITE_PROJECT_ID }} + +jobs: + deploy-preview: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 + + - name: Install Vercel CLI + run: npm install --global vercel@latest + + - name: Pull Vercel environment information + run: vercel pull --yes --environment=preview --token=${{ secrets.VERCEL_WEBSITE_TOKEN }} + + - name: Build project artifacts + run: vercel build --token=${{ secrets.VERCEL_WEBSITE_TOKEN }} + + - name: Deploy project artifacts to Vercel + id: deploy + run: | + URL=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_WEBSITE_TOKEN }}) + echo "url=$URL" >> "$GITHUB_OUTPUT" + + - name: Add deployment URL to summary + run: echo "**Preview:** ${{ steps.deploy.outputs.url }}" >> "$GITHUB_STEP_SUMMARY" + + - name: Save PR metadata + run: | + mkdir -p temp/vercel-preview + echo "${{ steps.deploy.outputs.url }}" > temp/vercel-preview/url.txt + + - name: Upload preview metadata + uses: actions/upload-artifact@v6 + with: + name: vercel-preview + path: temp/vercel-preview + + deploy-production: + if: github.event_name == 'push' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Install pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4.4.0 + + - name: Install Vercel CLI + run: npm install --global vercel@latest + + - name: Pull Vercel environment information + run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_WEBSITE_TOKEN }} + + - name: Build project artifacts + run: vercel build --prod --token=${{ secrets.VERCEL_WEBSITE_TOKEN }} + + - name: Deploy project artifacts to Vercel + id: deploy + run: | + URL=$(vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_WEBSITE_TOKEN }}) + echo "url=$URL" >> "$GITHUB_OUTPUT" + + - name: Add deployment URL to summary + run: echo "**Production:** ${{ steps.deploy.outputs.url }}" >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/pr-vercel-website-preview.yaml b/.github/workflows/pr-vercel-website-preview.yaml new file mode 100644 index 0000000000..480ce696ee --- /dev/null +++ b/.github/workflows/pr-vercel-website-preview.yaml @@ -0,0 +1,74 @@ +--- +name: 'PR: Vercel Website Preview' + +on: + workflow_run: + workflows: ['CI: Vercel Website Preview'] + types: + - completed + +permissions: + contents: read + pull-requests: write + actions: read + +jobs: + comment: + runs-on: ubuntu-latest + if: > + github.repository == 'Comfy-Org/ComfyUI_frontend' && + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + steps: + - uses: actions/checkout@v6 + + - name: Download preview metadata + uses: dawidd6/action-download-artifact@0bd50d53a6d7fb5cb921e607957e9cc12b4ce392 # v12 + with: + name: vercel-preview + run_id: ${{ github.event.workflow_run.id }} + path: temp/vercel-preview + + - name: Resolve PR number from workflow_run context + id: pr-meta + uses: actions/github-script@v8 + with: + script: | + let pr = context.payload.workflow_run.pull_requests?.[0]; + if (!pr) { + const { data: prs } = await github.rest.repos.listPullRequestsAssociatedWithCommit({ + owner: context.repo.owner, + repo: context.repo.repo, + commit_sha: context.payload.workflow_run.head_sha, + }); + pr = prs.find(p => p.state === 'open'); + } + + if (!pr) { + core.info('No open PR found for this workflow run — skipping.'); + core.setOutput('skip', 'true'); + return; + } + + core.setOutput('skip', 'false'); + core.setOutput('number', String(pr.number)); + + - name: Read preview URL + if: steps.pr-meta.outputs.skip != 'true' + id: meta + run: | + echo "url=$(cat temp/vercel-preview/url.txt)" >> "$GITHUB_OUTPUT" + + - name: Write report + if: steps.pr-meta.outputs.skip != 'true' + run: | + echo "**Website Preview:** ${{ steps.meta.outputs.url }}" > preview-report.md + + - name: Post PR comment + if: steps.pr-meta.outputs.skip != 'true' + uses: ./.github/actions/post-pr-report-comment + with: + pr-number: ${{ steps.pr-meta.outputs.number }} + report-file: ./preview-report.md + comment-marker: '' + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/apps/website/vercel.json b/apps/website/vercel.json index 37005b11c2..0fc58eeaaf 100644 --- a/apps/website/vercel.json +++ b/apps/website/vercel.json @@ -4,6 +4,9 @@ "outputDirectory": "apps/website/dist", "installCommand": "pnpm install --frozen-lockfile", "framework": null, + "github": { + "enabled": false + }, "redirects": [ { "source": "/pricing",