web-dev-qa-db-ja.com

リポジトリの最新リリースでファイルをダウンロードするためのGitHubへのリンクはありますか?

GitHubのリリース機能 を使用すると、公開されたソフトウェアの特定のバージョンをダウンロードするためのリンクを提供できます。ただし、リリースが行われるたびに、ghページも更新する必要があります。

ソフトウェアの最新バージョンが何であれ、特定のファイルへのリンクを取得する方法はありますか?

たとえば、これは静的リンクになります。

https://github.com/USER/PROJECT/releases/download/v0.0.0/package.Zip

私が望むのは次のようなものです:

https://github.com/USER/PROJECT/releases/download/latest/package.Zip

注:この質問と GitHub最新リリース の違いは、この質問はGitHub最新リリースページではなく、ファイルへのアクセスを取得することを明確に要求することです。

118

Githubは、最新リリースから個々のファイルをダウンロードするための静的リンクをサポートするようになりました: https://help.github.com/en/articles/linking-to-releases

https://github.com/USER/PROJECT/releases/latest/download/package.Zip
2
Kaloyan Raev

最新のリリースアセットのダウンロードリンクを取得するLinuxソリューション(リリースにアセットが1つしかない場合のみ機能します)

curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d '"' -f 4
57
Putna

GitHub Releases API を使用して、 ajax リクエストを実行して最新リリースのダウンロードURLを取得できます。また、リリース日とダウンロード数も表示されます。

function GetLatestReleaseInfo() {
  $.getJSON("https://api.github.com/repos/ShareX/ShareX/releases/latest").done(function(release) {
    var asset = release.assets[0];
    var downloadCount = 0;
    for (var i = 0; i < release.assets.length; i++) {
      downloadCount += release.assets[i].download_count;
    }
    var oneHour = 60 * 60 * 1000;
    var oneDay = 24 * oneHour;
    var dateDiff = new Date() - new Date(asset.updated_at);
    var timeAgo;
    if (dateDiff < oneDay) {
      timeAgo = (dateDiff / oneHour).toFixed(1) + " hours ago";
    } else {
      timeAgo = (dateDiff / oneDay).toFixed(1) + " days ago";
    }
    var releaseInfo = release.name + " was updated " + timeAgo + " and downloaded " + downloadCount.toLocaleString() + " times.";
    $(".download").attr("href", asset.browser_download_url);
    $(".release-info").text(releaseInfo);
    $(".release-info").fadeIn("slow");
  });
}

GetLatestReleaseInfo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="download" href="https://github.com/ShareX/ShareX/releases/latest">Download</a>
<p class="release-info"></p>

デフォルトのボタンURLをリリースページに設定することが重要です( https://github.com/ShareX/ShareX/releases/latest など)。ブラウザがajaxをサポートしていない場合(またはjavascript)またはURLを取得するには遅すぎる場合でも、ダウンロードボタンは機能します。

Ajaxリクエストが完了すると、このボタンのURLは直接ダウンロードURLに自動的に変更されます。

編集:

また、ここにある複数のリリースを示すダウンロードページを作成しました。 https://getsharex.com/downloads/

ソースコード: https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js

29
Jaex

curlおよびjqを使用してコマンドラインから、latestリリースのfirstファイルを取得します。

curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | \
  jq --raw-output '.assets[0] | .browser_download_url'
15
IanB

Curlとwgetを使用して 最新リリースページ から単一のバイナリファイルをダウンロードする別のLinuxソリューション

curl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[0-9]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollector

説明:

curl -s -Lは、最新のリリースHTMLをサイレントにダウンロードすることです(リダイレクト後)

egrep -o '...'は正規表現を使用して必要なファイルを見つけます

wget --base=http://github.com/ -i -は、パイプラインからの相対パスを絶対URLに変換します

-O scollectorは、目的のファイル名を設定します。

-Nを追加できるのは、ファイルが新しいがS3が403 Forbiddenエラーを出した場合にのみ、ダウンロードするためです。

8
Greg Bray

数年遅れましたが、https://github.com/USER/PROJECT/releases/latest/download/package.Zipをサポートする単純なリダイレクトを実装しました。これは、最新のタグ付きpackage.Zipリリースアセットにリダイレクトされます。お役に立てば幸いです!

8
Joshua Peek

前述したように、 jq はこれと他の REST API に役立ちます。

tl; dr-以下の詳細

macOSリリースが必要だと仮定します:

URL=$( curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
   | jq -r '.assets[] | select(.name=="atom-mac.Zip") | .browser_download_url' )
curl -LO "$URL"

atomリリースのソリューション

各レポには、目的のアーティファクトを提供するさまざまな方法があるため、 atom のような適切に動作するものを示します。

公開されたアセットの名前を取得します

curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
    | jq -r '.assets[] | .name'

atom-1.15.0-delta.nupkg
atom-1.15.0-full.nupkg
atom-AMD64.deb
...

目的のアセットのダウンロードURLを取得します

以下atom-macはjqのselect(.name=="atom-mac.Zip")経由での私の望ましい資産です

curl -s "https://api.github.com/repos/atom/atom/releases/latest" \
    | jq -r '.assets[] | select(.name=="atom-mac.Zip") | .browser_download_url'

https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.Zip

アーティファクトをダウンロードする

curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.Zip"

jq Playground

jq構文は難しい場合があります。上記のjqを試すための遊び場は次のとおりです。 https://jqplay.org/s/h6_LfoEHLZ

セキュリティ

可能であれば、 sha256sumおよびgpg を使用して、ダウンロードしたアーティファクトの有効性を保証する手段を講じる必要があります。

7
Mike D

(内側の)wgetを使用してHTMLコンテンツを取得し、Zipファイル(egrepを使用)でフィルタリングしてから、Zipファイル(外側のwgetを使用)をダウンロードするソリューション。

wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep '/.*/.*/.*Zip' -o)
7
Rolf

