1 ответ

Лучший ответ

Сначала следует подумать о простом клонировании репозитория с помощью git, тогда будет проще сравнивать выпуски. Это выходит за рамки данного вопроса/ответа.

Я представляю два метода: веб-подход и подход, специфичный для GitHub, с использованием API:

Веб-соскоб

Вот быстрый и грязный однострочный скрипт (разделенный здесь на несколько строк для удобства чтения), требующий w3m, awk, xargs и curl. Этот специальный сценарий, вероятно, не предназначен для использования в каких-либо автоматизированных системах.

  • используя w3m для форматирования содержимого страницы со всеми ссылками в конце,
  • awk для извлечения только ссылок, содержащих строку /releases/download/ и заканчивающихся на .tar.gz в их URL,
  • xargs для преобразования вывода в параметры командной строки для передачи
  • curl, чтобы загрузить их. Это даже подходит для n параллельных загрузок, если добавить -P n к xargs:

.

w3m -o display_link_number=1 -dump https://github.com/GloriousEggroll/proton-ge-custom/releases | 
    awk '$1 ~ /\[[0-9]+\]/ && $2 ~ /\/releases\/download\/.*\.tar\.gz$/ { print $2 }' | 
    xargs -n 1 curl -JRLO 

Вставка echo перед curl, чтобы предотвратить фактическую загрузку, выводит это:

curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.10-GE-1/Proton-6.10-GE-1.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-2-github-actions-test/Proton-6.9-GE-2-github-actions-test.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-2/Proton-6.9-GE-2.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.9-GE-1/Proton-6.9-GE-1.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.8-GE-2/Proton-6.8-GE-2.tar.gz
curl -JRLO https://github.com/GloriousEggroll/proton-ge-custom/releases/download/6.8-GE-1/Proton-6.8-GE-1.tar.gz

Примечание: параметр -o display_link_number=1 на самом деле не задокументирован, но появляется в качестве примера в w3mсправочная страница.

Это будет ограничено содержимым первой страницы, поэтому не все загрузки будут доступны. Поскольку ссылка на следующую страницу требует знать содержимое (в частности, последний отображаемый выпуск на странице), обработка этого будет слишком сложной.

Лучше использовать...

GitHub REST API

Существует GitHub API, относящийся к выпускам, который не требует любые учетные данные для этой задачи и выводит ее результаты в формате JSON, подходящем для обработки сценария с помощью jq (обычно он доступен в виде дистрибутива). Для этого требуется curl, xargs, jq. jq будет отображать URL-адрес загрузки для каждого имени ресурса, оканчивающегося на .tar.gz. (Изучение исходного дампа curl с помощью | jq . позволяет найти полезные части).

curl -H 'Accept: application/vnd.github.v3+json' 'https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases' | 
    jq -r '
        .[].assets[] | if .name | endswith(".tar.gz") then
            .browser_download_url
        else
            empty
        end' | 
    xargs -n 1 curl -JRLO

Вставка echo перед последним curl даст тот же результат, что и в первом методе, за исключением того, что их будет 30 вместо ~ 6.

Как описано в API, на_страницу по умолчанию 30. Добавление к URL ?per_page=XX может дать до 100 результатов. Для чего-то большего потребуется цикл с дополнительным параметром &page=Y и определением его окончания.

1
A.B 7 Июн 2021 в 18:11
Вау! Очень обстоятельный ответ. Большое спасибо!
 – 
telometto
8 Июн 2021 в 09:41