diff --git a/uses/invite_collaborators.py b/uses/invite_collaborators.py new file mode 100644 index 0000000..1965673 --- /dev/null +++ b/uses/invite_collaborators.py @@ -0,0 +1,65 @@ +""" +Invite Collaborators to a Repository + +This script invites multiple GitHub users as collaborators to a repository +with the specified permission level. Useful for onboarding new team members +or contributors to a project. + +Usage: +1. Set your Personal Access Token (PAT) with 'repo' and 'admin' scope permissions +2. Configure the repository owner, repository name, collaborator usernames, and permission level +3. Run the script: python invite_collaborators.py + +Permission levels: +- pull: Read-only access to code +- push: Read-write access to code +- admin: Full repository access including settings +- maintain: Read-write access + some repository settings (manages repository without admin) +- triage: Read-only access + manage issues and pull requests + +Requirements: +- requests library: pip install requests +""" + +import requests + +# Configuration - Replace these values with your own +TOKEN = "YOUR_PAT" # Personal Access Token with 'repo' and 'admin' scopes +OWNER = "your-username" # GitHub username or organization name +REPO = "your-repo" # Repository name +USERNAMES = ["user1", "user2", "user3"] # List of GitHub usernames to invite +PERMISSION = "push" # Permission level to grant (pull, push, admin, maintain, triage) + +# Set up request headers with authentication +headers = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/vnd.github+json"} + +# Track invitation results +successful = [] +failed = [] + +# Invite each user as a collaborator +for username in USERNAMES: + url = f"https://api.github.com/repos/{OWNER}/{REPO}/collaborators/{username}" + payload = {"permission": PERMISSION} + + # Send the request to add the collaborator + response = requests.put(url, headers=headers, json=payload) + + # Status code 201: invitation created + # Status code 204: user was already a collaborator + if response.status_code == 201: + print(f"Invited {username} to {REPO} with {PERMISSION} permission") + successful.append(username) + elif response.status_code == 204: + print(f"{username} is already a collaborator on {REPO}") + successful.append(username) + else: + print(f"Failed to invite {username}: {response.status_code}") + print(response.json().get("message", "No error message provided")) + failed.append(username) + +# Summary +print("\nSummary:") +print(f"Successfully processed {len(successful)} user(s): {', '.join(successful)}") +if failed: + print(f"Failed to process {len(failed)} user(s): {', '.join(failed)}")