以下のURLのいずれかを使用して、最新リリースをダウンロードします(たとえば、boxbillingプロジェクトからURLを取得しました): https://api.github.com/repos/boxbilling/boxbilling/releases

最新リリースをZipとしてダウンロードします。 https://api.github.com/repos/boxbilling/boxbilling/zipball

最新リリースをtarballとしてダウンロードします。 https://api.github.com/repos/boxbilling/boxbilling/tarball

いずれかのURLをクリックすると、最新のリリースがすぐにダウンロードされます。私がこの行を書いたとき、それは現在:boxbilling-boxbilling-4.20-30-g452ad1c [.Zip/.tar.gz]

UPDATE:ログファイルに他のURLが見つかりました(上記の例を参照) https://codeload.github.com/boxbilling/ boxbilling/legacy.tar.gz/master

5
Lahmizzar

2018-05-23現在のGitHubサポートによれば不可能です

2018-05-23に[email protected]にメッセージで連絡しました:

現在、APIをいじる以外に方法がないことを確認できますか?

そして彼らは答えた:

お問い合わせいただきありがとうございます。 APIを使用して最新のリリースを取得することをお勧めします。そのアプローチは安定しており、文書化されており、すぐに変更されることはないためです。

https://developer.github.com/v3/repos/releases/#get-the-latest-release

私もこれを追跡し続けます: https://github.com/isaacs/github/issues/658

依存関係のないPythonソリューション

堅牢でポータブル:

#!/usr/bin/env python3

import json
import urllib.request

_json = json.loads(urllib.request.urlopen(urllib.request.Request(
    'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases/latest',
     headers={'Accept': 'application/vnd.github.v3+json'},
)).read())
asset = _json['assets'][0]
urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])

こちらもご覧ください:

プレリリースも考慮してください

/latestはプレリリースを表示しませんが、/releasesは最新のものを最初に表示するため、簡単に実行できます。

#!/usr/bin/env python3

import json
import urllib.request

_json = json.loads(urllib.request.urlopen(urllib.request.Request(
    'https://api.github.com/repos/cirosantilli/linux-kernel-module-cheat/releases',
     headers={'Accept': 'application/vnd.github.v3+json'},
)).read())
asset = _json[0]['assets'][0]
urllib.request.urlretrieve(asset['browser_download_url'], asset['name'])

リリースへのリンク ヘルプページには「最新リリース」ボタンが記載されていますが、ダウンロードリンクは表示されません。

https://github.com/reactiveui/ReactiveUI/releases/latest

そのためには、最初に最新のタグを取得する必要があります(「 ダウンロードファイルの最新リリースのGitHub URL = "):

latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)

curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.Zip
3
VonC

in PHP-最新リリースのダウンロードにリダイレクトします。ウェブスペースに置くだけ

<?php

/**
 * Download latest release from github release articats
 * License: Public Domain
 */

define('REPO', 'imi-digital/iRobo');

$opts = [
    'http' => [
        'method' => 'GET',
        'header' => [
            'User-Agent: PHP'
        ]
    ]
];

$context = stream_context_create($opts);

$releases = file_get_contents('https://api.github.com/repos/' . REPO . '/releases', false, $context);
$releases = json_decode($releases);

$url = $releases[0]->assets[0]->browser_download_url;

header('Location: ' . $url);
2
Alex

curlのみを使用する場合は、リダイレクトチェーンの後にURLを出力する-w '%{url_effective}'を試すことができます(-Lで呼び出すとcurlが続きます)。だから、例えば

curl -sLo /dev/null -w '%{url_effective}' https://github.com/github-tools/github/releases/latest

https://github.com/github-tools/github/releases/tag/v3.1.0を出力します。

2
Mapio

リポジトリの説明にあるREADME.mdファイルからリリースをダウンロードしたい。そこで、JavaScriptを実行できません。

すべてのリポジトリのREADMEファイルまたはgithubページに次のようなリンクを追加できます。

  • https://niccokunzmann.github.io/download_latest/<USER>/<REPOSITORY>/<FILE>
    リポジトリから最新のリリースファイルをダウンロードします。
  • https://niccokunzmann.github.io/download_latest/<FILE>
    JavaScriptリファラーが設定され、ダウンロードするリポジトリがdocument.referrerを介して決定されるため、これは機能します。したがって、リンクはフォークに対しても機能します。

あなたはソースコードを見つけることができます こちら 、fork、または単に私のリポジトリを使用してください。

1
User

リポジトリがリリースの代わりにタグのみを使用している場合-cf. jQuery-1つのURLに基​​づいたソリューションは機能しません。

代わりに、すべてのタグをクエリし、それらをソートして、ダウンロードURLを作成する必要があります。言語GoとjQueryリポジトリにこのようなソリューションを実装しました: Link to Github

おそらく、これは誰かを助ける。

0