From e32382cafcbf560212770a86c19420a7c9fec4c5 Mon Sep 17 00:00:00 2001 From: Kieran Sedgwick Date: Thu, 12 Mar 2015 14:30:21 -0400 Subject: [PATCH] Fixed #68 - Implemented submodule & gh-pages update task, "publish" --- .gitignore | 3 + Gruntfile.js | 143 +++++++++++++++++- env.dist | 11 ++ package.json | 32 ++-- .../default/brackets-browser-livedev | 2 +- 5 files changed, 174 insertions(+), 17 deletions(-) create mode 100644 env.dist diff --git a/.gitignore b/.gitignore index f90a1d105fd..57a62a6df85 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ Thumbs.db # Files that can be automatically downloaded that we don't want to ship with our builds /src/extensibility/node/node_modules/request/tests/ + +# Mozilla Bramble-specific files +.env diff --git a/Gruntfile.js b/Gruntfile.js index 2fcee8b9bd2..deb61946a0f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,11 +21,20 @@ * */ /*global module, require*/ + +// Brackets specific config vars +var habitat = require('habitat'); +habitat.load(); +var env = new habitat(); + +var GIT_BRANCH = env.get("BRAMBLE_MAIN_BRANCH") || "bramble"; +var GIT_REMOTE = env.get("BRAMBLE_MAIN_REMOTE") || "upstream"; + module.exports = function (grunt) { 'use strict'; // load dependencies - require('load-grunt-tasks')(grunt, {pattern: ['grunt-contrib-*', 'grunt-targethtml', 'grunt-usemin', 'grunt-cleanempty']}); + require('load-grunt-tasks')(grunt, {pattern: ['grunt-contrib-*', 'grunt-targethtml', 'grunt-usemin', 'grunt-cleanempty', 'grunt-npm', 'grunt-git', 'grunt-update-submodules']}); grunt.loadTasks('tasks'); // Project configuration. @@ -321,7 +330,7 @@ module.exports = function (grunt) { '<%= meta.src %>', '<%= meta.test %>', // These modules include lots of third-party code, so we skip them - '!src/extensions/default/HTMLHinter/slowparse/**', + '!src/extensions/default/HTMLHinter/slowparse/**', '!src/extensions/default/HTMLHinter/tooltipsy.source.js', '!src/extensions/default/brackets-browser-livedev/nohost/**', //With Previous skip statement, this file was ignored, so we specify it directly for jshinting @@ -331,7 +340,7 @@ module.exports = function (grunt) { src: [ '<%= meta.src %>', // These modules include lots of third-party code, so we skip them - '!src/extensions/default/HTMLHinter/slowparse/**', + '!src/extensions/default/HTMLHinter/slowparse/**', '!src/extensions/default/HTMLHinter/tooltipsy.source.js', '!src/extensions/default/brackets-browser-livedev/nohost/**', //With Previous skip statement, this file was ignored, so we specify it directly for jshinting @@ -348,9 +357,137 @@ module.exports = function (grunt) { mac: "<%= shell.repo %>/installer/mac/staging/<%= pkg.name %>.app", win: "<%= shell.repo %>/installer/win/staging/<%= pkg.name %>.exe", linux: "<%= shell.repo %>/installer/linux/debian/package-root/opt/brackets/brackets" + }, + + // Brackets specific tasks + 'npm-checkBranch': { + options: { + branch: GIT_BRANCH + } + }, + gitcheckout: { + smart: { + options: { + branch: 'gh-pages', + overwrite: false + } + }, + }, + gitfetch: { + smart: { + options: {} + } + }, + "update_submodules": { + publish: { + options: { + params: "--remote -- src/extensions/default/brackets-browser-livedev" + } + } + }, + gitcommit: { + module: { + options: { + // This is replaced during the 'publish' task + message: "Placeholder" + } + }, + publish: { + options: { + noStatus: true, + allowEmpty: true, + message: "Latest distribution version of Bramble." + } + } + }, + gitadd: { + publish: { + files: { + src: ['./dist/*'] + }, + options: { + force: true + } + }, + modules: { + files: { + src: ['./src/extensions/default/brackets-browser-livedev'] + } + } + }, + gitpush: { + smart: { + options: { + remote: GIT_REMOTE, + // These options are left in for + // clarity. Their actual values + // will be set by the `publish` task. + branch: 'gh-pages', + force: true + }, + } } }); + // Bramble-task: smartCheckout + // Checks out to the branch provided as a target. + // Takes: + // [branch] - The branch to checkout to + // [overwrite] - If true, resets the target branch to the + // value of the starting branch + grunt.registerTask('smartCheckout', function(branch, overwrite) { + overwrite = overwrite == "true" ? true : false; + + grunt.config('gitcheckout.smart.options.branch', branch); + grunt.config('gitcheckout.smart.options.overwrite', overwrite); + grunt.task.run('gitcheckout:smart'); + }); + + // Bramble-task: smartPush + // Checks out to the branch provided as a target. + // Takes: + // [branch] - The branch to push to + // [force] - If true, forces a push + grunt.registerTask('smartPush', function(branch, force) { + force = force == "true" ? true : false; + + grunt.config('gitpush.smart.options.branch', branch); + grunt.config('gitpush.smart.options.force', force); + grunt.task.run('gitpush:smart'); + }); + + // Bramble-task: publish + // Updates submodules, committing and pushing + // the result upstream, and also builds and pushes the + // dist version for use in thimble. + grunt.registerTask('publish', 'Update submodules and the gh-pages branch with the latest built version of bramble.', function(patchLevel) { + var tasks = []; + + var date = new Date(Date.now()).toString(); + grunt.config("gitcommit.module.options.message", "Submodule update on " + date); + + // Confirm we're ready to start + tasks.push('checkBranch'); + + // Update submodules, commit and push to "master" + tasks.push('update_submodules:publish'); + tasks.push('gitadd:modules'); + tasks.push('gitcommit:module'); + tasks.push('smartPush:' + GIT_BRANCH + ":false"); + + // Update gh-pages with new dist + tasks.push('smartCheckout:gh-pages:true'); + tasks.push('build'); + tasks.push('gitadd:publish'); + tasks.push('gitcommit:publish'); + tasks.push('smartPush:gh-pages:true'); + + // Checkout back to the correct branch + tasks.push('smartCheckout:' + GIT_BRANCH); + + grunt.task.run(tasks); + }); + // task: install grunt.registerTask('install', ['write-config', 'less']); diff --git a/env.dist b/env.dist new file mode 100644 index 00000000000..40175734aea --- /dev/null +++ b/env.dist @@ -0,0 +1,11 @@ +## +# Config for Mozilla's Bramble adaptation of Brackets +# + +## Which branch is considered master? +export BRAMBLE_MAIN_BRANCH="bramble" + +## Which remote is considered upstream? +export BRAMBLE_MAIN_REMOTE="upstream" + + diff --git a/package.json b/package.json index 10291f75e29..79ddd4bfb66 100644 --- a/package.json +++ b/package.json @@ -14,26 +14,32 @@ }, "devDependencies": { "grunt": "0.4.1", - "jasmine-node": "1.11.0", - "grunt-jasmine-node": "0.1.0", "grunt-cli": "0.1.9", - "phantomjs": "1.9.13", - "grunt-lib-phantomjs": "0.3.0", - "grunt-contrib-jshint": "0.6.0", - "grunt-contrib-watch": "0.4.3", - "grunt-contrib-jasmine": "0.4.2", - "grunt-template-jasmine-requirejs": "0.1.0", - "grunt-contrib-cssmin": "0.6.0", "grunt-contrib-clean": "0.4.1", + "grunt-contrib-concat": "0.3.0", "grunt-contrib-copy": "0.4.1", + "grunt-contrib-cssmin": "0.6.0", "grunt-contrib-htmlmin": "0.1.3", + "grunt-contrib-jasmine": "0.4.2", + "grunt-contrib-jshint": "0.6.0", "grunt-contrib-less": "0.8.2", "grunt-contrib-requirejs": "0.4.1", - "grunt-contrib-uglify": "0.8.0", - "grunt-contrib-concat": "0.3.0", + "grunt-contrib-uglify": "0.2.0", + "grunt-contrib-watch": "0.4.3", + "grunt-git": "^0.3.4", + "grunt-jasmine-node": "0.1.0", + "grunt-lib-phantomjs": "0.3.0", + "grunt-npm": "git://github.com/sedge/grunt-npm.git#branchcheck", + "grunt-shell": "^1.1.2", "grunt-targethtml": "0.2.6", + "grunt-template-jasmine-requirejs": "0.1.0", + "grunt-update-submodules": "^0.4.1", "grunt-usemin": "0.1.11", + "habitat": "^3.1.2", + "jasmine-node": "1.11.0", + "jshint": "2.1.4", "load-grunt-tasks": "0.2.0", + "phantomjs": "1.9.13", "q": "0.9.2", "semver": "^4.1.0", "jshint": "2.1.4", @@ -46,8 +52,8 @@ }, "licenses": [ { - "type": "MIT", - "url": "https://github.com/adobe/brackets/blob/master/LICENSE" + "type": "MIT", + "url": "https://github.com/adobe/brackets/blob/master/LICENSE" } ] } diff --git a/src/extensions/default/brackets-browser-livedev b/src/extensions/default/brackets-browser-livedev index 6f52867a71e..392ad2b2af6 160000 --- a/src/extensions/default/brackets-browser-livedev +++ b/src/extensions/default/brackets-browser-livedev @@ -1 +1 @@ -Subproject commit 6f52867a71eebbb3e0ecf8488d47a30bfc800816 +Subproject commit 392ad2b2af67a03718e62063f48cdce4d4daf588