Как скачать выпуск github по коду, а не через CLI

Я создаю бота, который может получить файл source.zip / source.targz из Github, а затем внедрить его в свое приложение и применить новые изменения, но я не нашел способа загрузить выпуск, потому что модуль @Octokit/Rest I Пользуюсь только релизом. Не скачивать. Другие пакеты npm у меня не работают, и если да, то папка node_modules может стать действительно большой, около 19 МБ. Когда я выполняю https-запрос GET, Github требует, чтобы я использовал ПОЛЬЗОВАТЕЛЬСКИЙ АГЕНТ, но я не знаю, как связать Octokit с простыми HTTPS-запросами.

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

Запрос запрещен административными правилами. Убедитесь, что в вашем запросе есть заголовок User-Agent (http://developer.github.com/v3/). Проверьте 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://stackru.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 ответ

Решение

Что я сделал, так это вместо того, чтобы получить 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}

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

Другие вопросы по тегам