1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00

ci: move validate maintainers logic to lib

Allow easily running the individual checks outside of GHA for easier
testing/modification.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
Austin Horstman 2025-07-17 14:35:13 -05:00
parent bc9f3c8413
commit defabc11ab
4 changed files with 131 additions and 88 deletions

View file

@ -0,0 +1,57 @@
#!/usr/bin/env 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
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'])
# Get nixpkgs maintainers
nixpkgs_result = subprocess.run(['nix', 'eval', 'nixpkgs#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()

View file

@ -0,0 +1,46 @@
#!/usr/bin/env python3
"""
Validate maintainer entries in modules/lib/maintainers.nix
This script validates that all maintainer entries have required fields
and that the data types are correct.
"""
import json
import subprocess
import sys
def main():
print("🔍 Validating maintainer entries...")
result = subprocess.run(['nix', 'eval', '--file', 'modules/lib/maintainers.nix', '--json'],
capture_output=True, text=True, check=True)
maintainers = json.loads(result.stdout)
errors = []
for name, data in maintainers.items():
if 'github' not in data:
errors.append(f'{name}: Missing required field "github"')
if 'githubId' not in data:
errors.append(f'{name}: Missing required field "githubId"')
if 'githubId' in data:
github_id = data['githubId']
if not isinstance(github_id, int):
errors.append(f'{name}: githubId must be a number, not a string: {github_id} (type: {type(github_id).__name__})')
elif github_id <= 0:
errors.append(f'{name}: githubId must be positive: {github_id}')
if errors:
print('❌ Validation errors found:')
for error in errors:
print(f' - {error}')
sys.exit(1)
else:
print('✅ All maintainer entries are valid')
print(f'✅ Validated {len(maintainers)} maintainer entries')
if __name__ == "__main__":
main()

View file

@ -0,0 +1,25 @@
#!/usr/bin/env python3
"""
Validate maintainers.nix syntax
This script validates that the maintainers.nix file has valid Nix syntax.
"""
import subprocess
import sys
def main():
print("🔍 Validating maintainers.nix syntax...")
try:
subprocess.run(['nix', 'eval', '--file', 'modules/lib/maintainers.nix', '--json'],
capture_output=True, text=True, check=True)
print("✅ Valid Nix syntax")
except subprocess.CalledProcessError:
print("❌ Invalid Nix syntax")
sys.exit(1)
if __name__ == "__main__":
main()