Я обычно получаю релизы / теги из 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 команда, но без помощи
?after=v2.16.1
curl -sL https://api.github.com/repos/${repo}/tags?after=v2.16.1 |jq -r ".[].name"
Я получил тот же вывод.
Ссылка : https://developer.github.com/v3/git/tags/
С помощью @ Von C я получил результат с дополнительной строкой запроса ?page=2, если бы я хотел запросить более старые выпуски и т. Д.
?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
Это может быть из-за разбиения на страницы
См. Этот скрипт в качестве примера обнаружения страниц и добавления необходимого ?page=x для доступа ко всем данным из вызова API GitHub.
?page=x
Соответствующая выдержка:
# 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