diff --git a/Makefile b/Makefile index b426dd2b0..f211c97ba 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,3 @@ -name := 4chan-X - ifdef ComSpec BIN := $(subst /,\,node_modules/.bin/) RMDIR := -rmdir /s /q @@ -23,6 +21,9 @@ template_deps := package.json tools/template.js node_modules/lodash/package.json cat := node tools/cat.js cat_deps := tools/cat.js +name := $(shell node -p "JSON.parse(require('fs').readFileSync('package.json')).name") +version := $(shell node -p "JSON.parse(require('fs').readFileSync('version.json')).version") + capitalized = $(filter-out a,$(foreach x,$1,$(subst a $(x),,$(sort a $(x))))) parts := \ @@ -206,9 +207,13 @@ install.json : node tools/install.js echo -> $@ +.events/CHANGELOG : version.json | .events + node tools/updcl.js + echo -> $@ + .SECONDARY : -.PHONY: default all clean cleanall script crx release jshint install +.PHONY: default all clean cleanall script crx release jshint install tag $(foreach i,1 2 3 4,$(bump$(i))) clean : $(RMDIR) tmp testbuilds .events @@ -226,3 +231,12 @@ release : $(release) jshint : $(jshint) install : .events/install + +tag : .events/CHANGELOG $(jshint) $(release) + git commit -am "Release $(name) v$(version)." + git tag -a $(version) -m "$(name) v$(version)." + +bump% : + $(MAKE) cleanall + node tools/bump.js $* + $(MAKE) tag install diff --git a/package.json b/package.json index 50e6522a5..e9f718c6d 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", "esprima": "^2.7.2", "font-awesome": "4.5.0", "grunt": "^1.0.1", diff --git a/tools/bump.js b/tools/bump.js new file mode 100644 index 000000000..2630c2532 --- /dev/null +++ b/tools/bump.js @@ -0,0 +1,26 @@ +var fs = require('fs'); + +function bump(version, level) { + var parts = version.split('.'); + var i; + for (i = 0; i < level; i++) { + parts[i] = (parts[i] || '0'); + } + parts[level-1] = +parts[level-1] + 1; + for (i = level; i < parts.length; i++) { + parts[i] = '0'; + } + return parts.join('.'); +} + +function setversion(version) { + var data = {version: version, date: new Date()}; + fs.writeFileSync('version.json', JSON.stringify(data, null, 2)); +} + +var level = +process.argv[2]; +var v = JSON.parse(fs.readFileSync('version.json', 'utf8')); +var oldversion = v.version; +var version = bump(oldversion, level); +setversion(version); +console.log(`Version updated from v${oldversion} to v${version}.`); diff --git a/tools/updcl.js b/tools/updcl.js new file mode 100644 index 000000000..6e4c2f920 --- /dev/null +++ b/tools/updcl.js @@ -0,0 +1,35 @@ +var fs = require('fs'); +var dateFormat = require('dateformat'); + +var pkg = JSON.parse(fs.readFileSync('package.json', 'utf8')); +var v = JSON.parse(fs.readFileSync('version.json', 'utf8')); + +var name = pkg.name; +var oldVersions = pkg.meta.oldVersions; +var version = v.version; +var date = v.date; + +var branch = version.replace(/\.\d+$/, ''); +var headerLevel = branch.replace(/(\.0)*$/, '').split('.').length; +var headerPrefix = new Array(headerLevel + 1).join('#'); +var separator = `${headerPrefix} v${branch}`; + +var today = dateFormat(date, 'yyyy-mm-dd'); +var filename = `/builds/${name}-noupdate`; +var ffLink = `${oldVersions}${version}${filename}.user.js`; +var crLink = `${oldVersions}${version}${filename}.crx`; +var line = `**v${version}** *(${today})* - [[Firefox](${ffLink} \"Firefox version\")] [[Chromium](${crLink} \"Chromium version\")]`; + +var changelog = fs.readFileSync('CHANGELOG.md', 'utf8'); + +var breakPos = changelog.indexOf(separator); +if (breakPos < 0) throw new Error('Separator not found.'); +breakPos += separator.length; + +var prevVersion = changelog.substr(breakPos).match(/\*\*v([\d\.]+)\*\*/)[1]; +if (prevVersion.replace(/\.\d+$/, '') !== branch) { + line += `\n- Based on v${prevVersion}.`; +} + +fs.writeFileSync('CHANGELOG.md', `${changelog.substr(0, breakPos)}\n\n${line}${changelog.substr(breakPos)}`, 'utf8'); +console.log(`Changelog updated for v${version}.`);