diff --git a/.github/workflows/validate-maintainers.yml b/.github/workflows/validate-maintainers.yml index 71f7ff39..a4564ace 100644 --- a/.github/workflows/validate-maintainers.yml +++ b/.github/workflows/validate-maintainers.yml @@ -72,6 +72,49 @@ jobs: print('✅ All maintainer entries are valid') print(f'✅ Validated {len(maintainers)} maintainer entries') " + - name: Check for duplicate maintainers + run: | + echo "🔍 Checking for duplicate maintainers between HM and nixpkgs..." + python3 -c " + import json + import subprocess + import sys + + 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']) + + 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']) + + 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') + " - name: Test generation if: inputs.run_tests == true run: |