gia-cli
Version:
Guardian US Interactive CLI tool
114 lines (91 loc) • 3.58 kB
JavaScript
var path = require( 'path' );
var sander = require( 'sander' );
var findup = require( 'findup-sync' );
var chalk = require( 'chalk' );
var checkVersion = require( '../utils/checkVersion' );
var cwd = process.cwd();
module.exports = function ( options ) {
checkVersion( options.flags.force ).then( function () {
var giafile = findup( 'giafile.js' );
if ( !giafile ) {
console.error( 'Could not find giafile.js. Aborting' );
process.exit( 1 );
}
cwd = path.dirname( giafile );
process.chdir( cwd );
if ( !sander.existsSync( 'gobblefile.js' ) ) {
console.error( 'Wow, this project is really old. You\'ll have to upgrade it manually. Terribly sorry about that' );
process.exit( 1 );
}
var pkg = JSON.parse( sander.readFileSync( 'package.json' ).toString() );
var gia = require( cwd + '/giafile.js' );
if ( pkg.dependencies ) {
// Install legacy version of gia-toolkit
console.log( '> setting gia-toolkit version to 0.0.1' );
if ( 'gia-toolkit' in pkg.dependencies ) pkg.dependencies[ 'gia-toolkit' ] = '0.0.1';
}
console.log( '> adding gobble-cli to devDependencies' );
pkg.devDependencies[ 'gobble-cli' ] = '0.4.2';
console.log( '> setting gobble version to 0.10.2' );
pkg.devDependencies[ 'gobble' ] = '0.10.2';
// create npm run scripts
if ( !pkg.scripts ) pkg.scripts = {};
var scripts = pkg.scripts;
var warnings = [];
// npm start
if ( !scripts.start ) {
console.log( '> adding start script' );
scripts.start = 'gobble -p ' + gia.port;
} else {
warnings.push( 'existing npm start script may cause issues' );
}
// npm run deploy
if ( !scripts.deploy ) {
console.log( '> adding deploy script' );
scripts.deploy = 'node scripts/deploy.js';
scripts.predeploy = 'npm run build';
sander.copyFileSync( __dirname, 'resources/scripts/deploy.js' ).to( 'scripts/deploy.js' );
// this is crude, but whatever
pkg.devDependencies.mime = '1.3.4';
pkg.devDependencies[ 'aws-sdk' ] = '2.2.4';
pkg.devDependencies.glob = '5.0.15';
pkg.devDependencies.filesize = '3.1.3';
pkg.devDependencies.stevedore = '0.1.4';
pkg.devDependencies.chalk = '1.1.1';
} else {
warnings.push( 'existing npm run deploy script may cause issues' );
}
// npm run build
if ( !scripts.build ) {
console.log( '> adding build script' );
scripts.build = 'gobble build -f .deploy';
} else {
warnings.push( 'existing npm run build script may cause issues' );
}
// npm run open
if ( !scripts.open ) {
console.log( '> adding open script' );
scripts.open = 'node scripts/open.js';
sander.copyFileSync( __dirname, 'resources/scripts/open.js' ).to( 'scripts/open.js' );
}
// npm run serve
if ( !scripts.serve ) {
console.log( '> adding serve script' );
scripts.serve = 'open http://localhost:5800 && npm start';
}
// copy over .babelrc and .eslintrc files
[ '.eslintrc', '.babelrc' ].forEach( function( file ) {
if ( !sander.existsSync( file ) ) {
console.log( '> creating', file );
sander.copyFileSync( __dirname, 'resources', file ).to( file );
}
});
// save updated package.json
console.log( '> saving updated package.json' );
sander.writeFileSync( 'package.json', JSON.stringify( pkg, null, ' ' ) + '\n' );
console.log( 'Now update your dependencies with ' + chalk.cyan( 'npm i' ) + ', then test with ' + chalk.cyan( 'npm start' ) + '. Upgrading old projects is an inexact science; test thoroughly before redeploying' );
warnings.forEach( function ( msg ) {
console.log( chalk.red( '* ' + msg ) );
});
});
}