Add ruff to the tree formatter so Python sources are kept consistently formatted by 'nix fmt' and the CI format check. Test fixtures under tests/modules are excluded since some are intentionally invalid Python. Reformats the existing lib/python and tests scripts accordingly.
85 lines
2.6 KiB
Python
Executable File
85 lines
2.6 KiB
Python
Executable File
#! /usr/bin/env nix-shell
|
|
#! nix-shell -i python3 -p python3
|
|
"""
|
|
Check for duplicate maintainers between home-manager and nixpkgs
|
|
|
|
This script compares the maintainers in home-manager with those in nixpkgs
|
|
to identify duplicates that should be removed from home-manager.
|
|
"""
|
|
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def main():
|
|
print("🔍 Checking for duplicate maintainers between HM and nixpkgs...")
|
|
|
|
# Get home-manager maintainers
|
|
hm_result = subprocess.run(
|
|
["nix", "eval", "--file", "modules/lib/maintainers.nix", "--json"],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True,
|
|
)
|
|
hm_maintainers = json.loads(hm_result.stdout)
|
|
hm_github_users = set()
|
|
for name, data in hm_maintainers.items():
|
|
if "github" in data:
|
|
hm_github_users.add(data["github"])
|
|
|
|
# Read nixpkgs revision from flake.lock to ensure consistency between local and CI
|
|
flake_lock_path = Path("flake.lock")
|
|
with open(flake_lock_path, "r") as f:
|
|
flake_lock = json.load(f)
|
|
nixpkgs_rev = flake_lock["nodes"]["nixpkgs"]["locked"]["rev"]
|
|
|
|
print(f"📌 Using nixpkgs from flake.lock: {nixpkgs_rev[:7]}")
|
|
|
|
# Get nixpkgs maintainers from the locked revision
|
|
nixpkgs_result = subprocess.run(
|
|
[
|
|
"nix",
|
|
"eval",
|
|
f"github:NixOS/nixpkgs/{nixpkgs_rev}#lib.maintainers",
|
|
"--json",
|
|
],
|
|
capture_output=True,
|
|
text=True,
|
|
check=True,
|
|
)
|
|
nixpkgs_maintainers = json.loads(nixpkgs_result.stdout)
|
|
nixpkgs_github_users = set()
|
|
for name, data in nixpkgs_maintainers.items():
|
|
if isinstance(data, dict) and "github" in data:
|
|
nixpkgs_github_users.add(data["github"])
|
|
|
|
# Find duplicates
|
|
duplicates = hm_github_users.intersection(nixpkgs_github_users)
|
|
|
|
if duplicates:
|
|
print(
|
|
f"❌ Found {len(duplicates)} duplicate maintainers between HM and nixpkgs:"
|
|
)
|
|
for github_user in sorted(duplicates):
|
|
# Find the HM attribute name for this github user
|
|
hm_attr = None
|
|
for attr_name, data in hm_maintainers.items():
|
|
if data.get("github") == github_user:
|
|
hm_attr = attr_name
|
|
break
|
|
print(f" - {github_user} (HM attribute: {hm_attr})")
|
|
print()
|
|
print(
|
|
"These maintainers should be removed from HM maintainers file to avoid duplication."
|
|
)
|
|
print("They can be referenced directly from nixpkgs instead.")
|
|
sys.exit(1)
|
|
else:
|
|
print("✅ No duplicate maintainers found")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|