flake-update-20260201
1#!/usr/bin/env bash
2set -euo pipefail
3
4# auto-merge-pr - Automatically review and merge nixpkgs PRs where you're a maintainer
5# Usage: auto-merge-pr <PR_NUMBER>
6
7if [ $# -eq 0 ]; then
8 echo "Usage: auto-merge-pr <PR_NUMBER>"
9 echo ""
10 echo "Automatically reviews and merges nixpkgs PRs where you're a maintainer."
11 echo "This script will:"
12 echo " 1. Check if you're a maintainer of all touched packages"
13 echo " 2. Build the PR with nixpkgs-review"
14 echo " 3. Approve and trigger merge bot if successful"
15 exit 1
16fi
17
18PR_NUMBER="$1"
19
20echo "🔍 Fetching PR #${PR_NUMBER} details..."
21PR_FILES=$(gh pr view "$PR_NUMBER" --json files --jq '.files[].path')
22
23# Extract package names from pkgs/by-name structure
24PACKAGES=()
25for file in $PR_FILES; do
26 if [[ $file =~ pkgs/by-name/[^/]+/([^/]+)/package.nix ]]; then
27 PACKAGES+=("${BASH_REMATCH[1]}")
28 fi
29done
30
31if [ ${#PACKAGES[@]} -eq 0 ]; then
32 echo "⚠️ No packages found in pkgs/by-name/ - cannot auto-merge"
33 exit 1
34fi
35
36echo "📦 Found packages: ${PACKAGES[*]}"
37
38# Check if we're a maintainer of all packages
39GITHUB_USER=$(gh api user --jq '.login')
40echo "👤 Your GitHub username: $GITHUB_USER"
41
42ALL_MAINTAINER=true
43for pkg in "${PACKAGES[@]}"; do
44 MAINTAINERS=$(nix eval --raw ".#${pkg}.meta.maintainers" 2>/dev/null | grep -o '"github":"[^"]*"' | cut -d'"' -f4 || true)
45
46 if [[ ! $MAINTAINERS =~ $GITHUB_USER ]]; then
47 echo "❌ You are not a maintainer of $pkg"
48 ALL_MAINTAINER=false
49 else
50 echo "✅ You are a maintainer of $pkg"
51 fi
52done
53
54if [ "$ALL_MAINTAINER" = false ]; then
55 echo ""
56 echo "⚠️ You are not a maintainer of all packages in this PR."
57 echo " Cannot use merge-bot. Manual review required."
58 exit 1
59fi
60
61echo ""
62echo "🏗️ Building PR #${PR_NUMBER}..."
63if nixpkgs-review pr "$PR_NUMBER" --no-shell; then
64 echo ""
65 echo "✅ Build successful!"
66 echo ""
67 echo "📝 Approving PR and triggering merge bot..."
68
69 # Approve with merge bot comment in one go
70 gh pr review "$PR_NUMBER" --approve --body "Built successfully. All tests passed. LGTM.
71
72@NixOS/nixpkgs-merge-bot merge"
73
74 echo ""
75 echo "✅ Done! PR approved and merge bot triggered."
76 echo " Check: https://github.com/NixOS/nixpkgs/pull/${PR_NUMBER}"
77else
78 echo ""
79 echo "❌ Build failed. Please review manually."
80 exit 1
81fi