From ad1edae35f6b2b414b4bce4a4ba982867521d126 Mon Sep 17 00:00:00 2001 From: Nicholas Gates Date: Fri, 27 Feb 2026 22:11:37 -0500 Subject: [PATCH] Assert proposal number Signed-off-by: Nicholas Gates --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5927c34..0962d00 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,5 +22,35 @@ jobs: - name: Install dependencies run: bun install + - name: Check proposal matches PR number + run: | + BASE_SHA="${{ github.event.pull_request.base.sha }}" + HEAD_SHA="${{ github.event.pull_request.head.sha }}" + PR_NUMBER="${{ github.event.pull_request.number }}" + + CHANGED_PROPOSALS=$(git diff --name-only "$BASE_SHA" "$HEAD_SHA" -- 'proposals/' \ + | grep -v '^proposals/0000-template\.md$' || true) + + COUNT=$(echo "$CHANGED_PROPOSALS" | grep -c . || true) + + if [ "$COUNT" -gt 1 ]; then + echo "::error::PR touches $COUNT proposals. Only one proposal per PR is allowed." + echo "$CHANGED_PROPOSALS" + exit 1 + fi + + if [ "$COUNT" -eq 1 ]; then + FILE=$(echo "$CHANGED_PROPOSALS" | head -1) + FILENAME=$(basename "$FILE") + FILE_NUMBER=$(echo "$FILENAME" | grep -oE '^[0-9]+' || true) + # Strip leading zeros for comparison + FILE_NUM=$((10#$FILE_NUMBER)) + + if [ "$FILE_NUM" -ne "$PR_NUMBER" ]; then + echo "::error::Proposal number ($FILE_NUM from $FILENAME) does not match PR number ($PR_NUMBER)." + exit 1 + fi + fi + - name: Build run: bun run build