Как скачать выпуск 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}
И это работает.