11 changed files with 527 additions and 106 deletions
Unified View
Diff Options
-
3tasks/admin/components/create.js
-
28tasks/admin/components/init.js
-
6tasks/admin/components/update.js
-
109tasks/admin/distributions/create.js
-
170tasks/admin/distributions/init.js
-
177tasks/admin/distributions/update.js
-
64tasks/admin/register-repos.js
-
13tasks/admin/release-all.js
-
16tasks/admin/release.js
-
28tasks/collections/admin.js
-
19tasks/config/admin/release.js
@ -0,0 +1,109 @@ |
|||||
|
/******************************* |
||||
|
Create Distributions |
||||
|
*******************************/ |
||||
|
|
||||
|
/* |
||||
|
This will create individual distribution repositories for each SUI distribution |
||||
|
|
||||
|
* copy distribution files to release |
||||
|
* update package.json file |
||||
|
*/ |
||||
|
|
||||
|
var |
||||
|
gulp = require('gulp'), |
||||
|
|
||||
|
// node dependencies
|
||||
|
console = require('better-console'), |
||||
|
del = require('del'), |
||||
|
fs = require('fs'), |
||||
|
path = require('path'), |
||||
|
runSequence = require('run-sequence'), |
||||
|
|
||||
|
// admin dependencies
|
||||
|
concatFileNames = require('gulp-concat-filenames'), |
||||
|
debug = require('gulp-debug'), |
||||
|
flatten = require('gulp-flatten'), |
||||
|
git = require('gulp-git'), |
||||
|
jsonEditor = require('gulp-json-editor'), |
||||
|
plumber = require('gulp-plumber'), |
||||
|
rename = require('gulp-rename'), |
||||
|
replace = require('gulp-replace'), |
||||
|
tap = require('gulp-tap'), |
||||
|
|
||||
|
// config
|
||||
|
config = require('../config/user'), |
||||
|
release = require('../config/admin/release'), |
||||
|
project = require('../config/project/release'), |
||||
|
|
||||
|
// shorthand
|
||||
|
version = project.version, |
||||
|
output = config.paths.output |
||||
|
|
||||
|
; |
||||
|
|
||||
|
|
||||
|
module.exports = function(callback) { |
||||
|
var |
||||
|
stream, |
||||
|
index, |
||||
|
tasks = [] |
||||
|
; |
||||
|
|
||||
|
for(index in release.distributions) { |
||||
|
|
||||
|
var |
||||
|
distribution = release.distributions[index] |
||||
|
; |
||||
|
|
||||
|
// streams... designed to save time and make coding fun...
|
||||
|
(function(distribution) { |
||||
|
|
||||
|
var |
||||
|
outputDirectory = release.outputRoot + distribution, |
||||
|
repoName = release.distRepoRoot + distribution |
||||
|
task = { |
||||
|
repo : distribution + ' create repo', |
||||
|
package : distribution + ' create package.json' |
||||
|
} |
||||
|
; |
||||
|
|
||||
|
// copy files into output folder adjusting asset paths
|
||||
|
gulp.task(task.repo, false, function() { |
||||
|
return gulp.src(release.source + distribution + '.*') |
||||
|
.pipe(plumber()) |
||||
|
.pipe(flatten()) |
||||
|
.pipe(replace(release.paths.source, release.paths.output)) |
||||
|
.pipe(gulp.dest(outputDirectory)) |
||||
|
; |
||||
|
}); |
||||
|
|
||||
|
// extend package.json
|
||||
|
gulp.task(task.package, false, function() { |
||||
|
return gulp.src(zzzzzzzzzzzzz) |
||||
|
.pipe(plumber()) |
||||
|
.pipe(flatten()) |
||||
|
.pipe(jsonEditor(function(package) { |
||||
|
if(version) { |
||||
|
package.version = version; |
||||
|
} |
||||
|
return package; |
||||
|
})) |
||||
|
.pipe(gulp.dest(outputDirectory)) |
||||
|
; |
||||
|
}); |
||||
|
|
||||
|
// synchronous tasks in orchestrator? I think not
|
||||
|
gulp.task(task.all, false, function(callback) { |
||||
|
runSequence([ |
||||
|
task.repo, |
||||
|
task.package |
||||
|
], callback); |
||||
|
}); |
||||
|
|
||||
|
tasks.push(task.all); |
||||
|
|
||||
|
})(distribution); |
||||
|
} |
||||
|
|
||||
|
runSequence(tasks, callback); |
||||
|
}; |
@ -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.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.distRepoRoot + 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('../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(); |
||||
|
|
||||
|
|
||||
|
}; |
@ -0,0 +1,177 @@ |
|||||
|
/******************************* |
||||
|
Update Repos |
||||
|
*******************************/ |
||||
|
|
||||
|
/* |
||||
|
|
||||
|
This task update all SUI individual component repos with new versions of components |
||||
|
|
||||
|
* 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() { |
||||
|
|
||||
|
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) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var |
||||
|
component = release.components[index] |
||||
|
outputDirectory = path.resolve(release.outputRoot + component), |
||||
|
capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1), |
||||
|
repoName = release.distRepoRoot + capitalizedComponent, |
||||
|
|
||||
|
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 + '>"' |
||||
|
: '', |
||||
|
|
||||
|
componentPackage = fs.existsSync(outputDirectory + 'package.json' ) |
||||
|
? require(outputDirectory + 'package.json') |
||||
|
: false, |
||||
|
|
||||
|
isNewVersion = (version && componentPackage.version != version), |
||||
|
|
||||
|
commitMessage = (isNewVersion) |
||||
|
? 'Updated component 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 }, |
||||
|
usernameOptions = { args : 'config user.name "' + oAuth.name + '"', cwd: outputDirectory }, |
||||
|
emailOptions = { args : 'config user.email "' + oAuth.email + '"', cwd: outputDirectory }, |
||||
|
|
||||
|
localRepoSetup = fs.existsSync(path.join(outputDirectory, '.git')), |
||||
|
canProceed = true |
||||
|
; |
||||
|
|
||||
|
|
||||
|
console.info('Processing repository:' + outputDirectory); |
||||
|
|
||||
|
function setUser() { |
||||
|
git.exec(usernameOptions, function () { |
||||
|
git.exec(emailOptions, function () { |
||||
|
commitFiles(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// standard path
|
||||
|
function commitFiles() { |
||||
|
// commit files
|
||||
|
console.info('Committing ' + component + ' 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 changess to remote
|
||||
|
function pushFiles() { |
||||
|
console.info('Pushing files for ' + component); |
||||
|
git.push('origin', 'master', { args: '-f', cwd: outputDirectory }, function(error) { |
||||
|
console.info('Push completed successfully'); |
||||
|
createRelease(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// create release on GitHub.com
|
||||
|
function createRelease() { |
||||
|
console.log('Tagging release as ', version); |
||||
|
github.releases.createRelease(releaseOptions, function() { |
||||
|
nextRepo(); |
||||
|
tagFiles(); |
||||
|
}); |
||||
|
tagFiles(); |
||||
|
} |
||||
|
|
||||
|
// Tags files locally
|
||||
|
function tagFiles() { |
||||
|
console.info('Tagging new version ' + component, version); |
||||
|
git.tag(version, 'Updated version from semantic-ui (automatic)', function (err) { |
||||
|
nextRepo(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// Steps to next repository
|
||||
|
function nextRepo() { |
||||
|
console.log('Sleeping for 1 second...'); |
||||
|
// avoid rate throttling
|
||||
|
global.clearTimeout(timer); |
||||
|
return stepRepo() |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if(localRepoSetup) { |
||||
|
commitFiles(); |
||||
|
} |
||||
|
else { |
||||
|
console.error('Repository must be setup before running update components'); |
||||
|
} |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
stepRepo(); |
||||
|
|
||||
|
}; |
@ -1,64 +0,0 @@ |
|||||
/******************************* |
|
||||
Register PM |
|
||||
*******************************/ |
|
||||
|
|
||||
/* |
|
||||
Task to register component repos with Package Managers |
|
||||
* Registers component with bower |
|
||||
* Registers component with NPM |
|
||||
*/ |
|
||||
|
|
||||
var |
|
||||
// node dependencies
|
|
||||
process = require('child_process'), |
|
||||
|
|
||||
// config
|
|
||||
release = require('../config/admin/release'), |
|
||||
|
|
||||
total = release.components.length, |
|
||||
index = -1, |
|
||||
stream, |
|
||||
stepRepo |
|
||||
; |
|
||||
|
|
||||
module.exports = function(callback) { |
|
||||
|
|
||||
console.log('Registering repos with package managers'); |
|
||||
|
|
||||
// Do Git commands synchronously per component, to avoid issues
|
|
||||
stepRepo = function() { |
|
||||
index = index + 1; |
|
||||
if(index >= total) { |
|
||||
return; |
|
||||
} |
|
||||
var |
|
||||
component = release.components[index], |
|
||||
outputDirectory = release.outputRoot + component + '/', |
|
||||
capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1), |
|
||||
packageName = release.packageRoot + component, |
|
||||
repoName = release.repoRoot + capitalizedComponent, |
|
||||
gitURL = 'https://github.com/' + release.org + '/' + repoName + '.git', |
|
||||
exec = process.exec, |
|
||||
execSettings = {cwd: outputDirectory}, |
|
||||
registerBower = 'bower register ' + packageName + ' ' + gitURL, |
|
||||
updateNPM = 'npm publish' |
|
||||
|
|
||||
; |
|
||||
|
|
||||
/* Register with Bower */ |
|
||||
/* One Time |
|
||||
exec(registerBower, execSettings, function(err, stdout, stderr) { |
|
||||
stepRepo(); |
|
||||
}); |
|
||||
*/ |
|
||||
|
|
||||
/* Register with NPM */ |
|
||||
exec(updateNPM, execSettings, function(err, stdout, stderr) { |
|
||||
console.log(err, stdout, stderr); |
|
||||
stepRepo(); |
|
||||
}); |
|
||||
|
|
||||
}; |
|
||||
stepRepo(); |
|
||||
}; |
|
||||
|
|
Write
Preview
Loading…
Cancel
Save