Korzystając z funkcji wydania GitHub , można podać łącze do pobrania określonej wersji opublikowanego oprogramowania. Jednak za każdym razem, gdy publikowane jest wydanie, strona gh również musi zostać zaktualizowana.
Czy istnieje sposób na uzyskanie łącza do określonego pliku niezależnie od najnowszej wersji oprogramowania?
np. byłby to link statyczny:
https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip
Chciałbym coś takiego:
https://github.com/USER/PROJECT/releases/download/latest/package.zip
UWAGA: Różnica między tym pytaniem a najnowszą wersją GitHub polega na tym, że to pytanie dotyczy konkretnie uzyskania dostępu do pliku, a nie strony z najnowszą wersją GitHub
github
download
release
github-pages
Christian Rondeau
źródło
źródło
Odpowiedzi:
Kilka lat później, ale właśnie zaimplementowałem proste przekierowanie do pomocy technicznej
https://github.com/USER/PROJECT/releases/latest/download/package.zip
. Powinno to spowodować przekierowanie dopackage.zip
zasobu z najnowszą oznaczoną wersją. Mam nadzieję, że to przydatne!źródło
.../releases/latest/download/...
vs.../releases/download/v0.0.0/...
. Nie można po prostu wymienićv0.0.0
sięlatest
na swoim miejscu.Rozwiązanie dla systemu Linux umożliwiające uzyskanie łącza do najnowszego zasobu do pobrania (działa tylko wtedy, gdy wydanie ma tylko jeden zasób)
źródło
curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64[.]deb' | head -n 1 | cut -d '"' -f 4
curl -s https://api.github.com/repos/git-ftp/git-ftp/releases | grep tarball_url | head -n 1 | cut -d '"' -f 4
| head -n 1
api.github.com/repos/boxbilling/boxbilling/releases/latestMożna zrobić ajax żądania, aby uzyskać najnowszą wersję pobierania URL przy użyciu GitHub uwalnia API . Pokazuje również, kiedy został wydany i liczbę pobrań:
Ważne jest, aby ustawić domyślny adres URL przycisku na stronie z wydaniami (np. Https://github.com/ShareX/ShareX/releases/latest ), więc jeśli przeglądarka nie obsługuje ajax (lub javascript) lub jest zbyt wolna, aby uzyskać adres URL, przycisk pobierania będzie nadal działał.
Po zakończeniu żądania Ajax adres URL tego przycisku zmieni się automatycznie na bezpośredni adres URL pobierania.
Edytować:
Zrobiłem również stronę pobierania, która pokazuje wiele wydań, które można znaleźć tutaj: https://getsharex.com/downloads/
Kod źródłowy: https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js
źródło
curl -s https://api.github.com/repos/DataTables/DataTables/releases/latest
Z wiersza poleceń za pomocą
curl
ijq
pobiera pierwszy plik najnowszej wersji:źródło
jq --raw-output
to czystszy sposób na usuwanie cudzysłowów. Jeśli chcesz tylko najnowsze, taniej jest pobrać.../releases/latest
i upuścić plik.[0] |
. Ale pobranie wszystkich wersji pozwala na zapytania takie jakjq '.[] | .assets[] | .browser_download_url | select(endswith(".deb"))'
...curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq --arg PLATFORM_ARCH "$(echo `uname -s`-`uname -m`)" -r '.assets[] | select(.name | endswith($PLATFORM_ARCH)).browser_download_url' | xargs sudo curl -L -o /usr/local/bin/docker-compose --url
. Koniec z magią i użycie łuku pozwala mi zignorować pliki what.sha256, które są zwykle obecne, bez robienia tego|head -n 1
.Kolejne rozwiązanie dla Linuksa używające curl i wget do pobrania pojedynczego pliku binarnego z najnowszej strony wydania
Wyjaśnienie:
curl -s -L
jest po cichu pobrać najnowszą wersję HTML (po następującym przekierowaniu)egrep -o '...'
używa wyrażenia regularnego, aby znaleźć żądany plikwget --base=http://github.com/ -i -
konwertuje ścieżkę względną z potoku na bezwzględny adres URLi
-O scollector
ustawia żądaną nazwę pliku.może być w stanie dodać
-N
tylko do pobrania, jeśli plik jest nowszy, ale S3 wyświetlał błąd 403 zabroniony.źródło
\.
np. 2.2.0 potrzebnych/download/[0-9\.]*/
v
jako przedrostek, jak znacznikav0.11.0
. Po prostu wprowadźcurl -s -L https://github.com/bosun-monitor/bosun/releases/latest | egrep -o '/bosun-monitor/bosun/releases/download/[v]?[0-9.]*/scollector-linux-armv6' | wget --base=http://github.com/ -i - -O scollector
swój CLI i działa idealnie. Dziękuję Greg !!Jak wspomniano wcześniej, jq jest przydatny w przypadku tego i innych interfejsów API REST .
tl; dr - więcej szczegółów poniżej
Zakładając, że chcesz wydać macOS :
Rozwiązanie dla wydań atomowych
Zauważ, że każde repozytorium może mieć różne sposoby dostarczania pożądanego artefaktu, więc pokażę dla dobrze zachowującego się, takiego jak atom .
Uzyskaj nazwy opublikowanych zasobów
Uzyskaj adres URL pobierania dla wybranego zasobu
Poniżej atom-mac jest moim pożądanym zasobem za pośrednictwem jq
select(.name=="atom-mac.zip")
Pobierz artefakt
jq Playground
składnia jq może być trudna. Oto plac zabaw do eksperymentowania z
jq
powyższym: https://jqplay.org/s/h6_LfoEHLZBezpieczeństwo
Powinieneś podjąć kroki w celu zapewnienia poprawności pobranego artefaktu za pośrednictwem sha256sum i gpg , jeśli to w ogóle możliwe.
źródło
Rozwiązanie wykorzystujące (wewnętrzny) wget do pobrania zawartości HTML, przefiltruj ją pod kątem pliku zip (za pomocą egrep), a następnie pobierz plik zip (z zewnętrznym wgetem).
źródło
Po prostu użyj jednego z poniższych adresów URL, aby pobrać najnowszą wersję: (na przykład adresy URL z projektu boxbilling): https://api.github.com/repos/boxbilling/boxbilling/releases
Pobierz najnowszą wersję jako zip: https://api.github.com/repos/boxbilling/boxbilling/zipball
Pobierz najnowszą wersję jako tarball: https://api.github.com/repos/boxbilling/boxbilling/tarball
Kliknij jeden z adresów URL, aby natychmiast pobrać najnowszą wersję. Jak napisałem te linie, jest to obecnie: boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]
AKTUALIZACJA: Znalazłem inny adres URL w moich plikach dziennika (patrz przykład powyżej) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master
źródło
Niemożliwe zgodnie z obsługą GitHub od 23.05.2018
Skontaktowałem się z [email protected] w dniu 2018-05-23 z wiadomością:
a oni odpowiedzieli:
Będę to również śledził pod adresem : https://github.com/isaacs/github/issues/658
Rozwiązanie w Pythonie bez żadnych zależności
Solidny i przenośny:
Zobacz też:
Weź również pod uwagę wersje wstępne
/latest
nie widzi wersji wstępnych, ale jest to łatwe, ponieważ/releases
najpierw wyświetla najnowszą:źródło
Strona pomocy z linkami do wydań wspomina o przycisku „Najnowsza wersja”, ale to nie daje linku do pobrania.
https://github.com/reactiveui/ReactiveUI/releases/latest
W tym celu musisz najpierw pobrać najnowszy tag (jak wspomniano w sekcji „ Adres URL GitHub najnowszej wersji pliku do pobrania ? ”):
źródło
gh-pages
gałęzi za każdym razem, gdy jest tworzone nowe wydanie; celem jest posiadanie statycznego linku, którego mogę użyć do „odesłania do najnowszej wersji”. W tej chwili moją najlepszą opcją jest odnieść się do strony z wydaniami.w PHP - przekierowanie do pobrania najnowszej wersji. Po prostu umieść na swojej przestrzeni internetowej
źródło
Jeśli chcesz użyć tylko
curl
, możesz spróbować z-w '%{url_effective}'
tym, że drukuje adres URL po łańcuchu przekierowań (po którym następuje curl, jeśli wywołasz go za pomocą-L
). Na przykładwyjścia
https://github.com/github-tools/github/releases/tag/v3.1.0
.źródło
Github obsługuje teraz statyczne linki do pobierania pojedynczych plików z najnowszej wersji: https://help.github.com/en/articles/linking-to-releases
źródło
Podobnie jak większość osób odwiedzających to pytanie, byłem absolutnie sfrustrowany znalezieniem sposobu na pełne zautomatyzowanie pobierania najnowszej wersji wydania lub repozytorium w Github. Zaletą tego rozwiązania jest to, że nie musisz określać żadnego wydania ani numeru tagu - po prostu pobierze NAJNOWSZE .
Przeprowadziłem testy przy użyciu następującego użytkownika i repozytorium Github:
" f1linux " = Użytkownik Github
" pi-ap " = Repozytorium
Dowolna nazwa katalogu, w którym repozytorium jest zapisywane, jest ustawiana w:
BEZPOŚREDNI:
Używając narzędzi „ Web Developer ” przeglądarki Firefox (3 paski w prawym górnym rogu), w sekcji „ Sieć ” znalazłem
https://api.github.com
przekierowanie dohttps://codeload.github.com
, więc przesyłając potokiemcurl
dotar
, mogłem pobrać najnowsze wersje repozytorium i zapisać je pod przewidywalną nazwą, można go operować na:POŚREDNI:
Po osiągnięciu w pełni zautomatyzowanego pobierania najnowszej wersji wersji przy użyciu DIRECT URL, zwróciłem uwagę na osiągnięcie tego samego w przypadku przekierowania Githuba:
Preferowana metoda:
Należy jednak pamiętać, zgodnie z komentarzem Vona poniżej, że metodą preferowaną jest POŚREDNI
Dalsza walidacja:
Aby upewnić się, że moje wyniki są powtarzalne w innych repozytoriach Github z wersjami, te same testy zostały pomyślnie przeprowadzone dla
doctl
zestawu narzędzi API Digital Ocean (od czego właściwie rozpoczęło się całe ćwiczenie!):Zarówno BEZPOŚREDNI, jak i POŚREDNI działają przy użyciu tego samego formularza co powyżej, po prostu zmieniając nazwę użytkownika i repozytorium:
BEZPOŚREDNI:
POŚREDNI:
źródło
Chcę pobrać wydania z
README.md
pliku w opisie repozytorium. Tam nie mogę wykonać JavaScript.Mogę dodać takie linki do pliku README lub stron github dla wszystkich moich repozytoriów:
https://niccokunzmann.github.io/download_latest/<USER>/<REPOSITORY>/<FILE>
Pobiera najnowszy plik wydania z repozytorium.
https://niccokunzmann.github.io/download_latest/<FILE>
To działa, ponieważ strona odsyłająca JavaScript jest ustawiona, a repozytorium do pobrania jest określane za pomocą
document.referrer
. W ten sposób łącze będzie działać również w przypadku wideł.Możesz znaleźć kod źródłowy tutaj , rozwidlić lub po prostu skorzystać z mojego repozytorium.
źródło
W przypadku, gdy repozytorium używa tylko tagów zamiast wydania - por. jQuery - nie działają rozwiązania oparte o jeden URL.
Zamiast tego musisz sprawdzić wszystkie tagi, posortować je i utworzyć adres URL pobierania. Zaimplementowałem takie rozwiązanie dla języka Go i repozytorium jQuery: Link to Github .
Może to komuś pomoże.
źródło