1
0
Fork 0

Added taskr as build tool

This commit is contained in:
Michaël Lemaire 2018-03-07 00:52:52 +01:00
parent ca52167809
commit 49c7c35342
5 changed files with 304 additions and 45 deletions

2
.vscode/tasks.json vendored
View File

@ -1,6 +1,6 @@
{
"version": "0.1.0",
"command": "./spacetac",
"command": ".venv/node/bin/npm",
"isShellCommand": true,
"args": [
"run",

View File

@ -27,10 +27,8 @@ and local Node.js environment:
If you want to build on your computer, clone the repository, then run:
npm install # Install dependencies
npm run build # Build the final JS
npm run atlas # Pack the images and sounds
npm test # Run unit tests
npm start # Start development server, and open game in web browser
npm test # Run unit tests
## Credits

247
package-lock.json generated
View File

@ -4,6 +4,52 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@taskr/shell": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@taskr/shell/-/shell-1.1.0.tgz",
"integrity": "sha1-YDV8rNlKQvXFlqpxBUK4eQDcPwY=",
"dev": true,
"requires": {
"execa": "0.7.0"
}
},
"@taskr/uglify": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@taskr/uglify/-/uglify-1.1.0.tgz",
"integrity": "sha1-DIspLj3sr/4KTPQa7HEWEYWbyZg=",
"dev": true,
"requires": {
"uglify-js": "2.8.29"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"requires": {
"source-map": "0.5.7",
"uglify-to-browserify": "1.0.2",
"yargs": "3.10.0"
}
}
}
},
"@taskr/watch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@taskr/watch/-/watch-1.1.0.tgz",
"integrity": "sha1-v0RxeM+scfyZslD/RsQK0/lhc9Y=",
"dev": true,
"requires": {
"chokidar": "1.7.0"
}
},
"@types/jasmine": {
"version": "2.8.6",
"resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz",
@ -896,7 +942,6 @@
"resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
"dev": true,
"optional": true,
"requires": {
"align-text": "0.1.4",
"lazy-cache": "1.0.4"
@ -953,7 +998,6 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
"dev": true,
"optional": true,
"requires": {
"center-align": "0.1.3",
"right-align": "0.1.3",
@ -964,11 +1008,16 @@
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
"integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
"dev": true,
"optional": true
"dev": true
}
}
},
"clor": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/clor/-/clor-5.2.0.tgz",
"integrity": "sha512-Z+jjxoF4lNUJQtsdz7d9HLz7yP49hnt4CH76AB7DLusHws14gOlVMl/ShtkMPfoFculqejaiQW5EG2Gt5/cCdg==",
"dev": true
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@ -1034,8 +1083,7 @@
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
"integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
"dev": true,
"optional": true
"dev": true
},
"component-bind": {
"version": "1.0.0",
@ -1202,6 +1250,29 @@
"sha.js": "2.4.10"
}
},
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
"lru-cache": "4.1.1",
"shebang-command": "1.2.0",
"which": "1.3.0"
},
"dependencies": {
"lru-cache": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
"integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
"dev": true,
"requires": {
"pseudomap": "1.0.2",
"yallist": "2.1.2"
}
}
}
},
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
@ -1661,6 +1732,21 @@
"safe-buffer": "5.1.1"
}
},
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
"integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
"dev": true,
"requires": {
"cross-spawn": "5.1.0",
"get-stream": "3.0.0",
"is-stream": "1.1.0",
"npm-run-path": "2.0.2",
"p-finally": "1.0.0",
"signal-exit": "3.0.2",
"strip-eof": "1.0.0"
}
},
"exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@ -2040,6 +2126,12 @@
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
},
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
"get-uri": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz",
@ -2130,6 +2222,27 @@
"requires": {
"amdefine": "1.0.1"
}
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"optional": true,
"requires": {
"source-map": "0.5.7",
"uglify-to-browserify": "1.0.2",
"yargs": "3.10.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"optional": true
}
}
}
}
},
@ -3029,8 +3142,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
"integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
"dev": true,
"optional": true
"dev": true
},
"levn": {
"version": "0.3.0",
@ -3549,6 +3661,12 @@
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
"dev": true
},
"mk-dirs": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mk-dirs/-/mk-dirs-1.0.0.tgz",
"integrity": "sha1-RO5n+CNBxnYnGOiOheV3iC4fZ/0=",
"dev": true
},
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@ -3602,6 +3720,12 @@
"on-headers": "1.0.1"
}
},
"mri": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mri/-/mri-1.1.0.tgz",
"integrity": "sha1-XAo/KcjM/7ux7JQdzsCdcfoy82o=",
"dev": true
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@ -3749,6 +3873,15 @@
"remove-trailing-separator": "1.1.0"
}
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
"path-key": "2.0.1"
}
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@ -3860,6 +3993,12 @@
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"pac-proxy-agent": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz",
@ -4005,6 +4144,12 @@
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-parse": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
@ -4594,7 +4739,6 @@
"resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
"dev": true,
"optional": true,
"requires": {
"align-text": "0.1.4"
}
@ -4732,6 +4876,21 @@
}
}
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"shell-quote": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
@ -5075,6 +5234,12 @@
"is-utf8": "0.2.1"
}
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
@ -5117,6 +5282,36 @@
"acorn-node": "1.3.0"
}
},
"taskr": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/taskr/-/taskr-1.1.0.tgz",
"integrity": "sha1-TynQrOJvTerppHjqv5qgQy6IRDg=",
"dev": true,
"requires": {
"bluebird": "3.5.1",
"clor": "5.2.0",
"glob": "7.1.2",
"mk-dirs": "1.0.0",
"mri": "1.1.0",
"tinydate": "1.0.0"
},
"dependencies": {
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
"inherits": "2.0.3",
"minimatch": "3.0.4",
"once": "1.4.0",
"path-is-absolute": "1.0.1"
}
}
}
},
"throttleit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
@ -5162,6 +5357,12 @@
"dev": true,
"optional": true
},
"tinydate": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.0.0.tgz",
"integrity": "sha1-IPMXVqE5We+MV+wTO6KbWt4ELKw=",
"dev": true
},
"tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@ -5259,24 +5460,13 @@
"dev": true
},
"uglify-js": {
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"version": "3.3.13",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.13.tgz",
"integrity": "sha512-7rdn/bDOG1ElSTPdh7AI5TCjLv63ZD4k8BBadN3ssIkhlaQL2c0yRxmXCyOYhZK0wZTgGgUSnYQ4CGu+Jos5cA==",
"dev": true,
"optional": true,
"requires": {
"source-map": "0.5.7",
"uglify-to-browserify": "1.0.2",
"yargs": "3.10.0"
},
"dependencies": {
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true,
"optional": true
}
"commander": "2.14.1",
"source-map": "0.6.1"
}
},
"uglify-to-browserify": {
@ -5489,8 +5679,7 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
"integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
"dev": true,
"optional": true
"dev": true
},
"wordwrap": {
"version": "0.0.3",
@ -5549,7 +5738,6 @@
"resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
"dev": true,
"optional": true,
"requires": {
"camelcase": "1.2.1",
"cliui": "2.1.0",
@ -5561,8 +5749,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
"integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
"dev": true,
"optional": true
"dev": true
}
}
},

