Возможно ли получить последнюю версию GitHub, созданную из указанной ветки c? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть скрипт Powershell, который получает последнюю версию из репозитория с использованием Github API. Мы хотели бы создать другую версию этого скрипта, которая не получает последнюю версию, но самую последнюю, созданную мастером. Это возможно? Я взглянул на страницу API: https://developer.github.com/v3/repos/releases/#get -the-latest-release и кажется, что мы можем получить только последний или конкретный c релиз по идентификатору (который сценарий не знает) или списочные выпуски (но, по-видимому, не запросы по ним?)

Возможно использование списочных выпусков, если впоследствии я отфильтрую список по коду ... за исключением того, что вызов API возвращает мне 404 каждый раз, когда я Назовите его (несмотря на более 400 выпусков): https://api.github.com/repos/my-org/my-repo/releases. Что странно, потому что, если я попробую другое хранилище за пределами этой организации, это сработает (возвращает пустой массив).

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Если имена ваших выпусков не имеют заданного шаблона именования c, вы можете использовать поле target_commitish в ответе List Releases API :

Указывает значение commiti sh, определяющее, откуда создается тег Git. Может быть любая ветка или коммит SHA. Не используется, если тег Git уже существует. По умолчанию: ветвь хранилища по умолчанию (обычно главная).

Вы можете проверить значение target_commitish, используя следующие команды и :

curl -s "https://api.github.com/repos/facebook/create-react-app/releases?per_page=100" | \
     jq -r '.[].target_commitish'

Учитывая, что выпуски уже отсортированы по самым последним, нам просто нужно отфильтровать по target_commitish значению master:

curl -s "https://api.github.com/repos/facebook/create-react-app/releases?per_page=100" | \
     jq -r '[.[] | select(.target_commitish == "master")][0]'
0 голосов
/ 13 марта 2020

Вызов API-релизов вернул 404, потому что я забыл указать токен доступа:

https://api.github.com/repos/my-org/my-repo/releases?access_token={token}

Не представляется возможным выполнить то, что я спрашиваю через API, но я смог это сделать используя PowerShell:

$releases_url = "https://api.github.com/repos/$repo/releases"

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$releases = Invoke-RestMethod -uri "$($releases_url)?access_token=$($token)"

# Get most recent release from the list where name starts with 'master'.
$latestMasterBuild = $releases | Where { $_.name.StartsWith("master") } | Select -First 1

Поскольку в именах моих выпусков был префикс ветви, из которой они были созданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...