Skip to content

Commit 2306fbe

Browse files
committed
post comment on pr
1 parent facc8bf commit 2306fbe

1 file changed

Lines changed: 64 additions & 22 deletions

File tree

.github/workflows/pr-run.yaml

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ on:
66
jobs:
77
validate-and-deploy:
88
runs-on: ubuntu-latest
9+
permissions:
10+
pull-requests: write
911
steps:
1012
- uses: actions/checkout@v6
1113
with:
@@ -85,50 +87,90 @@ jobs:
8587
- name: Summary
8688
if: always()
8789
run: |
88-
echo "## 🧩 Plugin PR Summary" >> $GITHUB_STEP_SUMMARY
89-
echo "" >> $GITHUB_STEP_SUMMARY
90+
OUT=/tmp/summary.md
91+
92+
echo "## 🧩 Plugin PR Summary" >> $OUT
93+
echo "" >> $OUT
9094
9195
if [ "${{ steps.detect.outputs.plugins_modified }}" != "true" ]; then
92-
echo "ℹ️ No plugins were modified in this PR." >> $GITHUB_STEP_SUMMARY
96+
echo "ℹ️ No plugins were modified in this PR." >> $OUT
97+
cat $OUT >> $GITHUB_STEP_SUMMARY
9398
exit 0
9499
fi
95100
96-
echo "### 📦 Modified Plugins" >> $GITHUB_STEP_SUMMARY
101+
echo "### 📦 Modified Plugins" >> $OUT
97102
while IFS= read -r plugin_path; do
98-
echo "- \`${plugin_path}\`" >> $GITHUB_STEP_SUMMARY
103+
echo "- \`${plugin_path}\`" >> $OUT
99104
done <<< "${{ steps.detect.outputs.plugin_paths }}"
100-
echo "" >> $GITHUB_STEP_SUMMARY
105+
echo "" >> $OUT
101106
102-
echo "### 📋 Results" >> $GITHUB_STEP_SUMMARY
103-
echo "| Step | Status |" >> $GITHUB_STEP_SUMMARY
104-
echo "|------|--------|" >> $GITHUB_STEP_SUMMARY
107+
echo "### 📋 Results" >> $OUT
108+
echo "| Step | Status |" >> $OUT
109+
echo "|------|--------|" >> $OUT
105110
106111
validate_conclusion="${{ steps.validate.conclusion }}"
107112
deploy_conclusion="${{ steps.deploy.conclusion }}"
108113
109114
[ "$validate_conclusion" = "success" ] && v_status="✅ Passed" || v_status="❌ Failed"
110115
[ "$deploy_conclusion" = "success" ] && d_status="🚀 Deployed" || d_status="⏭️ Skipped"
111116
112-
echo "| Validation | ${v_status} |" >> $GITHUB_STEP_SUMMARY
113-
echo "| Deployment | ${d_status} |" >> $GITHUB_STEP_SUMMARY
114-
echo "" >> $GITHUB_STEP_SUMMARY
117+
echo "| Validation | ${v_status} |" >> $OUT
118+
echo "| Deployment | ${d_status} |" >> $OUT
119+
echo "" >> $OUT
115120
116121
if [ -f /tmp/validation_results.ndjson ]; then
117-
echo "### 🔍 Validation Details" >> $GITHUB_STEP_SUMMARY
118-
echo "" >> $GITHUB_STEP_SUMMARY
122+
echo "### 🔍 Validation Details" >> $OUT
123+
echo "" >> $OUT
119124
while IFS= read -r line; do
120125
plugin_path=$(echo "$line" | jq -r '.plugin_path')
121126
valid=$(echo "$line" | jq -r '.valid')
122127
plugin_name=$(echo "$line" | jq -r '.pluginName // .plugin_path')
123128
[ "$valid" = "true" ] && icon="✅" || icon="❌"
124129
125-
echo "<details>" >> $GITHUB_STEP_SUMMARY
126-
echo "<summary>${icon} <code>${plugin_name}</code></summary>" >> $GITHUB_STEP_SUMMARY
127-
echo "" >> $GITHUB_STEP_SUMMARY
128-
echo '```json' >> $GITHUB_STEP_SUMMARY
129-
echo "$line" | jq 'del(.plugin_path)' >> $GITHUB_STEP_SUMMARY
130-
echo '```' >> $GITHUB_STEP_SUMMARY
131-
echo "</details>" >> $GITHUB_STEP_SUMMARY
132-
echo "" >> $GITHUB_STEP_SUMMARY
130+
echo "<details>" >> $OUT
131+
echo "<summary>${icon} <code>${plugin_name}</code></summary>" >> $OUT
132+
echo "" >> $OUT
133+
echo '```json' >> $OUT
134+
echo "$line" | jq 'del(.plugin_path)' >> $OUT
135+
echo '```' >> $OUT
136+
echo "</details>" >> $OUT
137+
echo "" >> $OUT
133138
done < /tmp/validation_results.ndjson
134139
fi
140+
141+
cat $OUT >> $GITHUB_STEP_SUMMARY
142+
143+
- name: Post PR comment
144+
if: always()
145+
uses: actions/github-script@v7
146+
with:
147+
script: |
148+
const fs = require('fs');
149+
const marker = '<!-- plugin-pr-summary -->';
150+
const summary = fs.existsSync('/tmp/summary.md')
151+
? fs.readFileSync('/tmp/summary.md', 'utf8')
152+
: '_No summary available._';
153+
const body = `${marker}\n${summary}`;
154+
155+
const comments = await github.paginate(github.rest.issues.listComments, {
156+
owner: context.repo.owner,
157+
repo: context.repo.repo,
158+
issue_number: context.issue.number,
159+
});
160+
161+
const existing = comments.find(c => c.body.includes(marker));
162+
163+
if (existing) {
164+
await github.rest.issues.deleteComment({
165+
owner: context.repo.owner,
166+
repo: context.repo.repo,
167+
comment_id: existing.id,
168+
});
169+
}
170+
171+
await github.rest.issues.createComment({
172+
owner: context.repo.owner,
173+
repo: context.repo.repo,
174+
issue_number: context.issue.number,
175+
body,
176+
});

0 commit comments

Comments
 (0)