web-dev-qa-db-ja.com

最新のGitHubリリースをダウンロードする

最新リリース(GitHub Releasesに保存)へのリンクを表す"最新バージョンのダウンロード"ボタンをWebサイトに配置したいと思います。 "latest"という名前のリリースタグを作成しようとしましたが、新しいリリースを読み込もうとすると複雑になりました(タグ作成日との混同、タグ交換、等。)。私のウェブサイトのダウンロードリンクを手動で更新することも、時間のかかる綿密な作業です。私には唯一の方法があります-すべてのダウンロードボタンをいくつかのhtmlにリダイレクトし、それが実際の最新リリースにリダイレクトします。

私のウェブサイトはGitHubPages(静的ホスティング)でホストされているので、単にサーバーサイドスクリプトを使用できませんリンクを生成することに注意してください。何か案は?

18
kefir500

Githubは、プロジェクトのリリースページに[最新リリース]ボタンを提供するようになりました最初のリリースを作成した後

あなたが与えた例では、このボタンは https://github.com/reactiveui/ReactiveUI/releases/latest にリンクしています

16
dod

最新リリースのダウンロードリンクを生成するためのスクリプトは必要ありません。この形式を使用するだけです。

https://github.com/:owner/:repo/zipball/:branch

例:

https://github.com/webix-hub/tracker/zipball/master
https://github.com/iDoRecall/selection-menu/zipball/gh-pages

何らかの理由で、バージョン番号を含む最新リリースのダウンロードへのリンクを取得したい場合は、 最新リリースAPIを取得 から取得できます。

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>
10
Dan Dascalescu

2015年2月18日 なので、 GitHUb V3リリースAPI には 最新リリースAPIを取得 があります。

GET /repos/:owner/:repo/releases/latest
3
VonC

次の場所で使用できます。

  • $ {Organization} GitHubユーザーまたは組織として
  • $ {Repository}はリポジトリ名です

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

2
Casey

たぶん、クライアント側のスクリプトを使用して、JQueryの魔法を使ってGitHub APIを呼び出すことで、リンクのターゲットを動的に生成できますか?

Releases APIは、リポジトリからすべてのリリースのリストを取得する方法を公開します。たとえば、このリンクは、すべてのReactiveUIプロジェクトのリリース

最初のものを抽出すると、最新のリリースが返されます。

このペイロード内:

  • html_url属性は、ビルドするURLの最初の部分(つまり、https://github.com/{owner}/{repository}/releases/{version})を保持します。

  • assets配列は、ダウンロード可能なアーカイブのリストになります。各assetにはname属性があります

ターゲットのダウンロードURLを作成するのは、ほんの数文字列操作です。

  • Html_urlのdownload/セグメントとバージョン番号の間にreleases/キーワードを挿入します
  • ダウンロードするアセットの名前を追加します

結果の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"を持つ1つのアセットがあります。

そのため、ダウンロードURLは https://github.com/reactiveui/ReactiveUI/releases/download/5.99.0/ReactiveUI.6.0.Preview.1.Zip です。

2
nulltoken

ここでは答えがわかりませんでしたが、継続的インテグレーションテストを実行しているときに非常に役立ちました。カールが必要なだけのこのワンライナーを使用すると、Githubリポジトリのリリースを検索して最新バージョンをダウンロードできます。

https://Gist.github.com/steinwaywhw/a4cd19cda655b8249d908261a62687f8

次のスクリプトを使用して、リポジトリでPHPSTanを実行するために使用します

https://Gist.github.com/rvanlaak/7491f2c4f0c456a93f90e31774300b62

1
Rvanlaak

PHPを使用している場合は、次のコードを試してください。

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>';
0
OzzyCzech

受け入れられた回答へのコメントで@DanDascalescuが指摘したように、正式なリリースを提出することを気にしないプロジェクト(約30%)がいくつかあるため、「最新リリース」ボタンも/ releases /最新のAPI呼び出しも有用なデータを返しません。

GitHubプロジェクトの最新リリースを確実にフェッチするには、 lastversion を使用できます。

0