Menggunakan fitur Rilis GitHub , dimungkinkan untuk menyediakan tautan untuk mengunduh versi tertentu dari perangkat lunak yang diterbitkan. Namun, setiap kali rilis dibuat, gh-page juga perlu diperbarui.
Apakah ada cara untuk mendapatkan tautan ke file tertentu dari versi terbaru perangkat lunak apa pun?
misalnya, ini akan menjadi tautan statis:
https://github.com/USER/PROJECT/releases/download/v0.0.0/package.zip
Yang saya suka adalah seperti ini:
https://github.com/USER/PROJECT/releases/download/latest/package.zip
CATATAN: Perbedaan antara pertanyaan ini dan rilis terbaru GitHub adalah pertanyaan ini secara khusus meminta untuk mendapatkan akses ke file, bukan halaman rilis terbaru GitHub
github
download
release
github-pages
Christian Rondeau
sumber
sumber
Jawaban:
Beberapa tahun terlambat, tetapi saya baru saja menerapkan pengalihan sederhana untuk mendukung
https://github.com/USER/PROJECT/releases/latest/download/package.zip
. Itu harus dialihkan kepackage.zip
aset rilis dengan tag terbaru . Semoga bermanfaat!sumber
.../releases/latest/download/...
vs.../releases/download/v0.0.0/...
. Anda tidak bisa begitu saja menggantiv0.0.0
denganlatest
di tempat.Solusi Linux untuk mendapatkan tautan unduhan aset rilis terbaru (hanya berfungsi jika rilis hanya memiliki satu aset)
sumber
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/latestAnda dapat melakukan permintaan ajax untuk mendapatkan URL unduhan rilis terbaru menggunakan GitHub Releases API . Ini juga menunjukkan kapan dirilis dan jumlah unduhan:
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>
Penting bagi Anda untuk mengatur URL tombol default ke halaman rilis (seperti https://github.com/ShareX/ShareX/releases/latest ) jadi jika browser tidak mendukung ajax (atau javascript) atau terlalu lambat untuk dapatkan URL-nya, tombol unduh akan tetap berfungsi.
Saat permintaan Ajax selesai, URL tombol ini akan berubah secara otomatis menjadi URL unduhan langsung.
Edit:
Saya juga membuat halaman unduhan yang menampilkan beberapa rilis yang dapat Anda temukan di sini: https://getsharex.com/downloads/
Kode sumbernya : https://github.com/ShareX/sharex.github.io/blob/master/js/downloads.js
sumber
curl -s https://api.github.com/repos/DataTables/DataTables/releases/latest
Dari baris perintah menggunakan
curl
danjq
, ambil file pertama dari rilis terbaru :sumber
jq --raw-output
adalah cara yang lebih bersih untuk menghilangkan tanda kutip. Jika Anda hanya menginginkan yang terbaru, lebih murah untuk mengambil.../releases/latest
dan melepaskan.[0] |
. Tetapi mengambil semua rilis memungkinkan pertanyaan sepertijq '.[] | .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
,. Akhirnya adalah keajaiban dan menggunakan lengkungan memungkinkan saya untuk mengabaikan file apa pun.sha256 yang biasanya ada tanpa melakukan|head -n 1
.Solusi Linux lain menggunakan curl dan wget untuk mengunduh satu file biner dari halaman rilis terbaru
Penjelasan:
curl -s -L
adalah mengunduh diam-diam HTML rilis terbaru (setelah mengikuti pengalihan)egrep -o '...'
menggunakan regex untuk menemukan file yang Anda inginkanwget --base=http://github.com/ -i -
mengonversi jalur relatif dari pipa ke URL absolutdan
-O scollector
mengatur nama file yang diinginkan.mungkin dapat menambahkan
-N
ke unduhan hanya jika file lebih baru tetapi S3 memberikan kesalahan 403 Terlarang.sumber
\.
misalnya diperlukan 2.2.0/download/[0-9\.]*/
v
sebagai awalan, seperti tagv0.11.0
. Cukup masukkancurl -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
CLI Anda dan itu bekerja dengan sempurna. Terima kasih, Greg !!Seperti disebutkan sebelumnya, jq berguna untuk ini dan REST API lainnya .
tl; dr - detail selengkapnya di bawah
Dengan asumsi Anda menginginkan rilis 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"
Solusi untuk pelepasan atom
Perhatikan bahwa setiap repo dapat memiliki cara berbeda untuk menyediakan artefak yang diinginkan, jadi saya akan mendemonstrasikan untuk yang berperilaku baik seperti atom .
Dapatkan nama-nama aset yang diterbitkan
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 ...
Dapatkan URL unduhan untuk aset yang diinginkan
Di bawah atom-mac adalah aset yang saya inginkan melalui 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
Unduh artefak
curl -LO "https://github.com/atom/atom/releases/download/v1.15.0/atom-mac.zip"
jq Playground
sintaks jq bisa jadi sulit. Inilah tempat bermain untuk bereksperimen dengan hal
jq
- hal di atas: https://jqplay.org/s/h6_LfoEHLZKeamanan
Anda harus mengambil tindakan untuk memastikan validitas artefak yang diunduh melalui sha256sum dan gpg , jika memungkinkan.
sumber
Solusi menggunakan (an inner) wget untuk mendapatkan konten HTML, filter untuk file zip (dengan egrep) dan kemudian unduh file zip (dengan wget luar).
sumber
Cukup gunakan salah satu url di bawah untuk mengunduh rilis terbaru: (ambil url dari proyek boxbilling misalnya): https://api.github.com/repos/boxbilling/boxbilling/releases
Unduh rilis terbaru sebagai zip: https://api.github.com/repos/boxbilling/boxbilling/zipball
Unduh rilis terbaru sebagai tarball: https://api.github.com/repos/boxbilling/boxbilling/tarball
Klik salah satu url untuk mengunduh rilis terbaru secara instan. Saat saya menulis baris ini, sekarang: boxbilling-boxbilling-4.20-30-g452ad1c [.zip / .tar.gz]
PEMBARUAN: Menemukan url lain di file log saya (lihat contoh di atas) https://codeload.github.com/boxbilling/boxbilling/legacy.tar.gz/master
sumber
Tidak memungkinkan menurut dukungan GitHub pada 23-05-2018
Menghubungi [email protected] pada 2018-05-23 dengan pesan:
dan mereka menjawab:
Saya juga akan terus melacak ini di: https://github.com/isaacs/github/issues/658
Solusi Python tanpa ketergantungan apa pun
Kuat dan portabel:
Lihat juga:
Pertimbangkan juga pra-rilis
/latest
tidak melihat pra-rilis, tetapi itu mudah dilakukan karena/releases
menampilkan yang terbaru terlebih dahulu:sumber
The Menghubungkan ke rilis halaman bantuan tidak menyebutkan "Rilis terbaru" tombol, tapi itu tidak membuat Anda link download.
https://github.com/reactiveui/ReactiveUI/releases/latest
Untuk itu, Anda perlu mendapatkan tag terbaru terlebih dahulu (seperti yang disebutkan di " GitHub URL untuk rilis terbaru dari file unduhan ? "):
sumber
gh-pages
cabang setiap kali rilis baru dibuat; tujuannya adalah untuk memiliki tautan statis yang dapat saya gunakan untuk hanya "merujuk ke versi terbaru". Saat ini pilihan terbaik saya adalah hanya merujuk ke halaman rilis.Github sekarang mendukung tautan statis untuk mengunduh file individual dari rilis terbaru: https://help.github.com/en/articles/linking-to-releases
sumber
dalam PHP - alihkan ke unduhan rilis terbaru. Cukup gunakan ruang web Anda
sumber
Jika Anda ingin menggunakan,
curl
Anda dapat mencoba dengan-w '%{url_effective}'
mencetak URL setelah rantai pengalihan (diikuti oleh curl jika Anda memanggilnya dengan-L
). Jadi misalnyakeluaran
https://github.com/github-tools/github/releases/tag/v3.1.0
.sumber
Seperti kebanyakan pengunjung pertanyaan ini, saya benar-benar frustrasi dengan menemukan cara untuk sepenuhnya mengunduh otomatis dari rilis versi TERBARU atau repo di Github. Manfaat dari solusi ini adalah Anda tidak perlu menentukan rilis atau nomor tag - ini hanya akan mengambil yang TERBARU .
Saya melakukan pengujian saya menggunakan pengguna & repo Github berikut:
" f1linux " = Pengguna Github
" pi-ap " = Repo
Nama direktori sembarang tempat penyimpanan repo diatur di:
LANGSUNG:
Menggunakan alat " Pengembang Web " Firefox (3 bilah di sudut kanan atas), di bagian " Jaringan " yang saya temukan
https://api.github.com
dialihkan kehttps://codeload.github.com
, jadi dengan menyalurkancurl
ketar
saya dapat mengambil repo berversi terbaru dan menyimpannya ke nama yang dapat diprediksi sehingga itu bisa dioperasikan pada:TIDAK LANGSUNG:
Setelah saya mendapatkan unduhan otomatis sepenuhnya dari rilis versi terbaru menggunakan URL LANGSUNG , saya mengalihkan perhatian saya untuk mencapai hal yang sama dengan pengalihan Github:
Metode yang Disukai:
Namun, harap dicatat sesuai komentar Von di bawah ini bahwa TIDAK LANGSUNG adalah metode yang disukai
Validasi Lebih Lanjut:
Untuk memastikan hasil saya dapat direproduksi ke repo Github berversi lain, pengujian yang sama berhasil dijalankan untuk
doctl
toolkit api Digital Ocean (yang sebenarnya memulai seluruh latihan!):Baik LANGSUNG dan TIDAK LANGSUNG bekerja menggunakan formulir yang sama seperti di atas, hanya mengubah nama pengguna & repo:
LANGSUNG:
TIDAK LANGSUNG:
sumber
Saya ingin mengunduh rilis dari
README.md
file dalam deskripsi repositori. Di sana, saya tidak dapat menjalankan JavaScript.Saya dapat menambahkan tautan seperti ini ke file README atau halaman github untuk semua repositori saya:
https://niccokunzmann.github.io/download_latest/<USER>/<REPOSITORY>/<FILE>
Unduh file rilis terbaru dari repositori.
https://niccokunzmann.github.io/download_latest/<FILE>
Ini berfungsi karena perujuk JavaScript ditetapkan dan repositori yang akan diunduh ditentukan
document.referrer
. Dengan demikian, tautan juga akan berfungsi untuk garpu.Anda dapat menemukan kode sumbernya di sini , fork atau cukup gunakan repo saya.
sumber
Ini untuk Linux.
Saya melihat jawaban yang diterima di atas
oleh Joshua Peek tetapi sebuah komentar mencatat itu tidak mendukung nama file berversi.
Setelah mencari sedikit, saya membuat panggilan satu baris yang berfungsi untuk nama file berversi. Ini menggunakan curl untuk mendapatkan versi file terbaru dan kemudian menggunakan dukungan pengalihan yang ditambahkan untuk mengunduh file berversi terbaru.
Jadi itu menargetkan file yang dinamai seperti
<REPO NAME>-linux64_arm-<VERSION NUMBER>.tar.gz
itu di halaman webhttps://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latest
setelah itu dialihkan. Ini dilakukan dengan mencari<VERSION NUMBER>
antarareleases/tag/
dan">
dalam teks yang dikembalikan dari panggilan curl. Jadi untuk menjadi sangat eksplisit,<FILE NAME START>
adalah<REPO NAME>-linux64_arm-
dan<FILE NAME END>
adalah.tar.gz
dalam contoh di atas. Dapatkan bitSTART
danEND
dengan melihat apa yanghttps://github.com/<UMBRELLA PROJECT>/<REPO NAME>/releases/latest
digunakan sebagai skema penamaan file.Saya mengarang ini dengan meniru bagaimana grep dan curl digunakan oleh orang lain dan baru saja mempelajari semua ini sekarang, jadi beri tahu saya jika itu melakukan sesuatu yang benar-benar nakal yang bahkan tidak saya pahami! Juga saya katakan
<UMBRELLA PROJECT>
tetapi nama pengguna harus bisa pergi ke sana dengan baik juga. Teriak ke https://stackoverflow.com/a/13245961/2403531 untuk panggilan grep, https://unix.stackexchange.com/a/10264 untuk $ string $ concatenation.sumber
Jika Anda ingin menggunakan di alpine , ikuti langkah-langkah berikut
wget -q $(curl -s https://api.github.com/repos/<USER>/<REPOSITORY>/releases/latest | grep browser_download_url | grep "$ARCH" | cut -d '"' -f 4)
-q di wget adalah mode cukup, jika Anda ingin melihat output maka gunakan tanpa q
sumber
Jika repo hanya menggunakan tag daripada rilis - cf. jQuery - solusi yang didasarkan pada satu URL tidak berfungsi.
Alih-alih, Anda harus menanyakan semua tag, mengurutkannya, dan menyusun URL unduhan. Saya menerapkan solusi seperti itu untuk bahasa Go dan repo jQuery: Tautkan ke Github .
Mungkin, ini membantu seseorang.
sumber