Existe-t-il un lien vers GitHub pour télécharger un fichier dans la dernière version d’un référentiel?

En utilisant la fonctionnalité de publication de GitHub , il est possible de fournir un lien pour télécharger une version spécifique du logiciel publié. Cependant, chaque fois qu’une version est faite, la page gh doit également être mise à jour.

Est-il possible d’obtenir un lien vers un fichier spécifique de la dernière version d’un logiciel?

par exemple, ce serait un lien statique:

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

Ce que j’aimerais, c’est quelque chose comme:

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

REMARQUE: La différence entre cette question et la dernière version de GitHub est que cette question demande spécifiquement d’avoir access au fichier, et non à la dernière version de GitHub.

Vous pouvez effectuer une requête ajax pour obtenir la dernière version téléchargée de l’URL à l’aide de l’ API GitHub Releases . Il montre également quand il a été publié et le nombre de téléchargements:

 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(); 
  Download 

Solution Linux pour obtenir le dernier lien de téléchargement des ressources de la version (fonctionne uniquement si la version ne contient qu’un seul élément)

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

À partir de la ligne de commande utilisant curl et jq , récupère le premier fichier de la dernière version:

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

Une autre solution Linux utilisant curl et wget pour télécharger un seul fichier binary depuis la dernière version

 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 

Explication:

curl -s -L consiste à télécharger silencieusement la dernière version HTML (après la redirection suivante)

egrep -o '...' utilise regex pour trouver le fichier que vous voulez

wget --base=http://github.com/ -i - convertit le chemin relatif du pipeline en URL absolue

and -O scollector définit le nom de fichier souhaité.

peut être en mesure d’append -N pour ne télécharger que si le fichier est plus récent mais que S3 émettait une erreur 403 Forbidden.

Comme indiqué précédemment, jq est utile pour cela et pour d’autres API REST .

tl; dr – plus de détails ci-dessous

En supposant que vous voulez la version 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" 

Solution pour les rejets d’atomes

Notez que chaque repo peut avoir différentes manières de fournir l’artefact désiré, donc je vais démontrer pour un atome comme celui qui se comporte bien.

Récupère les noms des actifs publiés

 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 ... 

Obtenir l’URL de téléchargement de l’actif souhaité

En dessous d’ atom-mac est mon actif désiré via la select(.name=="atom-mac.zip") de 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 

Télécharger l’artefact

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

jq aire de jeux

La syntaxe jq peut être difficile. Voici un terrain de jeu pour expérimenter le jq ci-dessus: https://jqplay.org/s/h6_LfoEHLZ

Sécurité

Vous devez prendre des mesures pour garantir la validité de l’artefact téléchargé via sha256sum et gpg , si possible.

Une solution utilisant (un intérieur) wget pour obtenir le contenu HTML, le filtre pour le fichier zip (avec egrep), puis télécharge le fichier zip (avec le wget externe).

 wget https://github.com/$(wget https://github.com///releases/latest -O - | egrep '/.*/.*/.*zip' -o) 

Il vous suffit d’utiliser l’une des URL ci-dessous pour télécharger la dernière version: (par exemple, les URL du projet Boxbilling): https://api.github.com/repos/boxbilling/boxbilling/releases

Téléchargez la dernière version en format zip: https://api.github.com/repos/boxbilling/boxbilling/zipball

Téléchargez la dernière version sous forme d’archive: https://api.github.com/repos/boxbilling/boxbilling/tarball

Cliquez sur l’une des URL pour télécharger instantanément la dernière version. Comme je l’ai écrit ces lignes, c’est actuellement: boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]

MISE À JOUR: Trouvé une autre URL dans mes fichiers journaux (réf. À l’exemple ci-dessus) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master

La page d’aide Lien vers les versions mentionne un bouton “Dernière version”, mais cela ne vous permet pas d’obtenir un lien de téléchargement.

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

Pour cela, vous devez d’abord obtenir la dernière balise (comme indiqué dans ” URL GitHub pour la dernière version du fichier téléchargé ? “):

 latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.zip 

Si vous voulez utiliser simplement curl vous pouvez essayer avec -w '%{url_effective}' qui -w '%{url_effective}' l’URL après une chaîne de redirection (suivie de curl si vous l’appelez avec -L ). Ainsi, par exemple

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

sorties https://github.com/github-tools/github/releases/tag/v3.1.0 .

Pas possible selon le support GitHub à partir de 2018-05-23

Contactez support@github.com le 2018-05-23 avec un message:

Pouvez-vous simplement confirmer qu’il n’y a pas d’autre moyen que de jouer avec l’API actuellement?

et ils ont répondu:

Merci de tendre la main. Nous vous recommandons d’utiliser l’API pour récupérer la dernière version, car cette approche est stable, documentée et non susceptible de changer dans un avenir proche:

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

Je vais également continuer à suivre cela à: https://github.com/isaacs/github/issues/658

en PHP – redirige vers la dernière version téléchargée. Il suffit de mettre sur votre espace web

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

Je souhaite télécharger les versions du fichier README.md dans la description du référentiel. Là, je ne peux pas exécuter JavaScript.

Je peux append des liens comme ceux-ci au fichier README ou aux pages github de tous mes référentiels:

 https://niccokunzmann.github.io/download_latest/test.txt 

Cela fonctionne parce que le référent JavaScript est défini et que le référentiel à télécharger est déterminé via document.referrer . Ainsi, le lien fonctionnera également pour les fourches.

Vous pouvez trouver le code source ici , fork ou simplement utiliser mon repo.

Si le repository n’utilise que des balises au lieu de libérer – cf. jQuery – les solutions basées sur une URL ne fonctionnent pas.

Au lieu de cela, vous devez interroger toutes les balises, les sortinger et créer l’URL de téléchargement. J’ai implémenté une telle solution pour le langage Go et le repo jQuery: Link to Github .

Peut-être que cela aide quelqu’un.