upload-to-github.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. if (!process.env.CI) require('dotenv-safe').load()
  2. const GitHub = require('github')
  3. const github = new GitHub()
  4. github.authenticate({type: 'token', token: process.env.ELECTRON_GITHUB_TOKEN})
  5. if (process.argv.length < 6) {
  6. console.log('Usage: upload-to-github filePath fileName releaseId')
  7. process.exit(1)
  8. }
  9. let filePath = process.argv[2]
  10. let fileName = process.argv[3]
  11. let releaseId = process.argv[4]
  12. let releaseVersion = process.argv[5]
  13. const targetRepo = releaseVersion.indexOf('nightly') > 0 ? 'nightlies' : 'electron'
  14. let githubOpts = {
  15. owner: 'electron',
  16. repo: targetRepo,
  17. id: releaseId,
  18. filePath: filePath,
  19. name: fileName
  20. }
  21. let retry = 0
  22. function uploadToGitHub () {
  23. github.repos.uploadAsset(githubOpts).then(() => {
  24. console.log(`Successfully uploaded ${fileName} to GitHub.`)
  25. process.exit()
  26. }).catch((err) => {
  27. if (retry < 4) {
  28. console.log(`Error uploading ${fileName} to GitHub, will retry. Error was:`, err)
  29. retry++
  30. github.repos.getRelease(githubOpts).then(release => {
  31. console.log('Got list of assets for existing release:')
  32. console.log(JSON.stringify(release.data.assets, null, ' '))
  33. let existingAssets = release.data.assets.filter(asset => asset.name === fileName)
  34. if (existingAssets.length > 0) {
  35. console.log(`${fileName} already exists; will delete before retrying upload.`)
  36. github.repos.deleteAsset({
  37. owner: 'electron',
  38. repo: targetRepo,
  39. id: existingAssets[0].id
  40. }).catch((deleteErr) => {
  41. console.log(`Failed to delete existing asset ${fileName}. Error was:`, deleteErr)
  42. }).then(uploadToGitHub)
  43. } else {
  44. console.log(`Current asset ${fileName} not found in existing assets; retrying upload.`)
  45. uploadToGitHub()
  46. }
  47. }).catch((getReleaseErr) => {
  48. console.log(`Fatal: Unable to get current release assets via getRelease! Error was:`, getReleaseErr)
  49. })
  50. } else {
  51. console.log(`Error retrying uploading ${fileName} to GitHub:`, err)
  52. process.exitCode = 1
  53. }
  54. })
  55. }
  56. uploadToGitHub()