Update Semantic
Fixes #40,#24
This commit is contained in:
parent
1715f27f44
commit
2027b94179
621 changed files with 172488 additions and 15939 deletions
182
web/semantic/tasks/admin/distributions/update.js
Normal file
182
web/semantic/tasks/admin/distributions/update.js
Normal file
|
@ -0,0 +1,182 @@
|
|||
/*******************************
|
||||
Update Repos
|
||||
*******************************/
|
||||
|
||||
/*
|
||||
|
||||
This task update all SUI individual distribution repos with new versions of distributions
|
||||
|
||||
* Commits changes from create repo
|
||||
* Pushes changes to GitHub
|
||||
* Tag new releases if version changed in main repo
|
||||
|
||||
*/
|
||||
|
||||
var
|
||||
gulp = require('gulp'),
|
||||
|
||||
// node dependencies
|
||||
console = require('better-console'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
git = require('gulp-git'),
|
||||
githubAPI = require('github'),
|
||||
requireDotFile = require('require-dot-file'),
|
||||
|
||||
// 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 distribution, to avoid issues
|
||||
stepRepo = function() {
|
||||
|
||||
index = index + 1;
|
||||
if(index >= total) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
var
|
||||
distribution = release.distributions[index],
|
||||
outputDirectory = path.resolve(path.join(release.outputRoot, distribution.toLowerCase() )),
|
||||
repoName = release.distRepoRoot + distribution,
|
||||
|
||||
gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git',
|
||||
repoURL = 'https://github.com/' + release.org + '/' + repoName + '/',
|
||||
|
||||
commitArgs = (oAuth.name !== undefined && oAuth.email !== undefined)
|
||||
? '--author "' + oAuth.name + ' <' + oAuth.email + '>"'
|
||||
: '',
|
||||
|
||||
distributionPackage = fs.existsSync(outputDirectory + 'package.json' )
|
||||
? require(outputDirectory + 'package.json')
|
||||
: false,
|
||||
|
||||
isNewVersion = (version && distributionPackage.version != version),
|
||||
|
||||
commitMessage = (isNewVersion)
|
||||
? 'Updated distribution to version ' + version
|
||||
: 'Updated files from main repo',
|
||||
|
||||
gitOptions = { cwd: outputDirectory },
|
||||
commitOptions = { args: commitArgs, cwd: outputDirectory },
|
||||
releaseOptions = { tag_name: version, owner: release.org, repo: repoName },
|
||||
|
||||
fileModeOptions = { args : 'config core.fileMode false', cwd: outputDirectory },
|
||||
usernameOptions = { args : 'config user.name "' + oAuth.name + '"', cwd: outputDirectory },
|
||||
emailOptions = { args : 'config user.email "' + oAuth.email + '"', cwd: outputDirectory },
|
||||
versionOptions = { args : 'rev-parse --verify HEAD', cwd: outputDirectory },
|
||||
|
||||
localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git')),
|
||||
canProceed = true
|
||||
;
|
||||
|
||||
|
||||
console.info('Processing repository:' + outputDirectory);
|
||||
|
||||
function setConfig() {
|
||||
git.exec(fileModeOptions, function() {
|
||||
git.exec(usernameOptions, function () {
|
||||
git.exec(emailOptions, function () {
|
||||
commitFiles();
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// standard path
|
||||
function commitFiles() {
|
||||
// commit files
|
||||
console.info('Committing ' + distribution + ' files', commitArgs);
|
||||
gulp.src('**/*', gitOptions)
|
||||
.pipe(git.add(gitOptions))
|
||||
.pipe(git.commit(commitMessage, commitOptions))
|
||||
.on('error', function(error) {
|
||||
// canProceed = false; bug in git commit <https://github.com/stevelacy/gulp-git/issues/49>
|
||||
})
|
||||
.on('finish', function(callback) {
|
||||
if(canProceed) {
|
||||
pushFiles();
|
||||
}
|
||||
else {
|
||||
console.info('Nothing new to commit');
|
||||
nextRepo();
|
||||
}
|
||||
})
|
||||
;
|
||||
}
|
||||
|
||||
// push changes to remote
|
||||
function pushFiles() {
|
||||
console.info('Pushing files for ' + distribution);
|
||||
git.push('origin', 'master', { args: '', cwd: outputDirectory }, function(error) {
|
||||
console.info('Push completed successfully');
|
||||
getSHA();
|
||||
});
|
||||
}
|
||||
|
||||
// gets SHA of last commit
|
||||
function getSHA() {
|
||||
git.exec(versionOptions, function(error, version) {
|
||||
version = version.trim();
|
||||
createRelease(version);
|
||||
});
|
||||
}
|
||||
|
||||
// create release on GitHub.com
|
||||
function createRelease(version) {
|
||||
if(version) {
|
||||
releaseOptions.target_commitish = version;
|
||||
}
|
||||
github.releases.createRelease(releaseOptions, function() {
|
||||
nextRepo();
|
||||
});
|
||||
}
|
||||
|
||||
// Steps to next repository
|
||||
function nextRepo() {
|
||||
console.log('Sleeping for 1 second...');
|
||||
// avoid rate throttling
|
||||
global.clearTimeout(timer);
|
||||
timer = global.setTimeout(stepRepo, 500);
|
||||
}
|
||||
|
||||
|
||||
if(localRepoSetup) {
|
||||
setConfig();
|
||||
}
|
||||
else {
|
||||
console.error('Repository must be setup before running update distributions');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
stepRepo();
|
||||
|
||||
};
|
Reference in a new issue