Télécharger la dernière version de GitHub

j'aimerais avoir " télécharger la dernière Version " bouton sur mon site web qui représenterait le lien vers la dernière version (stocké à GitHub Releases ). J'ai essayé de créer une étiquette de publication nommée "dernière" , mais cela s'est compliqué lorsque j'ai essayé de charger une nouvelle version (confusion avec la date de création de l'étiquette, échange de l'étiquette, etc.). La mise à jour manuelle des liens de téléchargement sur mon site web est également une tâche fastidieuse et scrupuleuse. Je vois la seule façon-rediriger tous les boutons de téléchargement vers quelque html, qui à son tour sera redirigé vers la dernière version réelle.

notez que mon site web est hébergé sur des Pages GitHub (hébergement statique), donc je ne peux pas utiliser pour générer des liens. Des idées?

16
demandé sur kefir500 2014-01-29 22:13:48

7 réponses

GitHub fournit maintenant un bouton" dernière version "sur la page de version d'un projet, après que vous ayez créé votre première version .

dans l'exemple que vous avez donné, ce bouton renvoie à https://github.com/reactiveui/ReactiveUI/releases/latest

15
répondu dod 2016-01-19 09:18:24

Vous n'avez pas besoin de script pour générer un lien de téléchargement de la dernière version. Utilisez simplement ce format:

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

exemples:

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

si, pour une raison quelconque, vous souhaitez obtenir un lien vers la dernière version téléchargeable, y compris son numéro de version, vous pouvez obtenir ce lien à partir du get latest release API :

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

exemple:

$.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
répondu Dan Dascalescu 2016-12-21 14:56:16

depuis le 18 février 2015 , le GitHub V3 release API a un get latest release API .

GET /repos/:owner/:repo/releases/latest
3
répondu VonC 2015-09-01 21:03:29

peut-être pourriez-vous utiliser des scripts côté client et générer dynamiquement la cible du lien en invoquant l'api GitHub, par une magie de JQuery?

l'API Releases expose un moyen de extraire la liste de toutes les versions d'un dépôt . Par exemple, ce lien retour à une liste formatée par Json de tous les communiqués du projet Réactiveui .

extraire le premier retournerait la dernière version.

dans cette charge utile:

  • Le html_url attribut assurera la première partie de l'url à construire (ie. https://github.com/{owner}/{repository}/releases/{version} ).

  • le tableau assets affichera la liste des archives téléchargeables. Chaque asset portera un name attribut

la construction de l'url de téléchargement cible n'est qu'à quelques opérations de chaîne de caractères.

  • insérer le mot-clé download/ entre le segment releases/ du html_url et le numéro de version
  • ajouter le nom du bien à télécharger

l'url résultante sera du format suivant: https://github.com/{owner}/{repository}/releases/download/{version}/name_of_asset

par exemple, en ce qui concerne la charge utile Json du lien Réactiveui ci-dessus, nous avons html_url: "https://github.com/reactiveui/ReactiveUI/releases/5.99.0" et un atout avec name: "ReactiveUI.6.0.Preview.1.zip" .

comme tel, l'url de téléchargement est https://github.com/reactiveui/ReactiveUI/releases/download/5.99.0/ReactiveUI.6.0.Preview.1.zip

2
répondu nulltoken 2014-01-29 19:59:00

vous pouvez utiliser ce qui suit:

  • ${Organisation} comme le GitHub de l'utilisateur ou de l'organisation
  • ${dépôt} est le nom du dépôt

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

Le répertoire de niveau supérieur dans la .tar.fichier gz a le hachage sha de l'engagement dans le nom du répertoire qui peut être un problème si vous avez besoin d'un moyen automatisé pour changer dans le répertoire résultant et faire quelque chose.

la méthode ci-dessous va supprimer cela, et laisser les fichiers dans un dossier avec un nom prévisible.

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

1
répondu Casey 2017-04-29 16:21:55

comme je n'ai pas vu la réponse ici, mais il a été très utile pour moi tout en exécutant des tests d'intégration continue, ce un-liner qui ne nécessite que vous d'avoir curl permettra de rechercher les versions de github repo pour télécharger la dernière version

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

Je l'utilise pour exécuter PHPSTan sur notre dépôt en utilisant le script suivant ""

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

1
répondu Rvanlaak 2017-11-01 20:19:08

si vous utilisez PHP essayer de suivre le code:

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);
}

exemple D'utilisation de la fonction

echo '<a href="' .getLatestTagUrl('OzzyCzech/vestibulum') .'">Download</a>';
0
répondu OzzyCzech 2014-09-28 19:08:51