View File

@ -2,17 +2,13 @@
"name": "spacetac",
"version": "0.1.0",
"description": "A tactical RPG set in space",
"main": "src/build.js",
"main": "out/build.js",
"scripts": {
"postinstall": "rm -rf out/vendor && mkdir -p out/vendor && cp -r node_modules/phaser/build out/vendor/phaser && cp -r node_modules/parse/dist out/vendor/parse && cp -r node_modules/jasmine-core/lib/jasmine-core out/vendor/jasmine",
"build": "tsc -p .",
"atlas": "rm -f out/assets/atlas* && find graphics/exported -name '*.png' -print0 | xargs -0 gf-pack --name out/assets/atlas --fullpath --width 1024 --height 1024 --square --powerOfTwo --trim --padding 2",
"pretest": "tsc -p .",
"test": "karma start spec/support/karma.conf.js && remap-istanbul -i out/coverage/coverage.json -o out/coverage -t html",
"prestart": "tsc -p . || true",
"start": "live-server out --host=127.0.0.1 --port=8012 --ignore=coverage",
"build": "taskr build",
"test": "taskr test",
"start": "taskr",
"codecov": "remap-istanbul -i out/coverage/coverage.json -o out/coverage/mapped.json -t json && codecov -f out/coverage/mapped.json",
"deploy": "rsync -avz --delete ./out/ hosting.thunderk.net:/srv/website/spacetac/"
"deploy": "taskr deploy"
},
"repository": {
"type": "git",
@ -21,6 +17,8 @@
"author": "Michael Lemaire",
"license": "MIT",
"devDependencies": {
"@taskr/shell": "^1.1.0",
"@taskr/watch": "^1.1.0",
"@types/jasmine": "^2.8.6",
"babel-polyfill": "6.26.0",
"codecov": "3.0.0",
@ -33,11 +31,13 @@
"karma-spec-reporter": "^0.0.32",
"live-server": "1.2.0",
"remap-istanbul": "^0.10.1",
"typescript": "^2.7.1"
"taskr": "^1.1.0",
"typescript": "^2.7.1",
"uglify-js": "^3.3.13"
},
"dependencies": {
"jasmine-core": "^2.9.1",
"parse": "^1.11.0",
"phaser": "2.6.2"
}
}
}

