origin - github desktop español
¿Hay un enlace a GitHub para descargar un archivo en la última versión de un repositorio? (13)
Usando la función Release de GitHub , es posible proporcionar un enlace para descargar una versión específica del software publicado. Sin embargo, cada vez que se realiza una publicación, también se debe actualizar la página gh.
¿Hay alguna manera de obtener un enlace a un archivo específico de la última versión de un software?
por ejemplo, esto sería un enlace estático:
https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip
Lo que me gustaría es algo así como:
https://github.com/USER/PROJECT/releases/download/latest/package.zip
NOTA: La diferencia entre esta pregunta y la última versión de GitHub es que esta pregunta específicamente solicita acceso al archivo, no a la última página de lanzamiento de GitHub.
Como se señaló anteriormente, jq es útil para esta y otras API REST .
tl; dr - más detalles a continuación
Suponiendo que desea la versión de 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"
Solución para las liberaciones de átomos
Tenga en cuenta que cada repos puede tener diferentes formas de proporcionar el artefacto deseado, por lo que demostraré un atom buen comportamiento.
Obtener los nombres de los activos publicados
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
...
Obtenga la URL de descarga para el activo deseado
Debajo de atom-mac está mi activo deseado a través de jq''s 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
Descargar el artefacto
curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
jq Patio de recreo
La sintaxis jq puede ser difícil. Aquí hay un patio de recreo para experimentar con el jq
anterior: https://jqplay.org/s/h6_LfoEHLZ
Seguridad
Debe tomar medidas para garantizar la validez del artefacto descargado a través de sha256sum y gpg , si es posible.
Desde la línea de comandos usando curl
y jq
, recupera el primer archivo de la última versión:
curl -s https://api.github.com/repos/porjo/staticserve/releases/latest | /
jq --raw-output ''.assets[0] | .browser_download_url''
Deseo descargar las versiones del archivo README.md
en la descripción del repositorio. Allí, no puedo ejecutar JavaScript.
Puedo agregar enlaces como estos al archivo README o páginas github para todos mis repositorios:
https://niccokunzmann.github.io/download_latest/test.txt
Esto funciona porque se establece la referencia de JavaScript y el repositorio para descargar se determina a través de document.referrer
. Por lo tanto, el enlace también funcionará para las horquillas.
Puede encontrar el código fuente here , tenedor o simplemente usar mi repositorio.
En caso de que el repositorio esté utilizando solo etiquetas en lugar de liberación, cf. jQuery: las soluciones basadas en una URL no funcionan.
En su lugar, debe consultar todas las etiquetas, ordenarlas y construir la URL de descarga. Implementé una solución para el lenguaje Ir y el repositorio jQuery: Enlace a Github .
Quizás, esto ayuda a alguien.
La página de vinculación a las versiones de ayuda menciona un botón de "Última versión", pero eso no le proporciona un enlace de descarga.
https://github.com/reactiveui/ReactiveUI/releases/latest
Para eso, primero necesita obtener la última etiqueta (como se menciona en " GitHub URL para la última versión del archivo de descarga "):
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
curl -L https://github.com/reactiveui/ReactiveUI/releases/download/$latestTag/ReactiveUI-$latestTag.zip
Otra solución de Linux que utiliza curl y wget para descargar un solo archivo binario de la última página de publicación
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
Explicación:
curl -s -L
es descargar silenciosamente la última versión HTML (después de seguir redirigir)
egrep -o ''...''
usa egrep -o ''...''
regulares para encontrar el archivo que desea
wget --base=http://github.com/ -i -
convierte la ruta relativa desde la canalización a la URL absoluta
y -O scollector
establece el nombre de archivo deseado.
puede ser capaz de agregar -N
para descargar solo si el archivo es más nuevo pero S3 estaba dando un error 403 Prohibido.
Puede hacer una solicitud de ajax para obtener la última URL de descarga de versión utilizando la API de versiones de GitHub . También muestra cuándo se lanzó y la descarga cuenta:
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>
Es importante que establezca el botón predeterminado URL en la página de lanzamientos (como https://github.com/ShareX/ShareX/releases/latest ), por lo que si el navegador no admite ajax (o javascript) o es demasiado lento para obtener la URL, el botón de descarga seguirá funcionando.
Cuando finalice la solicitud de Ajax, la URL de este botón cambiará automáticamente a una URL de descarga directa.
Editar:
También hice una página de descargas que muestra varios lanzamientos que puedes encontrar aquí: https://getsharex.com/downloads/
Código fuente de la misma: https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js
Si desea utilizar solo curl
, puede probar con -w ''%{url_effective}''
que imprime la URL después de una cadena de redireccionamiento (seguido de curl si lo invoca con -L
). Así por ejemplo
curl -sLo /dev/null -w ''%{url_effective}'' https://github.com/github-tools/github/releases/latest
salidas https://github.com/github-tools/github/releases/tag/v3.1.0
.
Simplemente use uno de los siguientes URL para descargar la última versión: (Tomó URLs del proyecto de boxbilling, por ejemplo): https://api.github.com/repos/boxbilling/boxbilling/releases
Descargue la última versión en formato zip: https://api.github.com/repos/boxbilling/boxbilling/zipball
Descargue la última versión como tarball: https://api.github.com/repos/boxbilling/boxbilling/tarball
Haga clic en una de las URL para descargar la última versión al instante. Mientras escribía estas líneas es actualmente: boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]
ACTUALIZACIÓN: Encontré otra URL en mis archivos de registro (refiérase al ejemplo anterior) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master
Solución Linux para obtener el último enlace de descarga de activos de lanzamiento (funciona solo si la versión tiene un solo activo)
curl -s https://api.github.com/repos/boxbilling/boxbilling/releases/latest | grep browser_download_url | cut -d ''"'' -f 4
Una solución que usa (wget) interno para obtener el contenido HTML, filtrarlo para el archivo zip (con egrep) y luego descargar el archivo zip (con el wget externo).
wget https://github.com/$(wget https://github.com/<USER>/<PROJECT>/releases/latest -O - | egrep ''/.*/.*/.*zip'' -o)
en PHP: redirecciona a la última versión de descarga. Simplemente ponga su espacio 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);
No es posible según el soporte de GitHub a partir de 2018-05-23
Se contactó con [email protected] en 2018-05-23 con un mensaje:
¿Puedes confirmar que no hay forma de jugar con API actualmente?
y ellos respondieron:
Gracias por contactarnos. Recomendamos usar la API para buscar la última versión porque ese enfoque es estable, está documentado y no está sujeto a cambios en el corto plazo:
https://developer.github.com/v3/repos/releases/#get-the-latest-release
También seguiré rastreando esto en: https://github.com/isaacs/github/issues/658