flake-update-20260505
 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