зеркало из https://github.com/github/codeql.git
75 строки
3.1 KiB
YAML
75 строки
3.1 KiB
YAML
# This workflow is the second part of the process described in
|
|
# .github/workflows/qhelp-pr-preview.yml
|
|
# See that file for more info.
|
|
|
|
name: Post PR comment
|
|
on:
|
|
workflow_run:
|
|
workflows: [Render QHelp changes]
|
|
types:
|
|
- completed
|
|
|
|
permissions:
|
|
pull-requests: write
|
|
actions: read
|
|
|
|
jobs:
|
|
post_comment:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Download artifact
|
|
run: gh run download "${WORKFLOW_RUN_ID}" --repo "${GITHUB_REPOSITORY}" --name "comment"
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }}
|
|
|
|
- name: Check that PR SHA matches workflow SHA
|
|
run: |
|
|
PR="$(grep -o '^[0-9]\+$' pr_number.txt)"
|
|
PR_HEAD_SHA="$(gh api "/repos/${GITHUB_REPOSITORY}/pulls/${PR}" --jq .head.sha)"
|
|
# Check that the pull-request head SHA matches the head SHA of the workflow run
|
|
if [ "${WORKFLOW_RUN_HEAD_SHA}" != "${PR_HEAD_SHA}" ]; then
|
|
echo "PR head SHA ${PR_HEAD_SHA} does not match workflow_run event SHA ${WORKFLOW_RUN_HEAD_SHA}. Stopping." 1>&2
|
|
exit 1
|
|
fi
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
WORKFLOW_RUN_HEAD_SHA: ${{ github.event.workflow_run.head_commit.id }}
|
|
|
|
- name: Create or update comment
|
|
run: |
|
|
COMMENT_PREFIX="QHelp previews"
|
|
COMMENT_AUTHOR="github-actions[bot]"
|
|
PR_NUMBER="$(grep -o '^[0-9]\+$' pr_number.txt)"
|
|
|
|
# If there is no existing comment, comment_id.txt will contain just a
|
|
# newline (due to jq & gh behaviour). This will cause grep to fail, so
|
|
# we catch that.
|
|
RAW_COMMENT_ID=$(grep -o '^[0-9]\+$' comment_id.txt || true)
|
|
|
|
if [ $RAW_COMMENT_ID ]
|
|
then
|
|
# Fetch existing comment, and validate:
|
|
# - comment belongs to the PR with number $PR_NUMBER
|
|
# - comment starts with the expected prefix ("QHelp previews")
|
|
# - comment author is github-actions[bot]
|
|
FILTER='select(.issue_url | endswith($repo+"/issues/"+$pr))
|
|
| select(.body | startswith($prefix))
|
|
| select(.user.login == $author)
|
|
| .id'
|
|
COMMENT_ID=$(gh api "repos/${GITHUB_REPOSITORY}/issues/comments/${RAW_COMMENT_ID}" | jq --arg repo "${GITHUB_REPOSITORY}" --arg pr "${PR_NUMBER}" --arg prefix "${COMMENT_PREFIX}" --arg author "${COMMENT_AUTHOR}" "${FILTER}")
|
|
if [ $COMMENT_ID ]
|
|
then
|
|
# Update existing comment
|
|
jq --rawfile body comment_body.txt '{"body":$body}' -n | gh api "repos/${GITHUB_REPOSITORY}/issues/comments/${COMMENT_ID}" -X PATCH --input -
|
|
else
|
|
echo "Comment ${RAW_COMMENT_ID} did not pass validations: not editing." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
# Create new comment
|
|
jq --rawfile body comment_body.txt '{"body":$body}' -n | gh api "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" -X POST --input -
|
|
fi
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|