Review Labels #2295
Workflow file for this run
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: Review Labels | |
on: | |
pull_request_target: | |
types: [closed, converted_to_draft, edited, opened, ready_for_review, reopened, unlabeled] | |
pull_request_review: | |
types: [submitted] | |
permissions: | |
pull-requests: write | |
env: | |
PEER_REQUIRED: 'pr: peer review required' | |
PEER_APPROVED: 'pr: peer review approved' | |
LEAD_REQUIRED: 'pr: lead review required' | |
LEAD_APPROVED: 'pr: lead review approved' | |
UX_REQUIRED: 'pr: ux review required' | |
UX_APPROVED: 'pr: ux review approved' | |
GH_TOKEN: ${{ github.token }} | |
jobs: | |
# Workaround for the limitation of being unable to use env in job if block. | |
# https://github.com/actions/runner/issues/1189 | |
pr-check: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request_target' | |
outputs: | |
PEER_REQUIRED: ${{ steps.env.outputs.PEER_REQUIRED }} | |
PEER_APPROVED: ${{ steps.env.outputs.PEER_APPROVED }} | |
steps: | |
- name: Copy variables | |
id: env | |
run: | | |
echo "PEER_REQUIRED=$PEER_REQUIRED" >> "${GITHUB_OUTPUT}" | |
echo "PEER_APPROVED=$PEER_APPROVED" >> "${GITHUB_OUTPUT}" | |
peer-review-required: | |
runs-on: ubuntu-latest | |
needs: pr-check | |
if: > | |
!github.event.pull_request.draft && | |
!contains(github.event.pull_request.title, '[WIP]') && | |
!contains(github.event.pull_request.labels.*.name, needs.pr-check.outputs.PEER_APPROVED) | |
steps: | |
- name: Assign peer review required label | |
run: gh issue edit ${{ github.event.number }} --repo ${{ github.repository }} --add-label "$PEER_REQUIRED" | |
peer-review-not-required: | |
runs-on: ubuntu-latest | |
needs: pr-check | |
if: > | |
( | |
github.event.pull_request.draft || | |
contains(github.event.pull_request.title, '[WIP]') || | |
github.event.action == 'closed' | |
) && | |
contains(github.event.pull_request.labels.*.name, needs.pr-check.outputs.PEER_REQUIRED) | |
steps: | |
- name: Remove peer review required label | |
run: gh issue edit ${{ github.event.number }} --repo ${{ github.repository }} --remove-label "$PEER_REQUIRED" | |
approved: | |
runs-on: ubuntu-latest | |
if: github.event_name == 'pull_request_review' && github.event.review.state == 'APPROVED' | |
steps: | |
- name: Resolve team membership | |
id: team | |
run: | | |
ghTeamMembership() { | |
local result=$( | |
gh api -H 'Accept: application/vnd.github+json' -H 'X-GitHub-Api-Version: 2022-11-28' \ | |
/orgs/${{ github.repository_owner }}/teams/$1/memberships/$2 \ | |
| jq '(.role + "." + .state)' | |
) | |
echo "$result" | |
} | |
# echo "core-member=$(ghTeamMembership 'core' '${{ github.actor }}')" >> "$GITHUB_OUTPUT" | |
# echo "ux-member=$(ghTeamMembership 'UX' '${{ github.actor }}')" >> "$GITHUB_OUTPUT" | |
# Hard coding this, until the repositories are moved into the new organization. | |
actor="${{ github.actor }}" | |
if [[ "$actor" == "jeripeierSBB" ]] || [[ "$actor" == "kyubisation" ]]; then | |
echo "core-member=maintainer.active" >> "$GITHUB_OUTPUT" | |
echo "ux-member=." >> "$GITHUB_OUTPUT" | |
elif [[ "$actor" == "dauriamarco" ]] || [[ "$actor" == "DavideMininni-Fincons" ]] || [[ "$actor" == "MarioCastigliano" ]] || [[ "$actor" == "TomMenga" ]]; then | |
echo "core-member=member.active" >> "$GITHUB_OUTPUT" | |
echo "ux-member=." >> "$GITHUB_OUTPUT" | |
elif [[ "$actor" == "mcilurzo" ]]; then | |
echo "core-member=." >> "$GITHUB_OUTPUT" | |
echo "ux-member=member.active" >> "$GITHUB_OUTPUT" | |
else | |
echo "core-member=." >> "$GITHUB_OUTPUT" | |
echo "ux-member=." >> "$GITHUB_OUTPUT" | |
fi | |
- name: Assign peer review approved label | |
if: steps.team.outputs.core-member == 'member.active' | |
run: | | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --remove-label "$PEER_REQUIRED" | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --add-label "$PEER_APPROVED" | |
- name: Assign lead review approved label | |
if: steps.team.outputs.core-member == 'maintainer.active' | |
run: | | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --remove-label "$LEAD_REQUIRED" | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --add-label "$LEAD_APPROVED" | |
- name: Assign ux review approved label | |
if: steps.team.outputs.ux-member == 'maintainer.active' || steps.team.outputs.ux-member == 'member.active' | |
run: | | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --remove-label "$UX_REQUIRED" | |
gh issue edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --add-label "$UX_APPROVED" |