jlukic
9 years ago
1 changed files with 170 additions and 0 deletions
Split 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