2014-01-29 3 views
16

Я хотел бы иметь «Скачать последние версию» кнопку на своем сайте, который будет представлять ссылку на последнюю версию (хранится в GitHub релизов). Я попытался создать тег релиза с именем «последний», но мне стало сложно, когда я попытался загрузить новую версию (путаница с датой создания тега, заменой тега и т. Д.). Обновление ссылок для загрузки на моем веб-сайте вручную также является трудоемкой и скрупулезной задачей. Я вижу единственный способ - перенаправить все кнопки загрузки на какой-то html, который, в свою очередь, перенаправится на последнюю последнюю версию.Скачать последний релиз GitHub

Обратите внимание, что мой сайт размещен на страницах GitHub (статический хостинг), поэтому я просто не могу использовать серверные скрипты для создания ссылок. Есть идеи?

ответ

15

Github теперь обеспечивает кнопку «последний выпуск» на странице релиза проекта, после того как вы создали свой первый релиз.

В примере вы дали, эта кнопка ссылки на https://github.com/reactiveui/ReactiveUI/releases/latest

+1

Этот метод, кажется, мертв в проектах, которые меня интересовали. :( – ThorSummoner

+0

@ThorSummoner: некоторые разработчики проектов не удосуживаются добавлять релизы. В [таких случаях] (https://github.com/webix-hub/tracker/issues/247) API вернет пустой массив. –

2

Возможно, вы могли бы использовать некоторые скрипты на стороне клиента и динамически генерировать цель ссылки, вызывая GitHub api, используя некоторую магию JQuery?

API выпуска предоставляет способ retrieve the list of all the releases from a repository. Например, this link возвращает Json отформатированный список всех releases of the ReactiveUI project.

Извлечение первого будет возвращено последним выпуском.

В этой полезной нагрузке:

  • Атрибут html_url проведет первую часть URL, чтобы построить (т.е. https://github.com/{owner}/{repository}/releases/{version}.).

  • В массиве assets будет отображаться список загружаемых архивов. Каждый asset будет нести name атрибут

Построение целевой URL загрузки всего несколько операций со строками прочь.

  • Вставьте download/ ключевое слово между releases/ сегмента от html_url и номер версии
  • Append имя актива для загрузки

Результирующий URL будет иметь следующий формат: https://github.com/{owner}/{repository}/releases/download/{version}/name_of_asset

Например, в отношении полезной нагрузки Json из ссылки ReactiveUI выше, у нас есть html_url: "https://github.com/reactiveui/ReactiveUI/releases/5.99.0" и один актив с name: "ReactiveUI.6.0.Preview.1.zip".

Таким образом, загрузка URL является https://github.com/reactiveui/ReactiveUI/releases/download/5.99.0/ReactiveUI.6.0.Preview.1.zip

+1

Спасибо, ваш метод хорош, но я не хочу привязывать пользователя к JS, потому что его просто можно отключить на стороне пользователя (и использование '

+0

https://gist.github.com/ambrosechua/d426ac039e0a5f09059c - это быстрый сценарий сценария для этого, но работает только с релизами, но не с загрузкой исходного кода. – ambrosechua

0

Если вы используете 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>'; 
+2

К сожалению, служба _GitHub Pages_ не поддерживает PHP. – kefir500

+4

@ kefir500 Или * К счастью *, если вы думаете об этом. – ThorSummoner

+0

Это действительно замечательно. – Kev

10

Вам не нужны никакие скрипты для создания ссылки для загрузки для последней версии. Просто используйте этот формат:

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>

+1

Если вам нужен файл .tar.gz, тогда вы можете заменить 'zipball 'в url с' tarball'. – scribblemaniac

+1

https://api.github.com/repos/jquery/jquery/releases/latest возвращает 404. Это возвращает пустую строку: https://api.github.com/repos/webix -hub/tracker/релизы, в то время как оба этих проекта имеют выпуски. Почему поведение API несовместимо? Любая документация по этому поводу? –

+1

@HamidSarfraz: из поддержки GitHub 'jquery' и' webix-hub' не имеют выпусков, они есть теги и [последняя версия API не работает с тегами] (https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository). Полный выпуск выглядит как [this] (https://github.com/atom/atom/releases/tag/v1.17.2), и если вы хотите перечислить теги git, вы можете использовать https://developer.github.com/v3/хранилищу/# список-теги. –

1

Вы можете использовать следующую команду, где:

  • $ {Организация} как пользователь GitHub или организации
  • $ {Repository} это имя репозитория

curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball > ${Repository}.tar.gz

каталог верхнего уровня в .tar.gz файл имеет ша хеш коммита в имени каталога, который может быть проблемой, если вам нужен автоматизированный способ изменения в результирующий каталог и сделать что-то.

Приведенный ниже способ будет вытеснять это и оставить файлы в папке с предсказуемым именем.

mkdir ${Repository} curl -L https://api.github.com/repos/${Organization}/${Repository}/tarball | tar -zxv -C ${Repository} --strip-components=1

0

Как я не видел ответ здесь, но это было очень полезно для меня во время работы непрерывных интеграционных тестов, это один вкладыш, который только требует от вас, чтобы завиток позволит искать репо GitHub релизы, чтобы загрузить последнюю версию

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

Я использую его для запуска PHPSTan на нашем хранилище с помощью следующего сценария

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

Смежные вопросы