# This workflow checks for any changes in .qhelp files in pull requests. # For any changed files, it renders them to markdown in a file called `comment_body.txt`. # It then checks if there's an existing comment on the pull request generated by # this workflow, and writes the comment ID to `comment_id.txt`. # It also writes the PR number to `pr_number.txt`. # These three files are uploaded as an artifact. # When this workflow completes, the workflow "Post PR comment" runs. # It downloads the artifact and adds a comment to the PR with the rendered # QHelp. # The task is split like this because creating PR comments requires extra # permissions that we don't want to expose to PRs from external forks. # For more info see: # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run # https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token name: Render QHelp changes permissions: contents: read pull-requests: read on: pull_request: branches: - main - "rc/*" paths: - "**/*.qhelp" jobs: qhelp: runs-on: ubuntu-latest steps: - run: echo "${PR_NUMBER}" > pr_number.txt env: PR_NUMBER: ${{ github.event.number }} - uses: actions/upload-artifact@v3 with: name: comment path: pr_number.txt if-no-files-found: error retention-days: 1 - uses: actions/checkout@v4 with: fetch-depth: 2 persist-credentials: false - uses: ./.github/actions/fetch-codeql - name: Determine changed files id: changes run: | (git diff -z --name-only --diff-filter=ACMRT HEAD~1 HEAD | grep -z '.qhelp$' | grep -z -v '.inc.qhelp'; git diff -z --name-only --diff-filter=ACMRT HEAD~1 HEAD | grep -z '.inc.qhelp$' | xargs --null -rn1 basename -z | xargs --null -rn1 git grep -z -l) | grep -z '.qhelp$' | grep -z -v '^-' | sort -z -u > "${RUNNER_TEMP}/paths.txt" - name: QHelp preview run: | EXIT_CODE=0 echo "QHelp previews:" > comment_body.txt while read -r -d $'\0' path; do if [ ! -f "${path}" ]; then exit 1 fi echo "
${path}" echo codeql generate query-help --format=markdown -- "./${path}" 2> errors.txt || EXIT_CODE="$?" if [ -s errors.txt ]; then echo "# errors/warnings:" echo '```' cat errors.txt cat errors.txt 1>&2 echo '```' fi echo "
" done < "${RUNNER_TEMP}/paths.txt" >> comment_body.txt exit "${EXIT_CODE}" - if: ${{ !cancelled() }} uses: actions/upload-artifact@v3 with: name: comment path: comment_body.txt if-no-files-found: error retention-days: 1 - name: Save ID of existing QHelp comment (if it exists) run: | # Find the latest comment starting with "QHelp previews" COMMENT_PREFIX="QHelp previews" gh api "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" --paginate | jq --arg prefix "${COMMENT_PREFIX}" '[.[] | select(.body|startswith($prefix)) | .id] | max' > comment_id.txt env: GITHUB_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.number }} - uses: actions/upload-artifact@v3 with: name: comment path: comment_id.txt if-no-files-found: error retention-days: 1