Skip to content

Commit 6ceba36

Browse files
committed
update pr-comment-artifacts
1 parent 62f3862 commit 6ceba36

1 file changed

Lines changed: 124 additions & 0 deletions

File tree

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# https://github.com/orgs/community/discussions/51403
2+
3+
name: Comment Artifacts
4+
5+
on:
6+
workflow_run:
7+
types:
8+
- "completed"
9+
workflows:
10+
- "Build and Test"
11+
12+
permissions:
13+
actions: read
14+
attestations: read
15+
contents: read
16+
pull-requests: write
17+
18+
jobs:
19+
parse-metadata:
20+
runs-on: ubuntu-latest
21+
outputs:
22+
PR_NUMBER: ${{ steps.metadata.outputs.PR_NUMBER }}
23+
HEAD_SHA: ${{ steps.metadata.outputs.HEAD_SHA }}
24+
ARTIFACT_ID: ${{ steps.metadata.outputs.ARTIFACT_ID }}
25+
ARTIFACT_URL: ${{ steps.metadata.outputs.ARTIFACT_URL }}
26+
ARTIFACT_EXP: ${{ steps.metadata.outputs.ARTIFACT_EXP }}
27+
ARTIFACT_NAME: ${{ steps.metadata.outputs.ARTIFACT_NAME }}
28+
steps:
29+
- name: Get Artifact URL & PR Info
30+
id: metadata
31+
env:
32+
GITHUB_TOKEN: ${{ github.token }}
33+
OWNER: ${{ github.repository_owner }}
34+
REPO: ${{ github.event.repository.name }}
35+
WORKFLOW_RUN_EVENT_OBJ: ${{ toJSON(github.event.workflow_run) }}
36+
PREVIOUS_JOB_ID: ${{ github.event.workflow_run.id }}
37+
run: |
38+
echo "Previous Job ID: $PREVIOUS_JOB_ID"
39+
40+
LOG_URL="/repos/$OWNER/$REPO/actions/runs/$PREVIOUS_JOB_ID/logs"
41+
echo "Getting previous logs: $LOG_URL"
42+
gh api "$LOG_URL" >_logs.zip
43+
echo "Unzipping logs"
44+
unzip -p _logs.zip >_build.txt
45+
46+
echo "Parsing logs"
47+
function parse_var {
48+
name=$1
49+
echo "Parsing output $name"
50+
line=$(cat _build.txt | grep -m 1 "output:${name}=" | cat)
51+
export parsed=${line#*"output:${name}="}
52+
}
53+
parse_var PR_NUMBER
54+
PR_NUMBER=$parsed
55+
echo "PR Number: $PR_NUMBER"
56+
echo "PR_NUMBER=$PR_NUMBER" >> "$GITHUB_OUTPUT"
57+
58+
parse_var HEAD_SHA
59+
HEAD_SHA=$parsed
60+
echo "Head sha: $HEAD_SHA"
61+
echo "HEAD_SHA=$HEAD_SHA" >> "$GITHUB_OUTPUT"
62+
63+
parse_var ARTIFACT_ID
64+
ARTIFACT_ID=$parsed
65+
echo "ARTIFACT ID: $ARTIFACT_ID"
66+
echo "ARTIFACT_ID=$ARTIFACT_ID" >> "$GITHUB_OUTPUT"
67+
68+
parse_var ARTIFACT_URL
69+
ARTIFACT_URL=$parsed
70+
echo "ARTIFACT URL: $ARTIFACT_URL"
71+
echo "ARTIFACT_URL=$ARTIFACT_URL" >> "$GITHUB_OUTPUT"
72+
73+
if [[ "$ARTIFACT_ID" != "" ]]; then
74+
ARTIFACT_INFO="$(gh api "/repos/$OWNER/$REPO/actions/artifacts/$ARTIFACT_ID")"
75+
ARTIFACT_EXP=$(echo "$ARTIFACT_INFO" | jq ".expires_at")
76+
echo "ARTIFACT EXP: $ARTIFACT_EXP"
77+
echo "ARTIFACT_EXP=$ARTIFACT_EXP" >> "$GITHUB_OUTPUT"
78+
ARTIFACT_NAME=$(echo "$ARTIFACT_INFO" | jq ".name")
79+
echo "ARTIFACT NAME: $ARTIFACT_NAME"
80+
echo "ARTIFACT_NAME=$ARTIFACT_NAME" >> "$GITHUB_OUTPUT"
81+
fi
82+
exit 0
83+
84+
comment-success:
85+
if: ${{ needs.parse-metadata.outputs.PR_NUMBER != '' }}
86+
runs-on: ubuntu-latest
87+
needs:
88+
- parse-metadata
89+
steps:
90+
- name: Find Comment
91+
uses: peter-evans/find-comment@v3
92+
id: fc
93+
with:
94+
issue-number: ${{ needs.parse-metadata.outputs.PR_NUMBER }}
95+
comment-author: 'github-actions[bot]'
96+
body-includes: '## Build Preview'
97+
98+
- name: Update Comment
99+
env:
100+
JOB_PATH: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}"
101+
HEAD_SHA: ${{ needs.parse-metadata.outputs.HEAD_SHA }}
102+
ARTIFACT_URL: ${{ needs.parse-metadata.outputs.ARTIFACT_URL }}
103+
ARTIFACT_EXP: ${{ needs.parse-metadata.outputs.ARTIFACT_EXP }}
104+
ARTIFACT_NAME: ${{ needs.parse-metadata.outputs.ARTIFACT_NAME }}
105+
uses: peter-evans/create-or-update-comment@v4
106+
with:
107+
issue-number: ${{ needs.parse-metadata.outputs.PR_NUMBER }}
108+
comment-id: ${{ steps.fc.outputs.comment-id }}
109+
edit-mode: replace
110+
body: |-
111+
## Build Preview
112+
113+
[![badge]]($JOB_PATH)
114+
115+
You can find files attached to the below linked Workflow Run URL (Logs).
116+
117+
| Name | Link |
118+
|-----------|-------------------------|
119+
| Commit | ${{ env.HEAD_SHA }} |
120+
| Logs | ${{ env.JOB_PATH }} |
121+
${{ env.ARTIFACT_URL && format('| Jar Files | [{0}]({1}) |', env.ARTIFACT_NAME, env.ARTIFACT_URL) || '' }}
122+
${{ env.ARTIFACT_EXP && format('| Expires At | {0} |', env.ARTIFACT_EXP) || '' }}
123+
124+
[badge]: https://img.shields.io/badge/${{ format('{0}-{1}', github.event.workflow_run.conclusion, github.event.workflow_run.conclusion == 'success' && '3fb950' || 'f85149') }}?style=for-the-badge&logo=github&label=build

0 commit comments

Comments
 (0)