Как добавить вебхук во все репозитории GitHub: методы и примеры кода

Чтобы добавить вебхук во все репозитории GitHub, вы можете использовать различные методы и API, предоставляемые GitHub. Вот несколько подходов с примерами кода:

  1. API GitHub с токеном личного доступа (PAT):

    import requests
    token = "YOUR_PERSONAL_ACCESS_TOKEN"
    # Get a list of repositories
    headers = {"Authorization": f"Bearer {token}"}
    response = requests.get("https://api.github.com/user/repos", headers=headers)
    repos = response.json()
    # Add webhook to each repository
    webhook_url = "https://example.com/webhook"  # Replace with your webhook URL
    for repo in repos:
    repo_name = repo["full_name"]
    webhook_data = {
        "name": "web",
        "active": True,
        "events": ["push"],
        "config": {
            "url": webhook_url,
            "content_type": "json"
        }
    }
    response = requests.post(f"https://api.github.com/repos/{repo_name}/hooks", headers=headers, json=webhook_data)
    if response.status_code == 201:
        print(f"Webhook added to {repo_name}")
    else:
        print(f"Failed to add webhook to {repo_name}")
  2. GitHub CLI (интерфейс командной строки):
    установите GitHub CLI и выполните аутентификацию с помощью своей учетной записи GitHub.

    gh auth login

Используйте следующую команду, чтобы добавить вебхук во все репозитории:

gh api /user/repos --jq '.[].full_name' | xargs -I {} gh api repos/{}/hooks -X POST -F name=web -F active=true -F events[]=push -F config.url=https://example.com/webhook
  1. Вебхуки организации GitHub.
    Если у вас есть организация и вы хотите добавить вебхуки во все репозитории внутри организации, вы можете использовать API вебхуков организации GitHub. Вот пример использования GitHub API с PAT:
    import requests
    token = "YOUR_PERSONAL_ACCESS_TOKEN"
    organization = "YOUR_ORGANIZATION_NAME"
    webhook_url = "https://example.com/webhook"  # Replace with your webhook URL
    # Get a list of repositories within the organization
    headers = {"Authorization": f"Bearer {token}"}
    response = requests.get(f"https://api.github.com/orgs/{organization}/repos", headers=headers)
    repos = response.json()
    # Add webhook to each repository
    for repo in repos:
    repo_name = repo["name"]
    webhook_data = {
        "name": "web",
        "active": True,
        "events": ["push"],
        "config": {
            "url": webhook_url,
            "content_type": "json"
        }
    }
    response = requests.post(f"https://api.github.com/repos/{organization}/{repo_name}/hooks", headers=headers, json=webhook_data)
    if response.status_code == 201:
        print(f"Webhook added to {repo_name}")
    else:
        print(f"Failed to add webhook to {repo_name}")