tools/bump.coffee

This commit is contained in:
ccd0 2016-04-10 04:27:09 -07:00
parent 1ad999e12e
commit 2e34e1da4c
4 changed files with 305 additions and 47 deletions

View File

@ -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}."

252
npm-shrinkwrap.json generated
View File

@ -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"

View File

@ -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",

45
tools/bump.coffee Normal file
View File

@ -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}."