UNPKG

fuelux

Version:

Base Fuel UX styles and controls

337 lines (334 loc) 9.78 kB
module.exports = function (grunt) { var semver = require('semver'); function getPackageVersion () { return grunt.file.readJSON('./package.json').version; } return { // asks for what version you want to build 'tempbranch': { options: { questions: [ { config: 'release.remoteRepository', default: '<%= release.remoteRepository %>', type: 'input', message: function () { return 'What repository would like to base your local release branch from?'; } }, { // Assumption is made that you are releasing the code within a "release branch" currently // on the upstream remote repo. This branch will be tracked locally and be used to run // the build process in. It will be named release_{BUILD_VERSION}_{MMSS} (that is, it will // use the version specified earlier and a "mini-timestamp" of the current hour and minute). config: 'release.remoteBaseBranch', type: 'input', default: '<%= release.remoteBaseBranch %>', message: function () { return 'What remote branch from ' + grunt.config('release.remoteRepository') + ' would like to build your release based on?'; } } ] } }, // asks for what version you want to build 'build': { options: { questions: [ { config: 'release.buildSemVerType', type: 'list', message: 'What would you like to do?', choices: [ { value: 'patch', name: 'Patch: ' + semver.inc(getPackageVersion(), 'patch') + ' Backwards-compatible bug fixes.' }, { value: 'minor', name: 'Minor: ' + semver.inc(getPackageVersion(), 'minor') + ' Add functionality in a backwards-compatible manner.' }, { value: 'major', name: 'Major: ' + semver.inc(getPackageVersion(), 'major') + ' Incompatible API changes.' }, { value: 'custom', name: 'Custom: ?.?.? Specify version...' } ] }, { // if custom bump is used with a specific version, see dorelease task config: 'release.buildSemVerType', type: 'input', message: 'What specific version would you like', when: function (answers) { return answers['release.buildSemVerType'] === 'custom'; }, validate: function (value) { var valid = semver.valid(value); return valid || 'Must be a valid semver, such as 1.2.3-rc1. See http://semver.org/ for more details.'; } } ] } }, 'commit': { options: { questions: [ { config: 'release.commit', type: 'confirm', message: 'Please review your files.\n Check dist files visually to make sure comment banners have correct release version listed, and that *.min files are minified as expected.\n Also confirm that version number is updated in package.json.\n\n Would you like to commit?' } ], then: function (answers, done) { if (answers['release.commit'] === true) { grunt.task.run(['shell:commit']); } return false; } } }, 'tag': { options: { questions: [ { config: 'release.tag', type: 'confirm', message: 'Would you like to tag as ' + getPackageVersion() + '?' } ], then: function (answers, done) { if (answers['release.tag'] === true) { grunt.task.run(['shell:tag']); } return false; } } }, 'pushLocalBranchToUpstream': { options: { questions: [ { config: 'release.remoteDestinationBranch', type: 'input', message: function () { return 'What upstream branch would you like to push ' + grunt.config('release.localBranch') + ' to (probably ' + grunt.config('release.remoteDestinationBranch') + ')? (leave blank to skip)'; } } ], then: function (answers, done) { if (answers['release.remoteDestinationBranch'] !== '' && answers['release.remoteDestinationBranch'] !== 'n') { grunt.task.run(['shell:pushLocalBranchToUpstream']); } return false; } } }, 'pushTagToUpstream': { options: { questions: [ { config: 'release.upstreamTag', type: 'confirm', message: 'Would you like to push tag ' + getPackageVersion() + ' to upstream?' } ], then: function (answers, done) { if (answers['release.upstreamTag'] === true) { grunt.task.run(['shell:pushTagToUpstream']); } return false; } } }, 'uploadToCDN': { options: { questions: [ { config: 'release.uploadToCDN', type: 'confirm', message: 'Would you like to upload the `dist folder to fuelcdn.com?' } ], then: function (answers, done) { if (answers['release.uploadToCDN'] === true) { grunt.task.run(['shell:uploadToCDN']); } return false; } } }, 'pushLocalBranchToUpstreamMaster': { options: { questions: [ { config: 'release.pushToUpstreamMaster', type: 'confirm', message: "Would you like to push your local release branch to upstream's master branch?" } ], then: function (answers, done) { if (answers['release.pushToUpstreamMaster'] === true) { grunt.task.run(['shell:pushLocalBranchToUpstreamMaster']); } return false; } } }, 'deleteLocalReleaseBranch': { options: { questions: [ { config: 'release.deleteLocalReleaseBranch', type: 'confirm', message: function () { return 'Would you like to delete your local release branch' + '?'; } } ], then: function (answers, done) { if (answers['release.deleteLocalReleaseBranch'] === true) { grunt.task.run(['shell:deleteLocalReleaseBranch']); } return false; } } }, 'publishToNPM': { options: { questions: [ { config: 'release.publishToNPM', type: 'confirm', message: 'Would you like to publish to NPM?' } ], then: function (answers, done) { if (answers['release.publishToNPM'] === true) { grunt.task.run(['shell:publishToNPM']); } return false; } } }, 'createmilestone': { options: { questions: [ { config: 'release.createmilestone', type: 'confirm', message: 'Have you created a milestone in GitHub for the next version?' } ], then: function (answers, done) { if (answers['release.createmilestone'] === false) { grunt.fail.fatal('Please follow the wiki https://github.com/ExactTarget/fuelux/wiki/How-to-release-a-new-version#how-to-release', 1); } } } }, 'bumpmilestones': { options: { questions: [ { config: 'release.bumpmilestones', type: 'confirm', message: 'Have you bumped all open tickets to the next version?' } ], then: function (answers, done) { if (answers['release.bumpmilestones'] === false) { grunt.fail.fatal('Please follow the wiki https://github.com/ExactTarget/fuelux/wiki/How-to-release-a-new-version#how-to-release', 1); } } } }, 'closemilestone': { options: { questions: [ { config: 'release.closemilestone', type: 'confirm', message: 'Have you marked the current release milestone as closed?' } ], then: function (answers, done) { if (answers['release.closemilestone'] === false) { grunt.fail.fatal('Please follow the wiki https://github.com/ExactTarget/fuelux/wiki/How-to-release-a-new-version#how-to-release', 1); } } } }, 'startrelease': { options: { questions: [ { config: 'release.startrelease', type: 'confirm', message: 'Would you like to start the release?' } ], then: function (answers, done) { if (answers['release.startrelease'] === false) { grunt.fail.fatal('Please follow the wiki https://github.com/ExactTarget/fuelux/wiki/How-to-release-a-new-version#how-to-release', 1); } } } }, 'generatelogs': { options: { questions: [ { config: 'release.generatelogs', type: 'confirm', message: 'Would you like to generate change logs?' } ], then: function (answers, done) { if (answers['release.generatelogs'] === true) { grunt.task.run(['shell:notes']); } return false; } } }, 'generatelogsmanually': { options: { questions: [ { config: 'release.generatelogsmanuallystart', type: 'input', message: 'Which releases would you like to start diff for changelogs from? (eg. 3.11.4)', }, { config: 'release.generatelogsmanuallyend', type: 'input', message: 'Which releases would you like to end diff for changelogs from? (eg. 3.11.5)', }, { config: 'release.generatelogsmanually', type: 'confirm', message: 'Would you like to generate change logs now?' } ], then: function (answers, done) { if (answers['release.generatelogsmanually'] === true && answers['release.generatelogsmanuallystart'] !== '' && answers['release.generatelogsmanuallyend'] !== '') { grunt.log.writeln('About to generate changelogs between ' + answers['release.generatelogsmanuallystart'] + ' and ' + answers['release.generatelogsmanuallyend'] + '.'); grunt.log.writeln('There will be no more output for possibly several minutes.'); grunt.log.writeln('Thank you for your patience, have an ohana mahalo kilikilikiwana day.'); grunt.log.writeln('//TODO: Insert tiki dancing nyan cat here. --jschmidt'); grunt.task.run(['shell:manualnotes']); } else { grunt.log.writeln('You have failed us all. You are no longer ohana.'); } return false; } } } }; };