From 1aa378d930c1fb9fd827a866ccdc4d4e6184785f Mon Sep 17 00:00:00 2001 From: Bartek Fabiszewski Date: Tue, 7 Apr 2020 19:21:29 +0200 Subject: [PATCH] Pre-commit build script --- .githooks/build-staged.js | 48 +++++++++++++++++++++++++++++++++++++++ js/dist/.gitignore | 3 +-- package.json | 6 ++--- 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 .githooks/build-staged.js diff --git a/.githooks/build-staged.js b/.githooks/build-staged.js new file mode 100644 index 0000000..cbfefcf --- /dev/null +++ b/.githooks/build-staged.js @@ -0,0 +1,48 @@ +/* + * μlogger + * + * Copyright(C) 2020 Bartek Fabiszewski (www.fabiszewski.net) + * + * This is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +const fs = require('fs'); +const crypto = require('crypto'); +const exec = require('child_process').execSync; + +const getBundleHash = () => { + const distDir = 'js/dist/'; + const hash = crypto.createHash('sha1'); + fs.readdirSync(distDir) + .filter(path => path.endsWith('.js')) + .sort() + .forEach(path => { + hash.update(fs.readFileSync(distDir + path)); + }); + return hash.digest('hex'); +}; + +const main = () => { + const bundleHash = getBundleHash(); + try { + exec('npm run build'); + if (getBundleHash() !== bundleHash) { + exec('git add js/dist/*'); + } + } catch (e) { + console.log('Warning: build failed!'); + } +}; + +main(); diff --git a/js/dist/.gitignore b/js/dist/.gitignore index 83929f8..1de5ba0 100644 --- a/js/dist/.gitignore +++ b/js/dist/.gitignore @@ -1,4 +1,3 @@ * !.gitignore -!1.bundle.js* -!bundle.js* +!*bundle.js* \ No newline at end of file diff --git a/package.json b/package.json index 8951632..cd8980d 100644 --- a/package.json +++ b/package.json @@ -88,10 +88,10 @@ ], "husky": { "hooks": { - "pre-push": "prepush-if-changed" + "pre-commit": "lint-staged" } }, - "prepush-if-changed": { - "(js/src/**/*.js|package?(-lock).json)": "npm run build" + "lint-staged": { + "js/src/**/*.js": "node .githooks/build-staged.js" } }