Skip to content

Commit

Permalink
build: fix release asset download for now (#16486)
Browse files Browse the repository at this point in the history
  • Loading branch information
codebytere committed Jan 22, 2019
1 parent 6cba2c5 commit 7df531b
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 54 deletions.
81 changes: 53 additions & 28 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@
"@octokit/rest": "^16.3.2",
"aliasify": "^2.1.0",
"asar": "^0.11.0",
"axios": "^0.18.0",
"browserify": "^13.1.0",
"check-for-leaks": "^1.0.2",
"clang-format": "^1.2.3",
"colors": "^1.1.2",
"content-disposition": "^0.5.3",
"dotenv-safe": "^4.0.4",
"dugite": "^1.45.0",
"electron-docs-linter": "^2.4.0",
Expand Down Expand Up @@ -84,4 +86,4 @@
"remark -qf"
]
}
}
}
66 changes: 41 additions & 25 deletions script/release.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,11 @@ const args = require('minimist')(process.argv.slice(2), {
boolean: [
'validateRelease',
'skipVersionCheck',
'automaticRelease',
'verboseNugget'
],
default: { 'verboseNugget': false }
'automaticRelease'
]
})
const fs = require('fs')
const { execSync } = require('child_process')
const nugget = require('nugget')
const pkg = require('../package.json')
const pkgVersion = `v${pkg.version}`
const pass = '\u2713'.green
Expand All @@ -22,6 +19,8 @@ const fail = '\u2717'.red
const sumchecker = require('sumchecker')
const temp = require('temp').track()
const { URL } = require('url')
const axios = require('axios')
const contentDisposition = require('content-disposition')

const octokit = require('@octokit/rest')()
octokit.authenticate({
Expand All @@ -46,11 +45,11 @@ async function getDraftRelease (version, skipValidation) {
const draft = drafts[0]
if (!skipValidation) {
failureCount = 0
check(drafts.length === 1, 'one draft exists', true)
check(drafts.length === 1, 'Draft exists.', true)
if (versionToCheck.indexOf('beta') > -1) {
check(draft.prerelease, 'draft is a prerelease')
check(draft.prerelease, 'Draft is a prerelease.')
}
check(draft.body.length > 50 && !draft.body.includes('(placeholder)'), 'draft has release notes')
check(draft.body.length > 50 && !draft.body.includes('(placeholder)'), 'Draft has release notes.')
check((failureCount === 0), `Draft release looks good to go.`, true)
}
return draft
Expand Down Expand Up @@ -315,12 +314,10 @@ async function verifyAssets (release) {
const assetDetails = await octokit.repos.getReleaseAsset({
owner: 'electron',
repo: targetRepo,
asset_id: asset.id,
headers: {
Accept: 'application/octet-stream'
}
asset_id: asset.id
})
await downloadFiles(assetDetails.meta.location, downloadDir, asset.name)
const downloadURL = assetDetails.data.url.replace('://', '://' + process.env.ELECTRON_GITHUB_TOKEN + ':@')
await downloadFiles(downloadURL, downloadDir, asset.name)
return asset.name
})).catch(err => {
console.log(`${fail} Error downloading files from GitHub`, err)
Expand All @@ -339,21 +336,40 @@ async function verifyAssets (release) {
})
}

function downloadFiles (urls, directory, targetName) {
return new Promise((resolve, reject) => {
const nuggetOpts = { dir: directory }
nuggetOpts.quiet = !args.verboseNugget
if (targetName) nuggetOpts.target = targetName
async function downloadFiles (urls, directory, targetName) {
const allUrls = Array.isArray(urls) ? urls : [urls]

nugget(urls, nuggetOpts, (err) => {
if (err) {
reject(err)
} else {
console.log(`${pass} all files downloaded successfully!`)
resolve()
await Promise.all(allUrls.map(async (targetUrl) => {
const axiosResponse = await axios.get(targetUrl, {
responseType: 'stream',
headers: {
Accept: 'application/octet-stream'
}
})
})

if (axiosResponse.status !== 200) {
throw new Error(`Expected 200 status fetching "${targetUrl}" but got "${axiosResponse.status}"`)
}
let fileName = targetName
if (!fileName) {
if (axiosResponse.headers['content-disposition']) {
const parsed = contentDisposition.parse(axiosResponse.headers['content-disposition'])
fileName = parsed.parameters.filename
}
}
if (!fileName) {
const url = new URL(targetUrl)
fileName = path.basename(url.pathname)
}
if (!fileName) throw new Error(`Unknown filename for request: "${targetUrl}"`)
const writeStream = fs.createWriteStream(path.resolve(directory, fileName))
axiosResponse.data.pipe(writeStream)
return new Promise((resolve, reject) => {
writeStream.on('error', reject)
axiosResponse.data.on('error', reject)
writeStream.on('close', resolve)
})
}))
}

async function verifyShasums (urls, isS3) {
Expand Down

0 comments on commit 7df531b

Please sign in to comment.