Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: verify commit signatures 🕵🏻‍♂️

on:
pull_request:
merge_group:

permissions: {}

Expand All @@ -25,5 +26,5 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
PR: ${{ github.event.pull_request.number }}
run: ./verify_commits.sh "$PR"
TARGET: ${{ github.event.pull_request.number || github.event.merge_group.head_ref }}
run: ./verify_commits.sh "$TARGET"
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# commit-verifier

Verifies that pull request commits are SSH-signed with enrolled,
hardware-backed (`sk-`, FIDO2) keys. Runs on pull requests as an organization
required workflow; the enrollment registry is [`allowed_signers`](allowed_signers).
hardware-backed (`sk-`, FIDO2) keys. Runs on pull requests and in merge queues as
an organization required workflow; the enrollment registry is
[`allowed_signers`](allowed_signers).
19 changes: 17 additions & 2 deletions verify_commits.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
#!/usr/bin/env bash
# See README.md for what this checks, how it works, and its limits.
# Usage: GH_TOKEN=... GITHUB_REPOSITORY=owner/repo verify_commits.sh <pr-number>
# Usage: GH_TOKEN=... GITHUB_REPOSITORY=owner/repo verify_commits.sh <pr-number|merge-queue-ref>
set -euo pipefail

: "${GH_TOKEN:?GH_TOKEN required}"
: "${GITHUB_REPOSITORY:?GITHUB_REPOSITORY required}"
PR_NUMBER="${1:?usage: $0 <pr-number>}"
TARGET="${1:?usage: $0 <pr-number|merge-queue-ref>}"

case "$TARGET" in
*/gh-readonly-queue/*)
PR_NUMBER="${TARGET##*/pr-}"
PR_NUMBER="${PR_NUMBER%%-*}"
;;
*)
PR_NUMBER="$TARGET"
;;
esac

if [[ ! "$PR_NUMBER" =~ ^[0-9]+$ ]]; then
echo "::error::could not resolve a pull request number from '$TARGET'"
exit 1
fi

WORKDIR="$(mktemp -d)"
trap 'rm -rf "$WORKDIR"' EXIT
Expand Down