From 329cbcf535d0e441698413744ee4b06a36f43715 Mon Sep 17 00:00:00 2001 From: Kieran Sedgwick Date: Thu, 5 Mar 2015 14:01:59 -0500 Subject: [PATCH] Fixed #68 - Implemented submodule & gh-pages update task, "publish" --- .gitignore | 3 + Gruntfile.js | 142 +++++++++++++++++- env.dist | 11 ++ index.html | 19 +++ package.json | 105 +++++++------ src/config.json | 26 ++-- .../default/brackets-browser-livedev | 2 +- tasks/test.js | 26 ++-- 8 files changed, 256 insertions(+), 78 deletions(-) create mode 100644 env.dist create mode 100644 index.html 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 8b757585f1d..b28b67cbaee 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,11 +21,31 @@ * */ /*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']}); + require('load-grunt-tasks')(grunt, { + pattern: [ + 'grunt-contrib-*', + 'grunt-targethtml', + 'grunt-usemin', + 'grunt-npm', + 'grunt-git', + 'grunt-update-submodules' + ] + }); grunt.loadTasks('tasks'); // Project configuration. @@ -316,7 +336,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 @@ -326,7 +346,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 @@ -343,9 +363,125 @@ 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 + 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 + 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 + 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/index.html b/index.html new file mode 100644 index 00000000000..ceeb586ee76 --- /dev/null +++ b/index.html @@ -0,0 +1,19 @@ + + + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index c0c47d07d41..2b72d335dbd 100644 --- a/package.json +++ b/package.json @@ -1,52 +1,57 @@ { - "name": "Brackets", - "version": "1.3.0-0", - "apiVersion": "1.3.0", - "homepage": "http://brackets.io", - "issues": { - "url": "http://github.com/adobe/brackets/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/adobe/brackets.git", - "branch": "", - "SHA": "" - }, - "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-copy": "0.4.1", - "grunt-contrib-htmlmin": "0.1.3", - "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-targethtml": "0.2.6", - "grunt-usemin": "0.1.11", - "load-grunt-tasks": "0.2.0", - "q": "0.9.2", - "semver": "^4.1.0", - "jshint": "2.1.4", - "xmldoc": "^0.1.2" - }, - "scripts": { - "postinstall": "grunt install", - "test": "grunt cla-check-pull test" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/adobe/brackets/blob/master/LICENSE" - } - ] + "name": "Brackets", + "version": "1.3.0-0", + "apiVersion": "1.3.0", + "homepage": "http://brackets.io", + "issues": { + "url": "http://github.com/adobe/brackets/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/adobe/brackets.git", + "branch": "", + "SHA": "" + }, + "devDependencies": { + "grunt": "0.4.1", + "grunt-cli": "0.1.9", + "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.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", + "xmldoc": "^0.1.2" + }, + "scripts": { + "postinstall": "grunt install", + "test": "grunt cla-check-pull test" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/adobe/brackets/blob/master/LICENSE" + } + ] } diff --git a/src/config.json b/src/config.json index 5efc3c73a9b..eea58aefc99 100644 --- a/src/config.json +++ b/src/config.json @@ -36,29 +36,33 @@ }, "devDependencies": { "grunt": "0.4.1", - "jasmine-node": "1.11.0", - "grunt-jasmine-node": "0.1.0", "grunt-cli": "0.1.9", - "phantomjs": "1.9.11", - "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.2.0", - "grunt-contrib-concat": "0.3.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-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", "xmldoc": "^0.1.2" }, "scripts": { diff --git a/src/extensions/default/brackets-browser-livedev b/src/extensions/default/brackets-browser-livedev index 6f52867a71e..9e794ceed7b 160000 --- a/src/extensions/default/brackets-browser-livedev +++ b/src/extensions/default/brackets-browser-livedev @@ -1 +1 @@ -Subproject commit 6f52867a71eebbb3e0ecf8488d47a30bfc800816 +Subproject commit 9e794ceed7bf6628ce3098130e9eed0174f52b36 diff --git a/tasks/test.js b/tasks/test.js index 4f92421cbbe..79ea9954524 100644 --- a/tasks/test.js +++ b/tasks/test.js @@ -1,24 +1,24 @@ /* * Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved. - * + * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. - * + * */ /*global module, require, process*/ @@ -65,7 +65,7 @@ module.exports = function (grunt) { } else { cmd += args; } - + grunt.log.writeln(cmd); qexec(cmd, opts).then(function (stdout, stderr) {