Write build artifact comments #4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Write build artifact comments | |
on: | |
workflow_run: | |
workflows: ["Build"] | |
types: | |
- completed | |
permissions: | |
contents: read | |
jobs: | |
on-success: | |
permissions: | |
pull-requests: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get source code | |
uses: actions/checkout@v4 | |
with: | |
# To fetch tags | |
fetch-depth: 0 | |
- name: 'Set plugin version environment variables' | |
run: | | |
TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) | |
echo "VERSION=$(echo ${TAG} | awk -F. -v OFS=. 'NF==1{print ++$NF}; NF>1{if(length($NF+1)>length($NF))$(NF-1)++; $NF=sprintf("%0*d", length($NF), ($NF+1)%(10^length($NF))); print}')-alpha" >> $GITHUB_ENV | |
echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
- name: 'Download artifact' | |
id: download_artifact | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
run_id: context.payload.workflow_run.id, | |
}); | |
let matchArtifacts = allArtifacts.data.artifacts.filter((artifact) => { | |
return artifact.name == "firstaid" | |
}); | |
matchArtifacts.forEach((artifact) => { | |
}); | |
if (matchArtifacts.length>0) | |
{ | |
let download = await github.rest.actions.downloadArtifact({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
artifact_id: matchArtifacts[0].id, | |
archive_format: 'zip', | |
}); | |
let fs = require('fs'); | |
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/firstaid.zip`, Buffer.from(download.data)); | |
core.setOutput('artifact_id', matchArtifacts[0].id); | |
} | |
else | |
{ | |
core.setOutput('artifact_id', 0); | |
} | |
- name: 'Unzip artifact' | |
if: fromJSON(steps.download_artifact.outputs.artifact_id) > 0 | |
run: | | |
unzip -n firstaid | |
- name: 'Post artifact download link as comment on PR' | |
if: fromJSON(steps.download_artifact.outputs.artifact_id) > 0 | |
uses: actions/github-script@v7 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
let fs = require('fs'); | |
let issue_number = Number(fs.readFileSync('./pr_number')); | |
let git_sha = String(fs.readFileSync('./git_commit')).trim(); | |
const prComments = await github.rest.issues.listComments({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
}); | |
const PREFIX = "## Plugin ready!"; | |
let body = PREFIX + "\n\n" + | |
"A test version of this PR is available for testing [here](https://github.com/" + context.repo.owner + "/" + context.repo.repo + "/suites/" + context.payload.workflow_run.check_suite_id + "/artifacts/${{steps.download_artifact.outputs.artifact_id}})."; | |
body += "\n\n*(Built from commit " + git_sha + ")*"; | |
const winBuildComment = prComments.data?.find(c => c.body.startsWith(PREFIX)); | |
if (!!winBuildComment) { | |
// update the existing comment | |
await github.rest.issues.updateComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: winBuildComment.id, | |
body: body | |
}); | |
} else { | |
// submit a new comment | |
await github.rest.issues.createComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue_number, | |
body: body | |
}); | |
} |