chore: refactor scripts for octokit update (#16284)

* chore: refactor scripts for octokit

* update release script

* update more octokit scripts

* cleanup

* remove unecessary refactor

* fixup package lock
This commit is contained in:
Shelley Vohr 2019-01-08 12:05:58 -08:00 committed by GitHub
parent 434f1368a0
commit 000be5d1d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 444 additions and 280 deletions

View file

@ -13,7 +13,6 @@ const args = require('minimist')(process.argv.slice(2), {
})
const fs = require('fs')
const { execSync } = require('child_process')
const GitHub = require('github')
const nugget = require('nugget')
const pkg = require('../package.json')
const pkgVersion = `v${pkg.version}`
@ -23,25 +22,27 @@ const fail = '\u2717'.red
const sumchecker = require('sumchecker')
const temp = require('temp').track()
const { URL } = require('url')
const octokit = require('@octokit/rest')()
octokit.authenticate({
type: 'token',
token: process.env.ELECTRON_GITHUB_TOKEN
})
const targetRepo = pkgVersion.indexOf('nightly') > 0 ? 'nightlies' : 'electron'
let failureCount = 0
const github = new GitHub({
followRedirects: false
})
github.authenticate({ type: 'token', token: process.env.ELECTRON_GITHUB_TOKEN })
async function getDraftRelease (version, skipValidation) {
const releaseInfo = await github.repos.getReleases({ owner: 'electron', repo: targetRepo })
let versionToCheck
if (version) {
versionToCheck = version
} else {
versionToCheck = pkgVersion
}
const drafts = releaseInfo.data
.filter(release => release.tag_name === versionToCheck &&
release.draft === true)
const releaseInfo = await octokit.repos.listReleases({
owner: 'electron',
repo: targetRepo
})
const versionToCheck = version || pkgVersion
const drafts = releaseInfo.data.filter(release => {
return release.tag_name === versionToCheck && release.draft === true
})
const draft = drafts[0]
if (!skipValidation) {
failureCount = 0
@ -165,9 +166,7 @@ function runScript (scriptName, scriptArgs, cwd) {
const scriptOptions = {
encoding: 'UTF-8'
}
if (cwd) {
scriptOptions.cwd = cwd
}
if (cwd) scriptOptions.cwd = cwd
try {
return execSync(scriptCommand, scriptOptions)
} catch (err) {
@ -195,10 +194,10 @@ async function createReleaseShasums (release) {
const existingAssets = release.assets.filter(asset => asset.name === fileName)
if (existingAssets.length > 0) {
console.log(`${fileName} already exists on GitHub; deleting before creating new file.`)
await github.repos.deleteAsset({
await octokit.repos.deleteReleaseAsset({
owner: 'electron',
repo: targetRepo,
id: existingAssets[0].id
asset_id: existingAssets[0].id
}).catch(err => {
console.log(`${fail} Error deleting ${fileName} on GitHub:`, err)
})
@ -206,26 +205,30 @@ async function createReleaseShasums (release) {
console.log(`Creating and uploading the release ${fileName}.`)
const scriptPath = path.join(__dirname, 'merge-electron-checksums.py')
const checksums = runScript(scriptPath, ['-v', pkgVersion])
console.log(`${pass} Generated release SHASUMS.`)
const filePath = await saveShaSumFile(checksums, fileName)
console.log(`${pass} Created ${fileName} file.`)
await uploadShasumFile(filePath, fileName, release)
await uploadShasumFile(filePath, fileName, release.id)
console.log(`${pass} Successfully uploaded ${fileName} to GitHub.`)
}
async function uploadShasumFile (filePath, fileName, release) {
const githubOpts = {
owner: 'electron',
repo: targetRepo,
id: release.id,
filePath,
async function uploadShasumFile (filePath, fileName, releaseId) {
const uploadUrl = `https://uploads.github.com/repos/electron/${targetRepo}/releases/${releaseId}/assets{?name,label}`
return octokit.repos.uploadReleaseAsset({
url: uploadUrl,
headers: {
'content-type': 'text/plain',
'content-size': fs.statSync(filePath).size
},
file: fs.createReadStream(filePath),
name: fileName
}
return github.repos.uploadAsset(githubOpts)
.catch(err => {
console.log(`${fail} Error uploading ${filePath} to GitHub:`, err)
process.exit(1)
})
}).catch(err => {
console.log(`${fail} Error uploading ${filePath} to GitHub:`, err)
process.exit(1)
})
}
function saveShaSumFile (checksums, fileName) {
@ -249,18 +252,16 @@ function saveShaSumFile (checksums, fileName) {
}
async function publishRelease (release) {
const githubOpts = {
return octokit.repos.updateRelease({
owner: 'electron',
repo: targetRepo,
id: release.id,
release_id: release.id,
tag_name: release.tag_name,
draft: false
}
return github.repos.editRelease(githubOpts)
.catch(err => {
console.log(`${fail} Error publishing release:`, err)
process.exit(1)
})
}).catch(err => {
console.log(`${fail} Error publishing release:`, err)
process.exit(1)
})
}
async function makeRelease (releaseToValidate) {
@ -280,6 +281,7 @@ async function makeRelease (releaseToValidate) {
uploadIndexJson()
await createReleaseShasums(draftRelease)
// Fetch latest version of release before verifying
draftRelease = await getDraftRelease(pkgVersion, true)
await validateReleaseAssets(draftRelease)
@ -303,24 +305,26 @@ async function makeTempDir () {
async function verifyAssets (release) {
const downloadDir = await makeTempDir()
const githubOpts = {
owner: 'electron',
repo: targetRepo,
headers: {
Accept: 'application/octet-stream'
}
}
console.log(`Downloading files from GitHub to verify shasums`)
const shaSumFile = 'SHASUMS256.txt'
let filesToCheck = await Promise.all(release.assets.map(async (asset) => {
githubOpts.id = asset.id
const assetDetails = await github.repos.getAsset(githubOpts)
let filesToCheck = await Promise.all(release.assets.map(async asset => {
const assetDetails = await octokit.repos.getReleaseAsset({
owner: 'electron',
repo: targetRepo,
asset_id: asset.id,
headers: {
Accept: 'application/octet-stream'
}
})
await downloadFiles(assetDetails.meta.location, downloadDir, asset.name)
return asset.name
})).catch(err => {
console.log(`${fail} Error downloading files from GitHub`, err)
process.exit(1)
})
filesToCheck = filesToCheck.filter(fileName => fileName !== shaSumFile)
let checkerOpts
await validateChecksums({