是否可以从特定分支机构构建最新的GitHub版本?

时间:2020-03-12 21:43:40

标签: powershell github-api

我有一个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。 这很奇怪,因为如果我在该组织之外尝试其他回购协议,它将起作用(返回一个空数组)。

2 个答案:

答案 0 :(得分:1)

如果发布的名称没有特定的命名模式,则可以在List Releases API的响应中使用target_commitish字段:

指定确定Git标签在哪里的提交值 创建于。可以是任何分支或提交SHA。如果Git标签未使用 已经存在。默认:存储库的默认分支(通常是 大师)。

您可以使用以下命令检查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

由于我的发行名称之前带有创建它们的分支。