diff options
Diffstat (limited to 'semantic/tasks/admin/distributions')
| -rw-r--r-- | semantic/tasks/admin/distributions/create.js | 208 | ||||
| -rw-r--r-- | semantic/tasks/admin/distributions/init.js | 168 | ||||
| -rw-r--r-- | semantic/tasks/admin/distributions/update.js | 177 |
3 files changed, 0 insertions, 553 deletions
diff --git a/semantic/tasks/admin/distributions/create.js b/semantic/tasks/admin/distributions/create.js deleted file mode 100644 index 6fe6921..0000000 --- a/semantic/tasks/admin/distributions/create.js +++ /dev/null @@ -1,208 +0,0 @@ -/******************************* - 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 - fs = require('fs'), - path = require('path'), - mergeStream = require('merge-stream'), - - // admin dependencies - flatten = require('gulp-flatten'), - jsonEditor = require('gulp-json-editor'), - plumber = require('gulp-plumber'), - rename = require('gulp-rename'), - replace = require('gulp-replace'), - - // 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 - distLowerCase = distribution.toLowerCase(), - outputDirectory = path.join(release.outputRoot, distLowerCase), - packageFile = path.join(outputDirectory, release.files.npm), - repoName = release.distRepoRoot + distribution, - regExp = { - match : { - files : '{files}', - version : '{version}' - } - }, - task = { - all : distribution + ' copying files', - repo : distribution + ' create repo', - meteor : distribution + ' create meteor package.js', - package : distribution + ' create package.json' - }, - gatherFiles, - createList - ; - - // get files for meteor - gatherFiles = function(dir) { - var - dir = dir || path.resolve('.'), - list = fs.readdirSync(dir), - omitted = [ - '.git', - 'node_modules', - 'package.js', - 'LICENSE', - 'README.md', - 'package.json', - 'bower.json', - '.gitignore' - ], - files = [] - ; - list.forEach(function(file) { - var - isOmitted = (omitted.indexOf(file) > -1), - filePath = path.join(dir, file), - stat = fs.statSync(filePath) - ; - if(!isOmitted) { - if(stat && stat.isDirectory()) { - files = files.concat(gatherFiles(filePath)); - } - else { - files.push(filePath.replace(outputDirectory + path.sep, '')); - } - } - }); - return files; - }; - - // spaces out list correctly - createList = function(files) { - var filenames = ''; - for(var file in files) { - if(file == (files.length - 1) ) { - filenames += "'" + files[file] + "'"; - } - else { - filenames += "'" + files[file] + "',\n "; - } - } - return filenames; - }; - - tasks.push(function() { - var - files = gatherFiles(outputDirectory), - filenames = createList(files) - ; - gulp.src(release.templates.meteor[distLowerCase]) - .pipe(plumber()) - .pipe(flatten()) - .pipe(replace(regExp.match.version, version)) - .pipe(replace(regExp.match.files, filenames)) - .pipe(rename(release.files.meteor)) - .pipe(gulp.dest(outputDirectory)) - ; - }); - - if(distribution == 'CSS') { - tasks.push(function() { - var - themes, - components, - releases - ; - themes = gulp.src('dist/themes/default/**/*', { base: 'dist/' }) - .pipe(gulp.dest(outputDirectory)) - ; - components = gulp.src('dist/components/*', { base: 'dist/' }) - .pipe(gulp.dest(outputDirectory)) - ; - releases = gulp.src('dist/*', { base: 'dist/' }) - .pipe(gulp.dest(outputDirectory)) - ; - return mergeStream(themes, components, releases); - }); - } - else if(distribution == 'LESS') { - tasks.push(function() { - var - definitions, - themeImport, - themeConfig, - siteTheme, - themes - ; - definitions = gulp.src('src/definitions/**/*', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - themeImport = gulp.src('src/semantic.less', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - themeImport = gulp.src('src/theme.less', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - themeConfig = gulp.src('src/theme.config.example', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - siteTheme = gulp.src('src/_site/**/*', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - themes = gulp.src('src/themes/**/*', { base: 'src/' }) - .pipe(gulp.dest(outputDirectory)) - ; - return mergeStream(definitions, themeImport, themeConfig, siteTheme, themes); - }); - } - - // extend package.json - tasks.push(function() { - return gulp.src(packageFile) - .pipe(plumber()) - .pipe(jsonEditor(function(package) { - if(version) { - package.version = version; - } - return package; - })) - .pipe(gulp.dest(outputDirectory)) - ; - }); - - })(distribution); - } - - gulp.series(...tasks)(callback); -};
\ No newline at end of file diff --git a/semantic/tasks/admin/distributions/init.js b/semantic/tasks/admin/distributions/init.js deleted file mode 100644 index 124e131..0000000 --- a/semantic/tasks/admin/distributions/init.js +++ /dev/null @@ -1,168 +0,0 @@ -/******************************* - 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'), - 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 = '[email protected]:' + 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(); - - -}; diff --git a/semantic/tasks/admin/distributions/update.js b/semantic/tasks/admin/distributions/update.js deleted file mode 100644 index bc3614b..0000000 --- a/semantic/tasks/admin/distributions/update.js +++ /dev/null @@ -1,177 +0,0 @@ -/******************************* - 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'), - - // 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, - - 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.repos.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, 100); - } - - - if(localRepoSetup) { - setConfig(); - } - else { - console.error('Repository must be setup before running update distributions'); - } - - }; - - stepRepo(); - -}; |