#!/usr/bin/env python3 """Add GitHub users to their appropriate teams in nhcarrigan-spring-2026-cohort org""" import json import subprocess import time # Load team assignments and Discord to GitHub mappings with open('team_assignments.json', 'r') as f: teams = json.load(f) with open('discord_to_github.json', 'r') as f: discord_to_github = json.load(f) # Map team names to GitHub team slugs team_name_to_slug = { "Jade Jasmine": "jade-jasmine", "Crimson Dahlia": "crimson-dahlia", "Rose Camellia": "rose-camellia", "Amber Wisteria": "amber-wisteria", "Ivory Orchid": "ivory-orchid", "Teal Iris": "teal-iris", "Peach Gardenia": "peach-gardenia", "Violet Carnation": "violet-carnation", "Azure Lotus": "azure-lotus", "Coral Sunflower": "coral-sunflower", "Indigo Tulip": "indigo-tulip", "Scarlet Hydrangea": "scarlet-hydrangea", "Mint Narcissus": "mint-narcissus", "Sage Marigold": "sage-marigold" } org = "nhcarrigan-spring-2026-cohort" total_added = 0 total_skipped = 0 total_errors = 0 def add_user_to_team(username, team_slug, role="member"): """Add a user to a GitHub team""" try: # Check if user is already a member check_cmd = f"gh api orgs/{org}/teams/{team_slug}/memberships/{username} 2>/dev/null" result = subprocess.run(check_cmd, shell=True, capture_output=True, text=True) if result.returncode == 0: print(f" ✓ {username} is already in {team_slug}") return "already_member" # Add user to team add_cmd = f"gh api -X PUT orgs/{org}/teams/{team_slug}/memberships/{username} -f role={role}" result = subprocess.run(add_cmd, shell=True, capture_output=True, text=True) if result.returncode == 0: print(f" ✓ Added {username} to {team_slug} as {role}") return "added" else: print(f" ✗ Failed to add {username} to {team_slug}: {result.stderr}") return "error" except Exception as e: print(f" ✗ Error adding {username} to {team_slug}: {str(e)}") return "error" # Process each team for team_data in teams: team_name = team_data['name'] team_slug = team_name_to_slug[team_name] print(f"\n{'='*60}") print(f"Processing Team {team_data['team_id']}: {team_name}") print(f"{'='*60}") # Add leaders to leaders team leaders_team_slug = f"{team_slug}-leaders" print(f"\nAdding leaders to {leaders_team_slug}:") for discord_id in team_data['leaders']: github_username = discord_to_github.get(discord_id) if not github_username or github_username == "nhcarrigan-2025-hackathon": print(f" ⚠ Skipping Discord ID {discord_id} - Missing/invalid GitHub username") total_skipped += 1 continue result = add_user_to_team(github_username, leaders_team_slug, "member") if result == "added": total_added += 1 elif result == "error": total_errors += 1 # Rate limiting time.sleep(0.5) # Add participants to main team print(f"\nAdding participants to {team_slug}:") for discord_id in team_data['participants']: github_username = discord_to_github.get(discord_id) if not github_username or github_username == "nhcarrigan-2025-hackathon": print(f" ⚠ Skipping Discord ID {discord_id} - Missing/invalid GitHub username") total_skipped += 1 continue result = add_user_to_team(github_username, team_slug, "member") if result == "added": total_added += 1 elif result == "error": total_errors += 1 # Rate limiting time.sleep(0.5) print(f"\n{'='*60}") print(f"Summary:") print(f"- Total users added: {total_added}") print(f"- Total users skipped (missing GitHub): {total_skipped}") print(f"- Total errors: {total_errors}") print(f"{'='*60}")