74
taskfile.js Normal file
View File

@ -0,0 +1,74 @@
const liveServer = require('live-server');
function shell(task, cmd) {
return task.source(".").shell(cmd);
}
module.exports = {
*serve(task) {
liveServer.start({
host: '127.0.0.1',
port: 8012,
root: 'out',
ignore: 'coverage',
wait: 500
});
return new Promise(() => null);
},
*vendors(task) {
yield shell(task, "rm -rf out/vendor");
yield shell(task, "mkdir -p out/vendor");
yield shell(task, "cp -r node_modules/phaser/build out/vendor/phaser");
yield shell(task, "cp -r node_modules/parse/dist out/vendor/parse");
yield shell(task, "cp -r node_modules/jasmine-core/lib/jasmine-core out/vendor/jasmine");
},
*watch_vendors(task) {
yield task.watch("package.json", ["vendors"]);
},
*ts(task) {
yield shell(task, "tsc -p .");
},
*watch_ts(task) {
yield task.watch(["src/**/*.ts", "tsconfig.json"], ["ts"]);
},
*atlas(task) {
yield shell(task, "rm -f out/assets/atlas*");
yield shell(task, "find graphics/exported -name '*.png' -print0 | xargs -0 gf-pack --name out/assets/atlas --fullpath --width 1024 --height 1024 --square --powerOfTwo --trim --padding 2");
},
*watch_atlas(task) {
yield task.watch("graphics/exported/**/*.png", ["atlas"]);
},
*build(task) {
yield task.parallel(['ts', 'atlas', 'vendors']);
},
*optimize(task) {
yield shell(task, "uglifyjs out/build.js --source-map --output out/build.min.js");
},
*deploy(task) {
yield task.serial(['build', 'optimize']);
yield shell(task, "rsync -avz --delete ./out/ hosting.thunderk.net:/srv/website/spacetac/");
},
*karma(task) {
yield shell(task, "karma start spec/support/karma.conf.js");
},
*test(task) {
yield task.serial(['build', 'karma']);
yield shell(task, "remap-istanbul -i out/coverage/coverage.json -o out/coverage -t html");
},
*default(task) {
yield task.start('build');
yield task.parallel(['serve', 'watch_ts', 'watch_atlas', 'watch_vendors']);
}
}