Unverified Commit 62779fbf authored by Wolfgang Walther's avatar Wolfgang Walther
Browse files

ci/request-reviews: share code to request reviewers from gh api

This makes it easier to add ofborg's request-1-by-1 logic, where failed
requests are OK for edge cases.
parent 2e611946
Loading
Loading
Loading
Loading
+1 −8
Original line number Diff line number Diff line
@@ -294,14 +294,7 @@ jobs:
          # There appears to be no API to request reviews based on GitHub IDs
          jq -r 'keys[]' comparison/maintainers.json \
            | while read -r id; do gh api /user/"$id" --jq .login; done \
            | GH_TOKEN=${{ steps.app-token.outputs.token }} result/bin/process-reviewers.sh "$REPOSITORY" "$NUMBER" "$AUTHOR" \
            > reviewers.json

          # Request reviewers from maintainers of changed output paths
          GH_TOKEN=${{ steps.app-token.outputs.token }} gh api \
            --method POST \
            /repos/"$REPOSITORY"/pulls/"$NUMBER"/requested_reviewers \
            --input reviewers.json
            | GH_TOKEN=${{ steps.app-token.outputs.token }} result/bin/request-reviewers.sh "$REPOSITORY" "$NUMBER" "$AUTHOR"

        env:
          GH_TOKEN: ${{ github.token }}
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ stdenvNoCC.mkDerivation {
    root = ./.;
    fileset = lib.fileset.unions [
      ./get-code-owners.sh
      ./process-reviewers.sh
      ./request-reviewers.sh
      ./request-code-owner-reviews.sh
      ./verify-base-branch.sh
      ./dev-branches.txt
+2 −16
Original line number Diff line number Diff line
@@ -77,20 +77,6 @@ if ! "$SCRIPT_DIR"/verify-base-branch.sh "$tmp/nixpkgs.git" "$headRef" "$baseRep
    exit 1
fi

log "Getting code owners to request reviews from"
log "Requesting reviews from code owners"
"$SCRIPT_DIR"/get-code-owners.sh "$tmp/nixpkgs.git" "$ownersFile" "$baseBranch" "$headRef" | \
    "$SCRIPT_DIR"/process-reviewers.sh "$baseRepo" "$prNumber" "$prAuthor" > "$tmp/reviewers.json"

log "Requesting reviews from: $(<"$tmp/reviewers.json")"

if ! response=$(effect gh api \
    --method POST \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$baseRepo/pulls/$prNumber/requested_reviewers" \
    --input "$tmp/reviewers.json"); then
    log "Failed to request reviews: $response"
    exit 1
fi

log "Successfully requested reviews"
    "$SCRIPT_DIR"/request-reviewers.sh "$baseRepo" "$prNumber" "$prAuthor"
+28 −3
Original line number Diff line number Diff line
#!/usr/bin/env bash

# Process reviewers for a PR, reading line-separated usernames on stdin,
# returning a JSON suitable to be consumed by the API endpoint to request reviews:
# Request reviewers for a PR, reading line-separated usernames on stdin,
# filtering for valid reviewers before using the API endpoint to request reviews:
# https://docs.github.com/en/rest/pulls/review-requests?apiVersion=2022-11-28#request-reviewers-for-a-pull-request

set -euo pipefail

tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' exit

log() {
    echo "$@" >&2
}

effect() {
    if [[ -n "${DRY_MODE:-}" ]]; then
        log "Skipping in dry mode:" "${@@Q}"
    else
        "$@"
    fi
}

if (( "$#" < 3 )); then
    log "Usage: $0 BASE_REPO PR_NUMBER PR_AUTHOR"
    exit 1
@@ -62,4 +73,18 @@ jq -n \
    --arg users "${!users[*]}" \
    '{
      reviewers: $users | split(" "),
    }'
    }' > "$tmp/reviewers.json"

log "Requesting reviews from: $(<"$reviewersFile")"

if ! response=$(effect gh api \
    --method POST \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$baseRepo/pulls/$prNumber/requested_reviewers" \
    --input "$tmp/reviewers.json"); then
    log "Failed to request reviews: $response"
    exit 1
fi

log "Successfully requested reviews"