我尝试创建一个名为"latest"的发布标签,但当我尝试加载新的发布版本时变得复杂(与标签创建日期混淆、标签互换等)。手动更新我的网站上的下载链接也是一项耗时且繁琐的任务。
请注意,我的网站是静态托管的,所以我无法使用服务器端脚本来生成链接。有什么好的建议吗?
你不需要任何脚本来生成最新版本的下载链接。只需使用以下格式:
https://github.com/:owner/:repo/zipball/:branch
示例:
https://github.com/webix-hub/tracker/zipball/master
https://github.com/iDoRecall/selection-menu/zipball/gh-pages
GET /repos/:owner/:repo/releases/latest
示例:
$.get('https://api.github.com/repos/idorecall/selection-menu/releases/latest', function (data) {
$('#result').attr('href', data.zipball_url);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="result">Download latest release (.ZIP)</a>
现在GitHub在项目发布页面提供了一个“最新版本”按钮,这个按钮会在你创建了第一个发布版之后出现。
例如,在你提供的这个示例中,该按钮链接到https://github.com/reactiveui/ReactiveUI/releases/latest。
自2015年2月18日起,GitHub V3发布API已经有了获取最新发布API。
GET /repos/:owner/:repo/releases/latest
另请参阅 "链接到发布版".
curl -IkLs -o NUL -w %{url_effective} \
https://github.com/git-for-windows/git/releases/latest|\
grep -o "[^/]*$"| sed "s/v//g"|\
xargs -I T echo \
https://github.com/git-for-windows/git/releases/download/vT/PortableGit-T-64-bit.7z.exe \
-o PortableGit-T-64-bit.7z.exe| \
sed "s/.windows.1-64/-64/g"|sed "s/.windows.\(.\)-64/.\1-64/g"|\
xargs curl -kL
2.35.1.windows.2
https://github.com/git-for-windows/git/releases/download/
v2.35.1.windows.2/PortableGit-2.35.1.2-64-bit.7z.exe
^^^^^^^^^^^^^^^^^ ^^^^^^^^^
如果您正在尝试从任何Linux(即使是旧版本或小版本)下载文件,或者正在尝试从bash脚本中下载文件,则最可靠的方法是使用以下命令:
wget https://api.github.com/repos/$OWNER/$REPO/releases/latest -O - | awk -F \" -v RS="," '/browser_download_url/ {print $(NF-1)}' | xargs wget
URL=$(wget https://api.github.com/repos/$OWNER/$REPO/releases/latest -O - | awk -F \" -v RS="," '/browser_download_url/ {print $(NF-1)}'); wget $URL -O $(basename "$URL")
curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball > ${Repository}.tar.gz
.tar.gz文件中的顶级目录具有目录名称中的提交sha哈希值,如果您需要自动更改为结果目录并执行某些操作,则可能会出现问题。
以下方法将剥离此内容,并将文件留在具有可预测名称的文件夹中。
mkdir ${Repository}
curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball | tar -zxv -C ${Repository} --strip-components=1
download/
关键字生成的URL将采用以下格式:https://github.com/{owner}/{repository}/releases/download/{version}/name_of_asset
例如,针对上面的ReactiveUI链接中的Json负载,我们有html_url: "https://github.com/reactiveui/ReactiveUI/releases/5.99.0"
和一个名为name: "ReactiveUI.6.0.Preview.1.zip"
的资产。
因此,下载链接是https://github.com/reactiveui/ReactiveUI/releases/download/5.99.0/ReactiveUI.6.0.Preview.1.zip
<noscript>
标签会带回臃肿的问题)。 - kefir500由于我没有在这里看到答案,但是在运行持续集成测试时对我非常有帮助,这个只需要你拥有curl的一行命令将允许搜索Github存储库的发布版本以下载最新版本。
https://gist.github.com/steinwaywhw/a4cd19cda655b8249d908261a62687f8
我使用以下脚本来在我们的代码库上运行PHPSTan:https://gist.github.com/rvanlaak/7491f2c4f0c456a93f90e31774300b62
function getLatestTagUrl($repository, $default = 'master') {
$file = @json_decode(@file_get_contents("https://api.github.com/repos/$repository/tags", false,
stream_context_create(['http' => ['header' => "User-Agent: Vestibulum\r\n"]])
));
return sprintf("https://github.com/$repository/archive/%s.zip", $file ? reset($file)->name : $default);
}
echo '<a href="' .getLatestTagUrl('OzzyCzech/vestibulum') .'">Download</a>';
正如@Dan Dascalescu 在接受答案的评论中指出的那样,有些项目(大约30%)不会费心提交正式发布,因此“最新版本”按钮和/ releases / latest API 调用都无法返回有用的数据。
为了可靠地获取GitHub项目的最新版本,您可以使用 lastversion。
zipball
替换为tarball
。 - scribblemaniacjquery
和webix-hub
并没有发布版本,而是有标签,并且最新的发布API与标签不兼容。完整的发布看起来像是这样的 this,如果您想要列出git标签,可以使用https://developer.github.com/v3/repos/#list-tags。 - Dan Dascalescu