Skip to content

Instantly share code, notes, and snippets.

@subhog
Last active August 29, 2015 14:11
Show Gist options
  • Save subhog/f50c2055c2733fdf6343 to your computer and use it in GitHub Desktop.
Save subhog/f50c2055c2733fdf6343 to your computer and use it in GitHub Desktop.
impact-dev
var Term = {
BLACK: '\033[30m',
RED: '\033[31m',
GREEN: '\033[32m',
YELLOW: '\033[33m',
BLUE: '\033[34m',
MAGENTA: '\033[35m',
CYAN: '\033[36m',
WHITE: '\033[37m',
GRAY: '\033[38m',
DEFAULT: '\033[39m',
NONE: '\033[0m',
};
var Exec = require('child_process').exec;
var Spawn = require('child_process').spawn;
var Fs = require('fs');
var Path = require('path');
var display = function(error, stdout, stderr) {
if(error) console.log(Term.RED, error, Term.NONE);
if(stdout) console.log(Term.WHITE, stdout.toString(), Term.NONE);
if(stderr) console.log(Term.MAGENTA, stderr.toString(), Term.NONE);
};
var appExists = function() {
return Fs.existsSync(Path.join(process.cwd(), 'app'));
};
var packagesExist = function() {
return Fs.existsSync(Path.join(process.cwd(), 'packages'));
};
var packageExists = function(name) {
return Fs.existsSync(Path.join(process.cwd(), 'app', 'packages', name));
};
//================================================================================
var createApp = function(done) {
if(appExists()) {
console.log(Term.GREEN, "Application folder already exists", Term.NONE);
return done();
}
console.log(Term.CYAN, "Cloning application template", Term.NONE);
Exec('git clone https://github.com/anticoders/impact-seed', function(error, stdout, stderr) {
display(error, stdout, stderr);
Fs.renameSync(Path.join(process.cwd(), 'impact-seed'), Path.join(process.cwd(), 'app'));
Exec('rm -r .git', {
cwd: Path.join(process.cwd(), 'app'),
}, function(error, stdout, stderr) {
display(error, stdout, stderr);
done();
});
});
};
//================================================================================
var createPackages = function(done) {
if(packagesExist()) {
console.log(Term.GREEN, "Package folder already exists", Term.NONE);
return done();
}
console.log(Term.CYAN, "Creating packages folder", Term.NONE);
Fs.mkdirSync(Path.join(process.cwd(), 'packages'));
done();
};
//================================================================================
var createPackage = function(repo, done) {
var name = repo.split('/').reverse()[0];
if(packageExists(name)) {
console.log(Term.GREEN, "Package " + name + " already exists", Term.NONE);
return done();
}
console.log(Term.CYAN, "Cloning", name, Term.NONE);
Exec('git clone ' + repo, {
cwd: Path.join(process.cwd(), 'packages'),
}, function(error, stdout, stderr) {
display(error, stdout, stderr);
Fs.symlink(
Path.join(process.cwd(), 'packages', name),
Path.join(process.cwd(), 'app', 'packages', name),
function(error) {
display(error);
done();
}
);
});
};
var packages = [
'https://github.com/anticoders/meteor-entry',
'https://github.com/anticoders/impact',
'https://github.com/anticoders/impact-theme-basic',
'https://github.com/anticoders/impact-theme-layouts',
'https://github.com/anticoders/impact-theme-semantic',
'https://github.com/anticoders/impact-module-blog',
'https://github.com/anticoders/impact-module-newsletter',
'https://github.com/anticoders/impact-widget-cover',
];
(function() {
createApp(function() {
createPackages(function() {
var idx = 0;
var iterate = function() {
if(idx >= packages.length) return done();
idx++;
createPackage(packages[idx-1], iterate);
};
var done = function() {
console.log("========================================");
console.log("All done!");
console.log("");
};
iterate();
});
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment