Загрузите последнюю версию GitHub

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

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

Ответ 1

Github теперь предоставляет кнопку "Последний выпуск" на странице выпуска проекта, после того, как вы создали свой первый выпуск.

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

Ответ 2

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

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>

Ответ 4

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

API выпуска предоставляет способ получить список всех выпусков из репозитория. Например, эта ссылка возвращает форматированный список Json из всех релизы проекта ReactiveUI.

Извлечение первого приведет к последней версии.

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

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

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

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

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

Результирующий 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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

Поскольку я не видел ответа здесь, но это было очень полезно для меня при выполнении тестов непрерывной интеграции, этот однострочный, который требует только того, чтобы иметь завиток, позволит искать выпуски репозитория Github для загрузки последней версии

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

Я использую его для запуска PHPSTan в нашем репозитории, используя следующий script

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