Как вывести список частных репозиториев организации через GitHub API?

Я пытаюсь получить список всех репозиториев организации, включая частные. (Или, если быть более точным, все частные репозитории, к которым у определенного пользователя есть доступ.)

Запрос информации для организации (https://api.github.com/orgs/acme?access_token=[...]) показывает, что действительно существует множество частных репозиториев:

...
"public_repos": 5,
"total_private_repos": 68, 
"owned_private_repos": 68, 
...

(Используемый мной токен был ранее сгенерирован с использованием API для имени пользователя / пароля.)

Но все, что я пытаюсь перечислить репо...

https://api.github.com/orgs/acme/repos&access_token=[...]   

... GitHub API просто возвращает 5 общедоступных репозиториев. ( Документация говорит type=all по умолчанию. Также попытался добавить параметр type=private; нет разницы.)

Есть идеи, что я делаю не так?

Пользователь, для которого фактически был сгенерирован токен доступа, имеет доступ Push & Pull только к некоторым частным репозиториям организации, но ни один из них не появляется в списке, который я получаю (только 5 общедоступных репозиториев).

9 ответов

Решение

Все, что вы делаете, в порядке. Однако при создании токенов OAuth для аутентификации убедитесь, что вы определяете правильные области. Каждая область определяет определенный набор разрешенных действий (информацию, которую вы можете читать / записывать), поэтому вы должны проверить, что вы создаете токен с помощью repo объем.

Ваш URL нужен? не & &. Должно быть так:

https://api.github.com/orgs/acme/repos?access_token=your_access_token

Следует также отметить, что если вы обращаетесь к частным репозиториям из Организации, владельцы приложения OAuth должны авторизоваться в зависимости от настроек.

https://help.github.com/articles/authorizing-oauth-apps/

Для организаций с ограничениями доступа к приложению OAuth вы можете попросить администраторов организации одобрить приложение для использования в этой организации. Если организация не одобрит приложение, приложение сможет получить доступ только к общедоступным ресурсам организации. Если вы являетесь администратором организации, вы можете одобрить заявку самостоятельно.

Для организаций без ограничений доступа к приложению OAuth приложение автоматически авторизуется для доступа к ресурсам этой организации. По этой причине вам следует внимательно следить за тем, какие приложения OAuth вы одобряете для доступа к ресурсам вашей личной учетной записи, а также к ресурсам организации.

username = "Your_org"
token = "your_TOKEN"
request = requests.get('https://api.github.com/orgs/'+username+'/repos?per_page=1000', auth=(username, token))

Недавно у меня были те же симптомы, но причина была другой. Я зарегистрировал приложение GitHub, а не приложение OAuth, не осознавая разницы. Чтобы приложение GitHub отображало частные репозитории организации, приложение должно быть установлено для этой организации, а также должно быть авторизовано пользователем. В противном случае вы просто получите список общедоступных репозиториев.

Вы можете использовать команду gh https://cli.github.com/

gh repo list <org name> -L <total number of repos> --json sshUrl -q .[].sshUrl

Чтобы увидеть список полей json, запустите gh repo list --json help. Если вы хотите видеть только общедоступные или частные репозитории, вы можете использовать эти флаги.

      FLAGS
      --archived          Show only archived repositories
      --no-archived       Omit archived repositories
      --private           Show only private repositories
      --public            Show only public repositories
      # Get Github Repo Names

"""
>>>> pip install PyGithub
>>>> Reference Link: https://pypi.org/project/PyGithub/
>>>> Getting the access token.
        Go to github <settings>.
        Go to <Developer Settings>.
        Go to <Personal access tokens>.
        Click on <Generate new token> button.
        Add a note.
        Check all the setting in that page.
        Click on <Generate token> button.
        Copy  the access token and paste in below code.

>>>>
>>>>
>>>>
>>>>
"""

from github import Github

access_token = ''
g = Github(access_token)
repo_list = [i for i in g.get_user().get_repos()]
for i in repo_list:
    repo_name = str(i).replace('Repository(full_name="', '')
    repo_name = str(repo_name).replace('")', '')
    print('https://www.github.com/' + repo_name)

Ответ 2022 года:

      ## List all repos ( private, internal, public )

curl "https://api.github.com/orgs/foobar-org/repos" \
     -u 'username:<personal access token>'

Ссылка на GitHub API здесь .

Ответ 2023 года с использованием последней версии GitHub CLI gh2.28.0:

      gh repo list --json visibility,name --jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'

PR 7337 добавляетvisibilityПоле JSON.

В несколько строк для удобства чтения:

      gh repo list --json visibility,name \
   --jq 'group_by(.visibility) | .[] | "\(.[0].visibility | ascii_upcase):", (.[] | .name), ""'

The jqфильтр включает в себя:

  • group_by(.visibility): группирует репозитории по свойству видимости (включая общедоступные, частные и внутренние).
  • .[]: перебирает каждую группу.
  • "\(.[0].visibility | ascii_upcase):": выводит значение видимости в верхнем регистре, за которым следует двоеточие.
  • (.[] | .name): выводит имя каждого репозитория в группе.
  • "": выводит пустую строку после каждой группы.

Эта команда выведет результат в виде обычного текстового списка с пустой строкой между каждой группой, например:

      PUBLIC:
repo1
repo2

PRIVATE:
repo3
repo4

INTERNAL:
repo5
Другие вопросы по тегам