Как получить все теги из GitHub API - PullRequest
1 голос
/ 23 апреля 2020

Я обычно получаю релизы / теги из github API с помощью следующей команды

$ repo="helm/helm"
$ curl -sL https://api.github.com/repos/${repo}/tags |jq -r ".[].name"

v3.2.0-rc.1
v3.2.0
v3.1.3
v3.1.2
v3.1.1
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc.1
v3.1.0
v3.0.3
v3.0.2
v3.0.1
v3.0.0-rc.4
v3.0.0-rc.3
v3.0.0-rc.2
v3.0.0-rc.1
v3.0.0-beta.5
v3.0.0-beta.4
v3.0.0-beta.3
v3.0.0-beta.2
v3.0.0-beta.1
v3.0.0-alpha.2
v3.0.0-alpha.1
v3.0.0
v2.16.6
v2.16.5
v2.16.4
v2.16.3
v2.16.2
v2.16.1

Но на самом деле, она не перечисляет все релизы, что мне делать?

Например Я не могу получить релиз до v2.16.1, как показано ниже: ссылка

https://github.com/helm/helm/tags?after=v2.16.1

Я пытаюсь ссылаться на тот же способ добавить ?after=v2.16.1 в curl api команда, но без помощи

curl -sL https://api.github.com/repos/${repo}/tags?after=v2.16.1 |jq -r ".[].name"

Я получил тот же вывод.

Ссылка : https://developer.github.com/v3/git/tags/

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

С помощью @ Von C я получил результат с дополнительной строкой запроса ?page=2, если бы я хотел запросить более старые выпуски и т. Д.

curl -sL https://api.github.com/repos/${repo}/tags?page=2 |jq -r ".[].name"

Я могу легко получить последняя страница сейчас.

$ GITHUB_API_REST="/repos/helm/helm/tags"
$ GITHUB_API_HEADER_ACCEPT="Accept: application/vnd.github.v3+json"
$ GITHUB_TOKEN=xxxxxxxx
$ last_page=`curl -s -I "https://api.github.com${GITHUB_API_REST}" -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:' | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`
$ echo $last_page
4
1 голос
/ 23 апреля 2020

Это может быть из-за разбиения на страницы

См. Этот скрипт в качестве примера обнаружения страниц и добавления необходимого ?page=x для доступа ко всем данным из вызова API GitHub.

Соответствующая выдержка:

# single page result-s (no pagination), have no Link: section, the grep result is empty                                                                                                                                                                  
last_page=`curl -s -I "https://api.github.com${GITHUB_API_REST}" -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:' | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`

# does this result use pagination?                                                                                                                                                                                                                       
if [ -z "$last_page" ]; then
    # no - this result has only one page                                                                                                                                                                                                                 
    rest_call "https://api.github.com${GITHUB_API_REST}"
else
    # yes - this result is on multiple pages                                                                                                                                                                                                             
    for p in `seq 1 $last_page`; do
        rest_call "https://api.github.com${GITHUB_API_REST}?page=$p"
    done
fi
...