add final "integration test" before running npm publish on the prebuilt

This commit is contained in:
Vanessa Yuen 2017-08-01 00:50:40 -04:00
parent cb93f035aa
commit eaa63c880e
3 changed files with 30 additions and 16 deletions

2
.gitignore vendored
View file

@ -25,7 +25,7 @@
/build/ /build/
/dist/ /dist/
/external_binaries/ /external_binaries/
/node_modules node_modules
/out/ /out/
/vendor/.gclient /vendor/.gclient
/vendor/debian_jessie_amd64-sysroot/ /vendor/debian_jessie_amd64-sysroot/

View file

@ -4,8 +4,6 @@ const path = require('path')
const sinon = require('sinon') const sinon = require('sinon')
const admZip = require('adm-zip') const admZip = require('adm-zip')
const temp = require('temp') const temp = require('temp')
// var pathExists = require('path-exists')
// var getHomePath = require('home-path')()
let sandbox let sandbox
const mockEnv = { const mockEnv = {
@ -22,7 +20,6 @@ temp.track()
tape('set up', (t) => { tape('set up', (t) => {
sandbox = sinon.sandbox.create() sandbox = sinon.sandbox.create()
tempDir = temp.mkdirSync('electron-install') tempDir = temp.mkdirSync('electron-install')
console.log(tempDir)
t.end() t.end()
}) })

View file

@ -7,7 +7,8 @@ const temp = require('temp'),
childProcess = require('child_process'), childProcess = require('child_process'),
GitHubApi = require('github'), GitHubApi = require('github'),
request = require('request'), request = require('request'),
rootPackageJson = require('../package.json') rootPackageJson = require('../package.json'),
assert = require('assert')
const github = new GitHubApi({ const github = new GitHubApi({
// debug: true, // debug: true,
@ -48,9 +49,9 @@ new Promise((resolve, reject) => {
resolve(dirPath) resolve(dirPath)
} }
}) })
}).then((dirPath) => { })
.then((dirPath) => {
tempDir = dirPath tempDir = dirPath
// copy files from `/npm` to temp directory // copy files from `/npm` to temp directory
files.forEach((name) => { files.forEach((name) => {
fs.writeFileSync( fs.writeFileSync(
@ -72,22 +73,21 @@ new Promise((resolve, reject) => {
owner: 'electron', owner: 'electron',
repo: 'electron', repo: 'electron',
}) })
})
}).then((releases) => { .then((releases) => {
// download electron.d.ts from draft release // download electron.d.ts from draft release
const draftRelease = releases.data.find( const draftRelease = releases.data.find(
// (release) => release.draft && release.tag_name === `v${rootPackageJson.version}` (release) => release.draft && release.tag_name === `v${rootPackageJson.version}`
(release) => release.draft && release.tag_name === `test` // (release) => release.draft && release.tag_name === `test`
) )
if (!draftRelease) { if (!draftRelease) {
throw `cannot find release with tag v${rootPackageJson.version}` throw `cannot find release with tag v${rootPackageJson.version}`
} }
return draftRelease.assets.find((asset) => asset.name === 'electron.d.ts') return draftRelease.assets.find((asset) => asset.name === 'electron.d.ts')
})
}).then((tsdAsset) => { .then((tsdAsset) => {
if (!tsdAsset) { if (!tsdAsset) {
throw 'cannot find electron.d.ts from draft release assets' throw `cannot find electron.d.ts from v${rootPackageJson.version} draft release assets`
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
request.get({ request.get({
@ -107,5 +107,22 @@ new Promise((resolve, reject) => {
}) })
}) })
}) })
.then(() => childProcess.execSync('npm publish', { cwd: tempDir })) .then(() => childProcess.execSync('npm pack', { cwd: tempDir }))
.then(() => {
// test that the package can install electron prebuilt from /dist
const distDir = path.join(__dirname, '..', 'dist')
const tarballPath = path.join(tempDir, `electron-${rootPackageJson.version}.tgz`)
return new Promise((resolve, reject) => {
childProcess.execSync(`npm install ${tarballPath} --force --silent`, {
env: Object.assign({}, process.env, { electron_config_cache: distDir }),
cwd: tempDir,
})
const checkVersion = childProcess.exec(`${path.join(tempDir, 'node_modules', '.bin', 'electron')} -v`)
checkVersion.stdout.on('data', (data) => {
assert.strictEqual(data.trim(), `v${rootPackageJson.version}`)
resolve(tarballPath)
})
})
})
.then((tarballPath) => childProcess.execSync(`npm publish ${tarballPath}`))
.catch((err) => console.error(`Error: ${err}`)) .catch((err) => console.error(`Error: ${err}`))