Как скачать релиз github по коду, а не по CLI - PullRequest
0 голосов
/ 01 марта 2020

Я создаю бота, который может захватить source.zip / source.targz из Github, затем внедрить его в мое приложение и применить новые изменения, но я не нашел способа загрузить релиз, потому что @ Octokit / Модуль отдыха, который я использую, получает только релиз. Не скачать. Другие npm пакеты не работают для меня, и если так, папка node_modules может стать очень большой, около 19 МБ. Когда я выполняю запрос https GET, Github требует, чтобы я использовал USERAGENT, но я не знаю, как использовать t ie в Octokit с простыми HTTPS-запросами.

Я хочу иметь возможность загружать релизы по код, но я получаю следующее в zipfile:

Запрос запрещен административными правилами. Убедитесь, что в вашем запросе есть заголовок User-Agent (http://developer.github.com/v3/#user -agent-required ). Проверьте https://developer.github.com на наличие других возможных причин.

    var file = fs.createWriteStream('bot.zip')
    var request = await https.get(releases[num].zipball_url, function(response) {
        response.pipe(file)
    })

//https://stackoverflow.com/questions/11944932/how-to-download-a-file-with-node-js-without-using-third-party-libraries
var octokit = new Octokit.Octokit({
        userAgent: 'Github Bot Updater',
        previews: ['jean-grey', 'symmetra'],
        baseUrl: 'https://api.github.com',
        log: {
            debug: () => {},
            info: () => {},
            warn: console.warn,
            error: console.error
          },
          request: {
            agent: undefined,
            fetch: undefined,
            timeout: 0
          }
    })
    var releases = await octokit.paginate("GET /repos/:owner/:repo/releases", {  owner: username,  repo: reponame})
//octokit has no method for downloading a release

1 Ответ

0 голосов
/ 07 марта 2020

То, что я сделал, вместо получения zipball из релиза, вы также можете получить то же самое, перейдя на главную страницу репо, затем перейдя к кнопке ответвлений в углу, перейдя к тегам и желаемому тегу релиза. Затем после того, как вы нажмете на это, вы можете скачать этот выпуск. Когда я посмотрел на это, вместо того, чтобы делать

releases[num].zipball_url в

    var request = await https.get(releases[num].zipball_url, function(response) {
        response.pipe(file)
    })

Вы можете сделать

https://codeload.github.com/${username}/${reponame}/zip/${releases[num].tag_name}

И это работает.

...