Skip to content

Commit 309c279

Browse files
committed
feat: comment pr with all vercel preview links
1 parent 0fba74a commit 309c279

File tree

2 files changed

+85
-22
lines changed

2 files changed

+85
-22
lines changed
Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,50 @@
11
name: 'Comment Vercel Preview'
22
description: 'Comment Vercel deploy preview links on a PR.'
33
inputs:
4-
inspect_url:
5-
description: 'Inspect URL from Vercel deploy output.'
6-
required: true
7-
preview_url:
8-
description: 'Preview/Production URL from Vercel deploy output.'
9-
required: true
10-
label:
11-
description: 'Label for the deployment (e.g., EN, ZH-HANS).'
4+
deploy_results_path:
5+
description: 'Path to the JSON file containing all deploy results.'
126
required: true
137
runs:
148
using: 'composite'
159
steps:
16-
- name: Comment PR with Vercel Preview Links
10+
- name: Comment PR with all Vercel Preview Links
1711
uses: actions/github-script@v7
1812
with:
1913
script: |
20-
const inspect = process.env.INSPECT_URL;
21-
const preview = process.env.PREVIEW_URL;
22-
let body = `**Vercel Deploy Preview (${process.env.LABEL})**\n\n`;
23-
body += `- [Inspect](${inspect}) | [Preview](${preview})`;
24-
github.rest.issues.createComment({
14+
const fs = require('fs');
15+
const path = process.env.DEPLOY_RESULTS_PATH;
16+
const marker = '<!-- vercel-preview-links -->';
17+
const results = JSON.parse(fs.readFileSync(path, 'utf8'));
18+
let body = `${marker}\n`;
19+
body += `## Vercel Deploy Previews\n`;
20+
console.log('Deploy results:', results);
21+
// Handle array of deploy results
22+
for (const job of results) {
23+
if (job && job.label) {
24+
body += `- **${job.label}**: [Inspect](${job.inspect_url}) | [Preview](${job.preview_url})\n`;
25+
}
26+
}
27+
// Find existing comment
28+
const { data: comments } = await github.rest.issues.listComments({
2529
issue_number: context.issue.number,
2630
owner: context.repo.owner,
2731
repo: context.repo.repo,
28-
body
2932
});
33+
const existing = comments.find(c => c.body && c.body.includes(marker));
34+
if (existing) {
35+
await github.rest.issues.updateComment({
36+
comment_id: existing.id,
37+
owner: context.repo.owner,
38+
repo: context.repo.repo,
39+
body
40+
});
41+
} else {
42+
await github.rest.issues.createComment({
43+
issue_number: context.issue.number,
44+
owner: context.repo.owner,
45+
repo: context.repo.repo,
46+
body
47+
});
48+
}
3049
env:
31-
INSPECT_URL: ${{ inputs.inspect_url }}
32-
PREVIEW_URL: ${{ inputs.preview_url }}
33-
LABEL: ${{ inputs.label }}
50+
DEPLOY_RESULTS_PATH: ${{ inputs.deploy_results_path }}

.github/workflows/prerelease.yml

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,56 @@ jobs:
6868
vercel_project_id: ${{ secrets[matrix.secret_project_id] }}
6969
vercel_org_id: ${{ secrets.VERCEL_ORG_ID }}
7070
vercel_token: ${{ secrets.VERCEL_TOKEN }}
71-
- name: Comment PR with Vercel Preview Links (${{ matrix.locale }})
71+
- name: Set deploy outputs
7272
if: steps.should_deploy.outputs.should_deploy == 'true'
73+
id: set_outputs
74+
run: |
75+
echo "preview_url=${{ steps.deploy.outputs.prod_url }}" >> $GITHUB_OUTPUT
76+
echo "inspect_url=${{ steps.deploy.outputs.inspect_url }}" >> $GITHUB_OUTPUT
77+
echo "label=${{ matrix.locale }}" >> $GITHUB_OUTPUT
78+
- name: Write deploy result to file
79+
if: steps.should_deploy.outputs.should_deploy == 'true'
80+
run: |
81+
jq -n \
82+
--arg label "${{ steps.set_outputs.outputs.label }}" \
83+
--arg preview_url "${{ steps.set_outputs.outputs.preview_url }}" \
84+
--arg inspect_url "${{ steps.set_outputs.outputs.inspect_url }}" \
85+
'{label: $label, preview_url: $preview_url, inspect_url: $inspect_url}' > deploy-result.json
86+
- name: Upload deploy result artifact
87+
if: steps.should_deploy.outputs.should_deploy == 'true'
88+
uses: actions/upload-artifact@v4
89+
with:
90+
name: deploy-result-${{ matrix.locale }}
91+
path: deploy-result.json
92+
93+
comment-vercel-previews:
94+
needs: deploy
95+
name: Comment Vercel Previews
96+
runs-on: ubuntu-latest
97+
if: always()
98+
steps:
99+
- name: Checkout repo
100+
uses: actions/checkout@v3
101+
- name: Download all deploy result artifacts
102+
uses: actions/download-artifact@v4
103+
with:
104+
pattern: deploy-result-*
105+
path: deploy-results
106+
- name: Combine deploy results
107+
id: aggregate
108+
run: |
109+
jq -s '.' deploy-results/deploy-result-*/deploy-result.json > deploy-results.json
110+
- name: Check if deploy results exist
111+
id: check_results
112+
run: |
113+
if [ -f deploy-results.json ] && [ $(jq length deploy-results.json) -gt 0 ]; then
114+
echo "has_results=true" >> $GITHUB_OUTPUT
115+
else
116+
echo "has_results=false" >> $GITHUB_OUTPUT
117+
fi
118+
- name: Comment PR with all Vercel Preview Links
119+
if: |
120+
success() && hashFiles('deploy-results.json') != '' && steps.check_results.outputs.has_results == 'true'
73121
uses: ./.github/actions/comment-vercel-preview
74122
with:
75-
inspect_url: ${{ steps.deploy.outputs.inspect_url }}
76-
preview_url: ${{ steps.deploy.outputs.prod_url }}
77-
label: ${{ matrix.locale }}
123+
deploy_results_path: deploy-results.json

0 commit comments

Comments
 (0)