diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 3dae09c10..da7cf90d3 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -116,6 +116,8 @@ module.exports = (grunt) -> command: (channel='') -> "node tools/sign.js #{channel}" 'copy-builds': command: '<%= builds.map(file => `node tools/cp.js testbuilds/${file} builds/${file}`).join("&&") %>' + bump: + command: (channel='') -> "<%= BIN %>coffee tools/bump.coffee #{channel}" markdown: command: 'node tools/markdown.js' commit: @@ -243,21 +245,16 @@ module.exports = (grunt) -> 'shell:copy-builds' ] - grunt.registerTask 'tag', 'Tag a new release', (version) -> + grunt.registerTask 'bump', 'Bump the version number and tag a new release', (level) -> grunt.task.run [ - "setversion:#{version}" - 'updcl' + "shell:bump:#{level}" + 'update-version' 'full' 'shell:commit' ] - grunt.registerTask 'bump', 'Bump the version number and tag a new release', (level) -> - pkg = grunt.config 'pkg' - parts = pkg.meta.version.split '.' - parts[i] or= '0' for i in [0...level] - parts[level-1] = +parts[level-1] + 1 - parts[i] = 0 for i in [level...parts.length] - grunt.task.run "tag:#{parts.join '.'}" + grunt.registerTask 'update-version', 'Re-read the version from version.json', -> + grunt.config 'pkg', loadPkg() grunt.registerTask 'pushd', 'Change directory to the distribution worktree and check out gh-pages branch.', -> pkg = grunt.config 'pkg' @@ -312,40 +309,3 @@ module.exports = (grunt) -> grunt.registerTask 'captchas', [ 'shell:captchas' ] - - grunt.registerTask 'setversion', 'Set the version number', (version) -> - data = grunt.file.readJSON 'version.json' - oldversion = data.version - data.version = version - data.date = new Date() - grunt.file.write 'version.json', JSON.stringify(data, null, 2) + '\n' - grunt.log.ok "Version updated from v#{oldversion} to v#{version}." - grunt.config 'pkg', loadPkg() - - grunt.registerTask 'updcl', 'Update the changelog', -> - {meta, name} = grunt.config('pkg') - {version, oldVersions} = meta - - branch = version.replace /\.\d+$/, '' - headerLevel = branch.replace(/(\.0)*$/, '').split('.').length - headerPrefix = new Array(headerLevel + 1).join '#' - separator = "#{headerPrefix} v#{branch}" - - today = grunt.template.today 'yyyy-mm-dd' - filename = "/builds/#{name}-noupdate" - ffLink = "#{oldVersions}#{version}#{filename}.user.js" - crLink = "#{oldVersions}#{version}#{filename}.crx" - line = "**v#{version}** *(#{today})* - [[Firefox](#{ffLink} \"Firefox version\")] [[Chromium](#{crLink} \"Chromium version\")]" - - changelog = grunt.file.read 'CHANGELOG.md' - - breakPos = changelog.indexOf(separator) - throw new Error 'Separator not found.' if breakPos is -1 - breakPos += separator.length - - prevVersion = changelog[breakPos..].match(/\*\*v([\d\.]+)\*\*/)[1] - unless prevVersion.replace(/\.\d+$/, '') is branch - line += "\n- Based on v#{prevVersion}." - - grunt.file.write 'CHANGELOG.md', "#{changelog[...breakPos]}\n\n#{line}#{changelog[breakPos..]}" - grunt.log.ok "Changelog updated for v#{version}." diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 806a70237..319f7ebdd 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -193,6 +193,258 @@ } } }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "dependencies": { + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + }, + "loud-rejection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.3.0.tgz", + "dependencies": { + "array-find-index": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz" + }, + "signal-exit": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz" + } + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "normalize-package-data": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "dependencies": { + "hosted-git-info": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + } + } + }, + "semver": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz" + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "dependencies": { + "spdx-license-ids": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz" + } + } + }, + "spdx-expression-parse": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", + "dependencies": { + "spdx-exceptions": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz" + }, + "spdx-license-ids": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz" + } + } + } + } + } + } + }, + "object-assign": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz" + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "dependencies": { + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz" + }, + "pinkie-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", + "dependencies": { + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "dependencies": { + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "dependencies": { + "graceful-fs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "dependencies": { + "error-ex": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + } + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + }, + "pinkie-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", + "dependencies": { + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "dependencies": { + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + } + } + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "dependencies": { + "graceful-fs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + }, + "pinkie-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", + "dependencies": { + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + } + } + } + } + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "dependencies": { + "repeating": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.0.tgz", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz" + } + } + } + } + } + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + } + } + } + } + }, "font-awesome": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.5.0.tgz" diff --git a/package.json b/package.json index 7b3d472c4..1fa17ff3e 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "devDependencies": { "coffee-script": "1.9.3", "crx": "^3.0.3", + "dateformat": "^1.0.12", "font-awesome": "4.5.0", "fs-extra": "^0.26.7", "glob": "^7.0.3", diff --git a/tools/bump.coffee b/tools/bump.coffee new file mode 100644 index 000000000..9a052b139 --- /dev/null +++ b/tools/bump.coffee @@ -0,0 +1,45 @@ +fs = require 'fs' +dateFormat = require 'dateformat' + +pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')) +v = JSON.parse(fs.readFileSync('version.json', 'utf8')) +level = +process.argv[2] + +parts = v.version.split '.' +parts[i] or= '0' for i in [0...level] +parts[level-1] = +parts[level-1] + 1 +parts[i] = 0 for i in [level...parts.length] +version = parts.join '.' + +oldversion = v.version +v.version = version +v.date = new Date() +fs.writeFileSync 'version.json', JSON.stringify(v, null, 2) + '\n' +console.log "Version updated from v#{oldversion} to v#{version}." + +{meta, name} = pkg +{oldVersions} = meta + +branch = version.replace /\.\d+$/, '' +headerLevel = branch.replace(/(\.0)*$/, '').split('.').length +headerPrefix = new Array(headerLevel + 1).join '#' +separator = "#{headerPrefix} v#{branch}" + +today = dateFormat v.date, 'yyyy-mm-dd' +filename = "/builds/#{name}-noupdate" +ffLink = "#{oldVersions}#{version}#{filename}.user.js" +crLink = "#{oldVersions}#{version}#{filename}.crx" +line = "**v#{version}** *(#{today})* - [[Firefox](#{ffLink} \"Firefox version\")] [[Chromium](#{crLink} \"Chromium version\")]" + +changelog = fs.readFileSync 'CHANGELOG.md', 'utf8' + +breakPos = changelog.indexOf(separator) +throw new Error 'Separator not found.' if breakPos is -1 +breakPos += separator.length + +prevVersion = changelog[breakPos..].match(/\*\*v([\d\.]+)\*\*/)[1] +unless prevVersion.replace(/\.\d+$/, '') is branch + line += "\n- Based on v#{prevVersion}." + +fs.writeFileSync 'CHANGELOG.md', "#{changelog[...breakPos]}\n\n#{line}#{changelog[breakPos..]}" +console.log "Changelog updated for v#{version}."