fix(travis): update travis task for spawn signature

This commit is contained in:
Evan Morikawa 2016-11-21 14:28:41 -08:00
parent 370d2b40aa
commit 7bfa07139c
2 changed files with 52 additions and 43 deletions

View file

@ -25,17 +25,17 @@ const fs = require('fs-plus');
// Which should return "accepted"
module.exports = (grunt) => {
let getCertData;
const {spawn, shouldPublishBuild} = require('./task-helpers')(grunt);
const {spawnP, shouldPublishBuild} = require('./task-helpers')(grunt);
const tmpKeychain = "n1-build.keychain";
const unlockKeychain = (keychain, keychainPass) => {
const args = ['unlock-keychain', '-p', keychainPass, keychain];
return spawn({cmd: "security", args});
return spawnP({cmd: "security", args});
};
const cleanupKeychain = () => {
if (fs.existsSync(path.join(process.env.HOME, "Library", "Keychains", tmpKeychain))) {
return spawn({cmd: "security", args: ["delete-keychain", tmpKeychain]});
return spawnP({cmd: "security", args: ["delete-keychain", tmpKeychain]});
}
return Promise.resolve()
};
@ -48,24 +48,24 @@ module.exports = (grunt) => {
// Create a custom, temporary keychain
return cleanupKeychain()
.then(() => spawn({cmd: "security", args: ["create-keychain", '-p', tmpPass, tmpKeychain]}))
.then(() => spawnP({cmd: "security", args: ["create-keychain", '-p', tmpPass, tmpKeychain]}))
// Make the custom keychain default, so xcodebuild will use it for signing
.then(() => spawn({cmd: "security", args: ["default-keychain", "-s", tmpKeychain]}))
.then(() => spawnP({cmd: "security", args: ["default-keychain", "-s", tmpKeychain]}))
// Unlock the keychain
.then(() => unlockKeychain(tmpKeychain, tmpPass))
// Set keychain timeout to 1 hour for long builds
.then(() => spawn({cmd: "security", args: ["set-keychain-settings", "-t", "3600", "-l", tmpKeychain]}))
.then(() => spawnP({cmd: "security", args: ["set-keychain-settings", "-t", "3600", "-l", tmpKeychain]}))
// Add certificates to keychain and allow codesign to access them
.then(() => spawn({cmd: "security", args: ["import", appleCert, "-k", tmpKeychain, "-T", codesignBin]}))
.then(() => spawnP({cmd: "security", args: ["import", appleCert, "-k", tmpKeychain, "-T", codesignBin]}))
.then(() => spawn({cmd: "security", args: ["import", nylasCert, "-k", tmpKeychain, "-T", codesignBin]}))
.then(() => spawnP({cmd: "security", args: ["import", nylasCert, "-k", tmpKeychain, "-T", codesignBin]}))
// Load the password for the private key from environment variables
.then(() => spawn({cmd: "security", args: ["import", nylasPrivateKey, "-k", tmpKeychain, "-P", keyPass, "-T", codesignBin]}));
.then(() => spawnP({cmd: "security", args: ["import", nylasPrivateKey, "-k", tmpKeychain, "-P", keyPass, "-T", codesignBin]}));
};
getCertData = () => {

View file

@ -1,42 +1,51 @@
const childProcess = require('child_process');
module.exports = (grunt) => {
return {
spawn(options, callback) {
const stdout = [];
const stderr = [];
let error = null;
const proc = childProcess.spawn(options.cmd, options.args, options.opts);
proc.stdout.on('data', data => stdout.push(data.toString()));
proc.stderr.on('data', data => stderr.push(data.toString()));
proc.on('error', (processError) => {
return error != null ? error : (error = processError)
});
proc.on('close', (exitCode, signal) => {
if (exitCode !== 0) { if (typeof error === 'undefined' || error === null) { error = new Error(signal); } }
const results = {stderr: stderr.join(''), stdout: stdout.join(''), code: exitCode};
if (exitCode !== 0) { grunt.log.error(results.stderr); }
return callback(error, results, exitCode);
});
},
function spawn(options, callback) {
const stdout = [];
const stderr = [];
let error = null;
const proc = childProcess.spawn(options.cmd, options.args, options.opts);
proc.stdout.on('data', data => stdout.push(data.toString()));
proc.stderr.on('data', data => stderr.push(data.toString()));
proc.on('error', (processError) => {
return error != null ? error : (error = processError)
});
proc.on('close', (exitCode, signal) => {
if (exitCode !== 0) { if (typeof error === 'undefined' || error === null) { error = new Error(signal); } }
const results = {stderr: stderr.join(''), stdout: stdout.join(''), code: exitCode};
if (exitCode !== 0) { grunt.log.error(results.stderr); }
return callback(error, results, exitCode);
});
}
shouldPublishBuild() {
if (!process.env.PUBLISH_BUILD) {
grunt.log.writeln("Skipping because PUBLISH_BUILD env is not set");
function shouldPublishBuild() {
if (!process.env.PUBLISH_BUILD) {
grunt.log.writeln("Skipping because PUBLISH_BUILD env is not set");
return false;
}
if (process.env.APPVEYOR) {
if (process.env.APPVEYOR_PULL_REQUEST_NUMBER) {
grunt.log.writeln("Skipping because this is a pull request");
return false;
}
if (process.env.APPVEYOR) {
if (process.env.APPVEYOR_PULL_REQUEST_NUMBER) {
grunt.log.writeln("Skipping because this is a pull request");
return false;
}
} else if (process.env.TRAVIS) {
if (process.env.TRAVIS_PULL_REQUEST !== "false") {
grunt.log.writeln("Skipping because TRAVIS_PULL_REQUEST env doesn't equal 'false'");
return false;
}
} else if (process.env.TRAVIS) {
if (process.env.TRAVIS_PULL_REQUEST !== "false") {
grunt.log.writeln("Skipping because TRAVIS_PULL_REQUEST env doesn't equal 'false'");
return false;
}
return true;
},
};
}
return true;
}
function spawnP(options) {
return new Promise((resolve, reject) => {
spawn(options, (error) => {
if (error) return reject(error);
return resolve()
})
})
}
return {spawn, spawnP, shouldPublishBuild};
}