1 changed files with 170 additions and 0 deletions
Unified View
Diff Options
@ -0,0 +1,170 @@ |
|||||
|
/******************************* |
||||
|
Init Repos |
||||
|
*******************************/ |
||||
|
|
||||
|
/* |
||||
|
|
||||
|
This task pulls the latest version of each component 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.components.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.components[index] |
||||
|
outputDirectory = path.resolve(release.outputRoot + component), |
||||
|
capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1), |
||||
|
repoName = release.repoRoot + capitalizedComponent, |
||||
|
|
||||
|
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('../components') == 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(); |
||||
|
|
||||
|
|
||||
|
}; |
Write
Preview
Loading…
Cancel
Save