diff options
Diffstat (limited to '.github/workflows/comment.yml')
-rw-r--r-- | .github/workflows/comment.yml | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/.github/workflows/comment.yml b/.github/workflows/comment.yml new file mode 100644 index 0000000000..4038ff8de1 --- /dev/null +++ b/.github/workflows/comment.yml @@ -0,0 +1,46 @@ +name: comment + +on: + workflow_run: + workflows: [build] + types: [completed] + +jobs: + pr_comment: + if: github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + pr=$(gh pr list --state open --json headRefOid,number \ + --jq '.[] | select(.headRefOid == "${{ github.event.workflow_run.head_sha }}") | .number') + if [ -z "$pr" ]; then + echo "No matching pull request found" + exit 1 + fi + + artifacts=$(gh api repos/{owner}/{repo}/actions/runs/${{ github.event.workflow_run.id }}/artifacts --jq '.artifacts') + if [ "$(echo "$artifacts" | jq 'length')" -eq 0 ]; then + echo "No artifacts found" + exit 0 + fi + + body=$(echo "$artifacts" | jq -r ' + def link: "https://nightly.link/${{ github.repository }}/actions/artifacts/\(.id).zip"; + def entry: "* [\(.name)](\(link))"; + "Download the artifacts for this pull request:\n<details><summary>Windows</summary>\n\n" + + (sort_by(.name) | map(select(.name | test("w64|msvc")) | entry) | join("\n")) + + "\n</details>\n<details><summary>macOS</summary>\n\n" + + (sort_by(.name) | map(select(.name | test("macos")) | entry) | join("\n")) + + "\n</details>" + ') + + comment_id=$(gh issue view $pr --json comments \ + --jq '.comments[] | select(.author.login == "github-actions") | .id') + if [ -n "$comment_id" ]; then + edit=--edit-last + fi + gh pr comment $pr --body "$body" $edit |