Current File : //usr/lib/node_modules/bower/publish.js |
var tmp = require('tmp');
var fs = require('fs');
var path = require('path');
var glob = require('glob');
var childProcess = require('child_process');
var arraydiff = require('arr-diff');
var wrench = require('wrench');
var jsonPackage = require('./package');
if (
childProcess
.execSync('git rev-parse --abbrev-ref HEAD')
.toString()
.trim() !== 'master'
) {
console.log('You need to release bower from the "master" branch');
process.exit(1);
}
var dir = path.join(tmp.dirSync().name, 'package');
console.log('\nInstalling production bundle in:');
console.log(dir + '\n');
wrench.copyDirSyncRecursive(__dirname, dir, {
forceDelete: true,
include: function(path) {
return !path.match(/node_modules|\.git|test/);
}
});
delete jsonPackage.scripts;
delete jsonPackage.private;
jsonPackage.workspaces.forEach(function(name) {
jsonPackage.dependencies[name.split('/').reverse()[0]] = 'file:./' + name;
});
delete jsonPackage.workspaces;
fs.writeFileSync(
path.resolve(dir, 'package.json'),
JSON.stringify(jsonPackage, null, ' ') + '\n'
);
console.log('Installing production dependencies...');
childProcess.execSync('yarn --production', {
cwd: dir,
stdio: [0, 1, 2]
});
delete jsonPackage.dependencies;
delete jsonPackage.resolutions;
delete jsonPackage['lint-staged'];
delete jsonPackage.devDependencies;
delete jsonPackage.files;
fs.writeFileSync(
path.resolve(dir, 'package.json'),
JSON.stringify(jsonPackage, null, ' ') + '\n'
);
glob.sync(path.join(dir, '**', '.npmignore')).forEach(function(file) {
fs.rmSync(file);
});
fs.writeFileSync(path.resolve(dir, '.npmignore'), '');
console.log('Moving node_modules to lib directory...');
wrench.copyDirSyncRecursive(
path.resolve(dir, 'node_modules'),
path.resolve(dir, 'lib', 'node_modules')
);
wrench.rmdirSyncRecursive(path.resolve(dir, 'node_modules'));
glob.sync(path.join(dir, '**', 'package.json')).forEach(function(file) {
console.log(file);
var json = JSON.parse(fs.readFileSync(file));
delete json.files;
fs.writeFileSync(file, JSON.stringify(json, null, ' ') + '\n');
});
console.log('Testing bower on sample project...');
childProcess.execSync(
'cd test/sample && rm -rf bower_components && ' +
dir +
'/bin/bower install --force',
{ stdio: [0, 1, 2] }
);
var expectedPackages = (
'SHA-1 ace-builds almond angular angular-animate angular-bootstrap angular-charts angular-contenteditable ' +
'angular-deckgrid angular-fullscreen angular-gravatar angular-hotkeys angular-local-storage angular-marked ' +
'angular-moment angular-sanitize angular-touch angular-ui-router angular-ui-sortable ' +
'angulartics asEvented bootstrap coffee-script d3 es6-shim font-awesome howler jquery ' +
'jquery-ui jquery-waypoints js-beautify lodash lz-string marked moment ng-file-upload peerjs ' +
'requirejs restangular slimScroll slimScrollHorizontal venturocket-angular-slider'
).split(' ');
var installedPackages = fs.readdirSync('./test/sample/bower_components');
var installedDiff = arraydiff(expectedPackages, installedPackages);
if (installedDiff.length > 0) {
console.log('ERROR. Some packages were not installed by bower: ');
console.log(installedDiff.join(', '));
process.exit(1);
}
var tgzName = 'bower-' + jsonPackage.version + '.tgz';
childProcess.execSync('npm pack', {
cwd: dir,
stdio: [0, 1, 2]
});
fs.copyFileSync(path.join(dir, tgzName), path.join(__dirname, tgzName));
console.log('All done!');
console.log('You need to publish prerelease and release manually:');
console.log('');
console.log('- npm install -g ' + tgzName);
console.log('- npm publish ' + tgzName + ' --tag beta');
console.log('- npm dist-tag add bower@' + jsonPackage.version + ' latest');