From a1b3934a78a57b0fbd99fc951c53f8c875abbb3c Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 21 Aug 2025 13:41:18 +0200 Subject: [PATCH] maintainers: Add script for release notes todo list --- maintainers/release-notes-todo | 58 ++++++++++++++++++++++++++++++++++ maintainers/release-process.md | 6 ++++ 2 files changed, 64 insertions(+) create mode 100755 maintainers/release-notes-todo diff --git a/maintainers/release-notes-todo b/maintainers/release-notes-todo new file mode 100755 index 00000000000..7cadc2a79e2 --- /dev/null +++ b/maintainers/release-notes-todo @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -euo pipefail +# debug: +# set -x + +START_REF="${1}" +END_REF="${2:-upstream/master}" + +# Get the merge base +MERGE_BASE=$(git merge-base "$START_REF" "$END_REF") +unset START_REF + +# Get date range +START_DATE=$(git show -s --format=%cI "$MERGE_BASE") +END_DATE=$(git show -s --format=%cI "$END_REF") + +echo "Checking PRs merged between $START_DATE and $END_DATE" >&2 + +# Get all commits between merge base and HEAD +COMMITS=$(git rev-list "$MERGE_BASE..$END_REF") + +# Convert to set for fast lookup +declare -A commit_set +for commit in $COMMITS; do + commit_set["$commit"]=1 +done + +# Get the current changelog +LOG_DONE="$(changelog-d doc/manual/rl-next)" +is_done(){ + local nr="$1" + echo "$LOG_DONE" | grep -E "^- .*/pull/$nr)" +} + +# Query merged PRs in date range +gh pr list \ + --repo NixOS/nix \ + --state merged \ + --limit 1000 \ + --json number,title,author,mergeCommit \ + --search "merged:$START_DATE..$END_DATE" | \ +jq -r '.[] | [.number, .mergeCommit.oid, .title, .author.login] | @tsv' | \ +while IFS=$'\t' read -r pr_num merge_commit _title author; do + # Check if this PR's merge commit is in our branch + if [[ -n "${commit_set[$merge_commit]:-}" ]]; then + # Full detail, not suitable for comment due to mass ping and duplicate title + # echo "- #$pr_num $_title (@$author)" + echo "- #$pr_num ($author)" + if is_done "$pr_num" + then + echo " - [x] has note" + else + echo " - [ ] has note" + fi + echo " - [ ] skip" + fi +done diff --git a/maintainers/release-process.md b/maintainers/release-process.md index 37b38fb9f7a..68b7d8e0022 100644 --- a/maintainers/release-process.md +++ b/maintainers/release-process.md @@ -24,6 +24,12 @@ release: * In a checkout of the Nix repo, make sure you're on `master` and run `git pull`. +* Compile a release notes to-do list by running + + ```console + $ ./maintainers/release-notes-todo PREV_RELEASE HEAD + ``` + * Compile the release notes by running ```console