我有一个Powershell脚本,该脚本使用Github API从存储库获取最新版本。我们想为此脚本创建一个不同的版本,该版本不会获得最新版本,而是从master创建的最新版本。这可能吗?我看了一下API页面:https://developer.github.com/v3/repos/releases/#get-the-latest-release,看来我们只能获取最新信息,或者只能按ID获取特定版本(脚本不知道),也不能列出列表(但显然不能由他们查询?)
使用列表发行版是可能的,如果我此后通过代码过滤列表...除外,每次调用它时,API调用都会为我返回404(尽管有400多个发行版): https://api.github.com/repos/my-org/my-repo/releases。 这很奇怪,因为如果我在该组织之外尝试其他回购协议,它将起作用(返回一个空数组)。
答案 0 :(得分:1)
如果发布的名称没有特定的命名模式,则可以在List Releases API的响应中使用target_commitish
字段:
指定确定Git标签在哪里的提交值 创建于。可以是任何分支或提交SHA。如果Git标签未使用 已经存在。默认:存储库的默认分支(通常是 大师)。
您可以使用以下curl和jq命令检查target_commitish
的值:
curl -s "https://api.github.com/repos/facebook/create-react-app/releases?per_page=100" | \
jq -r '.[].target_commitish'
鉴于发布已经按照最新的优先顺序进行了排序,我们只需要使用master的target_commitish
值进行过滤:
curl -s "https://api.github.com/repos/facebook/create-react-app/releases?per_page=100" | \
jq -r '[.[] | select(.target_commitish == "master")][0]'
答案 1 :(得分:0)
Release 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
由于我的发行名称之前带有创建它们的分支。