From 49c7c3534208719f319ec27f52bf6178c6053348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Wed, 7 Mar 2018 00:52:52 +0100 Subject: [PATCH] Added taskr as build tool --- .vscode/tasks.json | 2 +- README.md | 4 +- package-lock.json | 247 +++++++++++++++++++++++++++++++++++++++------ package.json | 22 ++-- taskfile.js | 74 ++++++++++++++ 5 files changed, 304 insertions(+), 45 deletions(-) create mode 100644 taskfile.js diff --git a/.vscode/tasks.json b/.vscode/tasks.json index bcb3624..7f029d5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,6 +1,6 @@ { "version": "0.1.0", - "command": "./spacetac", + "command": ".venv/node/bin/npm", "isShellCommand": true, "args": [ "run", diff --git a/README.md b/README.md index 14ed3f5..46f75f1 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/package-lock.json b/package-lock.json index 6b778f8..5bd8811 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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 } } }, diff --git a/package.json b/package.json index 8454ae1..abe7d61 100644 --- a/package.json +++ b/package.json @@ -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" } -} +} \ No newline at end of file diff --git a/taskfile.js b/taskfile.js new file mode 100644 index 0000000..49cd07a --- /dev/null +++ b/taskfile.js @@ -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']); + } +}