pulsar/script/cibuild

120 lines
3.7 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env node
2013-10-14 12:29:26 +04:00
var cp = require('./utils/child-process-wrapper.js');
var crypto = require('crypto')
2015-11-17 19:41:45 +03:00
var fingerprint = require('./utils/fingerprint')
2013-10-14 12:29:26 +04:00
var fs = require('fs');
var path = require('path');
2012-08-31 21:43:21 +04:00
2013-10-14 12:29:26 +04:00
process.chdir(path.dirname(__dirname));
2013-06-21 02:26:00 +04:00
2013-10-14 12:29:26 +04:00
var homeDir = process.platform == 'win32' ? process.env.USERPROFILE : process.env.HOME;
2013-06-21 02:41:23 +04:00
function loadEnvironmentVariables(filePath) {
try {
var lines = fs.readFileSync(filePath, 'utf8').trim().split('\n');
for (i in lines) {
var parts = lines[i].split('=');
var key = parts[0].trim();
var value = parts[1].trim().substr(1, parts[1].length - 2);
process.env[key] = value;
2013-10-14 12:29:26 +04:00
}
2014-06-14 02:05:36 +04:00
} catch(error) {
2014-06-14 02:12:06 +04:00
console.error("Failed to load environment variables: " + filePath, error.code);
2014-06-14 02:05:36 +04:00
}
2013-10-14 12:29:26 +04:00
}
2013-10-04 08:42:15 +04:00
function readEnvironmentVariables() {
if (process.env.JANKY_SHA1) {
if (process.platform === 'win32') {
loadEnvironmentVariables(path.resolve('/jenkins/config/atomcredentials'));
} else if (process.platform === 'darwin') {
loadEnvironmentVariables('/var/lib/jenkins/config/atomcredentials');
loadEnvironmentVariables('/var/lib/jenkins/config/xcodekeychain');
}
}
}
function setEnvironmentVariables() {
if (process.platform === 'linux') {
// Use Clang for building native code, the GCC on Precise is too old.
process.env.CC = 'clang';
process.env.CXX = 'clang++';
process.env.npm_config_clang = '1';
2015-11-21 05:03:21 +03:00
} else if (process.platform === 'win32') {
2015-11-21 05:03:14 +03:00
process.env.BUILD_ATOM_RELEASES_S3_KEY = process.env.BUILD_ATOM_WIN_RELEASES_S3_KEY
process.env.BUILD_ATOM_RELEASES_S3_SECRET = process.env.BUILD_ATOM_WIN_RELEASES_S3_SECRET
process.env.BUILD_ATOM_RELEASES_S3_BUCKET = process.env.BUILD_ATOM_WIN_RELEASES_S3_BUCKET
2014-06-14 02:05:36 +04:00
}
}
function removeNodeModules() {
2015-11-17 19:41:45 +03:00
if (fingerprint.fingerprintMatches()) {
console.log('node_modules matches current fingerprint ' + fingerprint.fingerprint() + ' - not removing')
return
}
var fsPlus;
try {
fsPlus = require('fs-plus');
} catch (error) {
return;
}
try {
fsPlus.removeSync(path.resolve(__dirname, '..', 'node_modules'));
} catch (error) {
console.error(error.message);
process.exit(1);
}
}
function removeTempFolders() {
var fsPlus;
try {
fsPlus = require('fs-plus');
} catch (error) {
return;
}
var temp = require('os').tmpdir();
if (!fsPlus.isDirectorySync(temp))
return;
var deletedFolders = 0;
fsPlus.readdirSync(temp).filter(function(folderName) {
return folderName.indexOf('npm-') === 0;
}).forEach(function(folderName) {
try {
fsPlus.removeSync(path.join(temp, folderName));
deletedFolders++;
} catch (error) {
console.error("Failed to delete npm temp folder: " + error.message);
}
});
if (deletedFolders > 0)
console.log("Deleted " + deletedFolders + " npm folders from temp directory");
}
2013-10-27 02:03:21 +04:00
readEnvironmentVariables();
setEnvironmentVariables();
removeNodeModules();
removeTempFolders();
2015-03-26 22:33:32 +03:00
cp.safeExec.bind(global, 'npm install npm --loglevel error', {cwd: path.resolve(__dirname, '..', 'build')}, function() {
2014-05-27 21:25:23 +04:00
cp.safeExec.bind(global, 'node script/bootstrap', function(error) {
if (error)
process.exit(1);
require('fs-plus').removeSync.bind(global, path.join(homeDir, '.atom'))
var async = require('async');
var gruntPath = path.join('build', 'node_modules', '.bin', 'grunt') + (process.platform === 'win32' ? '.cmd' : '');
var tasks = [
2015-11-17 19:41:45 +03:00
cp.safeExec.bind(global, 'git clean -dff -e node_modules'), // If we left them behind in removeNodeModules() they are OK to use
cp.safeExec.bind(global, gruntPath + ' ci --gruntfile build/Gruntfile.coffee --stack --no-color')
2014-05-27 21:25:23 +04:00
]
async.series(tasks, function(error) {
process.exit(error ? 1 : 0);
});
})();
2013-10-27 02:07:20 +04:00
})();