When a user deletes their account, they appear as a "ghost user". This user is represented as `null` on API requests. If such a user had posted a review before, this breaks a few places, which assume to be able to access `user.login`.
67 lines
2.4 KiB
YAML
67 lines
2.4 KiB
YAML
name: Dismissed review
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows:
|
|
- Review dismissed
|
|
types: [completed]
|
|
|
|
concurrency:
|
|
group: dismissed-review-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
pull-requests: write
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
# The `check-cherry-picks` workflow creates review comments which reviewers
|
|
# are encouraged to manually dismiss if they're not relevant.
|
|
# When a CI-generated review is dismissed, this job automatically minimizes
|
|
# it, preventing it from cluttering the PR.
|
|
minimize:
|
|
name: Minimize as resolved
|
|
runs-on: ubuntu-24.04-arm
|
|
timeout-minutes: 2
|
|
steps:
|
|
- uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
|
with:
|
|
script: |
|
|
// PRs from forks don't have any PRs associated by default.
|
|
// Thus, we request the PR number with an API call *to* the fork's repo.
|
|
// Multiple pull requests can be open from the same head commit, either via
|
|
// different base branches or head branches.
|
|
const { head_repository, head_sha, repository } = context.payload.workflow_run
|
|
await Promise.all(
|
|
(await github.paginate(github.rest.repos.listPullRequestsAssociatedWithCommit, {
|
|
owner: head_repository.owner.login,
|
|
repo: head_repository.name,
|
|
commit_sha: head_sha
|
|
}))
|
|
.filter(pull_request => pull_request.base.repo.id == repository.id)
|
|
.map(async (pull_request) =>
|
|
Promise.all(
|
|
(await github.paginate(github.rest.pulls.listReviews, {
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
pull_number: pull_request.number
|
|
})).filter(review =>
|
|
review.user?.login == 'github-actions[bot]' &&
|
|
review.state == 'DISMISSED'
|
|
).map(review => github.graphql(`
|
|
mutation($node_id:ID!) {
|
|
minimizeComment(input: {
|
|
classifier: RESOLVED,
|
|
subjectId: $node_id
|
|
})
|
|
{ clientMutationId }
|
|
}`,
|
|
{ node_id: review.node_id }
|
|
))
|
|
)
|
|
)
|
|
)
|