Update Semantic
Fixes #40,#24
This commit is contained in:
parent
1715f27f44
commit
2027b94179
621 changed files with 172488 additions and 15939 deletions
170
web/semantic/tasks/admin/distributions/init.js
Normal file
170
web/semantic/tasks/admin/distributions/init.js
Normal file
|
@ -0,0 +1,170 @@
|
|||
/*******************************
|
||||
Init Dist Repos
|
||||
*******************************/
|
||||
|
||||
/*
|
||||
|
||||
This task pulls the latest version of distribution from GitHub
|
||||
|
||||
* Creates new repo if doesnt exist (locally & GitHub)
|
||||
* Adds remote it doesnt exists
|
||||
* Pulls latest changes from repo
|
||||
|
||||
*/
|
||||
|
||||
var
|
||||
gulp = require('gulp'),
|
||||
|
||||
// node dependencies
|
||||
console = require('better-console'),
|
||||
del = require('del'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
git = require('gulp-git'),
|
||||
githubAPI = require('github'),
|
||||
mkdirp = require('mkdirp'),
|
||||
|
||||
// admin files
|
||||
github = require('../../config/admin/github.js'),
|
||||
release = require('../../config/admin/release'),
|
||||
project = require('../../config/project/release'),
|
||||
|
||||
|
||||
// oAuth configuration for GitHub
|
||||
oAuth = fs.existsSync(__dirname + '/../../config/admin/oauth.js')
|
||||
? require('../../config/admin/oauth')
|
||||
: false,
|
||||
|
||||
// shorthand
|
||||
version = project.version
|
||||
;
|
||||
|
||||
module.exports = function(callback) {
|
||||
|
||||
var
|
||||
index = -1,
|
||||
total = release.distributions.length,
|
||||
timer,
|
||||
stream,
|
||||
stepRepo
|
||||
;
|
||||
|
||||
if(!oAuth) {
|
||||
console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');
|
||||
return;
|
||||
}
|
||||
|
||||
// Do Git commands synchronously per component, to avoid issues
|
||||
stepRepo = function() {
|
||||
|
||||
index = index + 1;
|
||||
|
||||
if(index >= total) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
var
|
||||
component = release.distributions[index],
|
||||
lowerCaseComponent = component.toLowerCase(),
|
||||
outputDirectory = path.resolve(release.outputRoot + lowerCaseComponent),
|
||||
repoName = release.distRepoRoot + component,
|
||||
|
||||
gitOptions = { cwd: outputDirectory },
|
||||
pullOptions = { args: '-q', cwd: outputDirectory, quiet: true },
|
||||
resetOptions = { args: '-q --hard', cwd: outputDirectory, quiet: true },
|
||||
|
||||
gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git',
|
||||
repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
|
||||
localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git'))
|
||||
;
|
||||
|
||||
console.log('Processing repository: ' + outputDirectory);
|
||||
|
||||
// create folder if doesn't exist
|
||||
if( !fs.existsSync(outputDirectory) ) {
|
||||
mkdirp.sync(outputDirectory);
|
||||
}
|
||||
|
||||
// clean folder
|
||||
if(release.outputRoot.search('../repos') == 0) {
|
||||
console.info('Cleaning dir', outputDirectory);
|
||||
del.sync([outputDirectory + '**/*'], {silent: true, force: true});
|
||||
}
|
||||
|
||||
// set-up local repo
|
||||
function setupRepo() {
|
||||
if(localRepoSetup) {
|
||||
addRemote();
|
||||
}
|
||||
else {
|
||||
initRepo();
|
||||
}
|
||||
}
|
||||
|
||||
function initRepo() {
|
||||
console.info('Initializing repository for ' + component);
|
||||
git.init(gitOptions, function(error) {
|
||||
if(error) {
|
||||
console.error('Error initializing repo', error);
|
||||
}
|
||||
addRemote();
|
||||
});
|
||||
}
|
||||
|
||||
function createRepo() {
|
||||
console.info('Creating GitHub repo ' + repoURL);
|
||||
github.repos.createFromOrg({
|
||||
org : release.org,
|
||||
name : repoName,
|
||||
homepage : release.homepage
|
||||
}, function() {
|
||||
setupRepo();
|
||||
});
|
||||
}
|
||||
|
||||
function addRemote() {
|
||||
console.info('Adding remote origin as ' + gitURL);
|
||||
git.addRemote('origin', gitURL, gitOptions, function(){
|
||||
pullFiles();
|
||||
});
|
||||
}
|
||||
|
||||
function pullFiles() {
|
||||
console.info('Pulling ' + component + ' files');
|
||||
git.pull('origin', 'master', pullOptions, function(error) {
|
||||
resetFiles();
|
||||
});
|
||||
}
|
||||
|
||||
function resetFiles() {
|
||||
console.info('Resetting files to head');
|
||||
git.reset('HEAD', resetOptions, function(error) {
|
||||
nextRepo();
|
||||
});
|
||||
}
|
||||
|
||||
function nextRepo() {
|
||||
//console.log('Sleeping for 1 second...');
|
||||
// avoid rate throttling
|
||||
global.clearTimeout(timer);
|
||||
timer = global.setTimeout(function() {
|
||||
stepRepo()
|
||||
}, 0);
|
||||
}
|
||||
|
||||
|
||||
if(localRepoSetup) {
|
||||
pullFiles();
|
||||
}
|
||||
else {
|
||||
setupRepo();
|
||||
// createRepo() only use to create remote repo (easier to do manually)
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
stepRepo();
|
||||
|
||||
|
||||
};
|
Reference in a new issue