From 5fa493cb177a07c73f42caba0702bc345c08736d Mon Sep 17 00:00:00 2001 From: HF Date: Sat, 11 Jun 2022 23:35:37 +0200 Subject: [PATCH] update githook to decide if we need npm install --- deployment/post-receive | 44 ++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/deployment/post-receive b/deployment/post-receive index 01956ccc..a084d420 100755 --- a/deployment/post-receive +++ b/deployment/post-receive @@ -1,11 +1,9 @@ #!/bin/bash -# This hook dists pixelplanet after a push, and deploys it +# This hook builds pixelplanet after a push, and deploys it # If it is the production branch, it will deploy it on the life system, and other branch will get deployed to the dev-canvas (a second canvas that is running on the server) -# canvases.json, proxies.json and ecosystem.yml are already in the terget directories # # To set up a server to use this, you have to go through the building steps manually first. -# And the configured ecosystem-x.yml files need to be in the target folder already, as they don't get copied from the build directory. -# This hook just buildss the canvas, it does not install new packages if needed. So this has to be done manually first +# This hook just builds the canvas, it does not install new packages if needed. So this has to be done manually first # #folder for building the canvas (the git repository will get checkout there and the canvas will get buil thtere) BUILDDIR="/home/pixelpla/pixelplanet-build" @@ -14,6 +12,24 @@ DEVFOLDER="/home/pixelpla/pixelplanet-dev" #folder for production canvas PFOLDER="/home/pixelpla/pixelplanet" +should_reinstall () { + local TMPFILE="${BUILDDIR}/package.json.${branch}.tmp" + local ORFILE="${BUILDDIR}/package.json" + [ -f "${TMPFILE}" ] && diff -q "${TMPFILE}" "${ORFILE}" && { + echo "package.json stil the same, no need to rerun npm install." + return 1 + } + cp "${ORFILE}" "${TMPFILE}" + echo "package.json changed, need to run npm install." + return 0 +} + +npm_reinstall () { + rm -rf node_modules + rm package-lock.json + npm install +} + while read oldrev newrev refname do branch=$(git rev-parse --symbolic --abbrev-ref $refname) @@ -25,9 +41,14 @@ do COMMITS=`echo "$COMMITS" | sed ':a;N;$!ba;s/\n/\\\n/g'` echo "---BUILDING pixelplanet---" cd "$BUILDDIR" + should_reinstall + DO_REINSTALL=$? + [ $DO_REINSTALL -eq 0 ] && npm_reinstall npm run build echo "---RESTARTING CANVAS---" cp -r dist/*.js "${PFOLDER}/" + cp -r dist/workers "${PFOLDER}/" + rm -rf "${PFOLDER}/public/assets" cp -r dist/public "${PFOLDER}/" cp -r dist/captchaFonts "${PFOLDER}/" cp -r dist/package.json "${PFOLDER}/" @@ -37,22 +58,29 @@ do cd "$PFOLDER" pm2 stop ppfun-server pm2 stop ppfun-backups - pm2 stop ppfun-captchas + pm2 stop ppfun-captchs + [ $DO_REINSTALL -eq 0 ] && npm_reinstall pm2 start ecosystem.yml pm2 start ecosystem-backup.yml - pm2 start ecosystem-captchas.yml + pm2 start ecosystem-captchas.yml else echo "---UPDATING REPO ON DEV SERVER---" pm2 stop ppfun-server-dev + pm2 stop ppfun-captchas-dev GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git fetch --all GIT_WORK_TREE="$BUILDDIR" GIT_DIR="${BUILDDIR}/.git" git reset --hard "origin/$branch" COMMITS=`git log --pretty=format:'- %s%b' $newrev ^$oldrev` COMMITS=`echo "$COMMITS" | sed ':a;N;$!ba;s/\n/\\\n/g'` echo "---BUILDING pixelplanet---" cd "$BUILDDIR" + should_reinstall + DO_REINSTALL=$? + [ $DO_REINSTALL -eq 0 ] && npm_reinstall nice -n 19 npm run build:dev echo "---RESTARTING CANVAS---" cp -r dist/*.js "${DEVFOLDER}/" + cp -r dist/workers "${DEVFOLDER}/" + rm -rf "${DEVFOLDER}/public/assets" cp -r dist/public "${DEVFOLDER}/" cp -r dist/captchaFonts "${DEVFOLDER}/" cp -r dist/package.json "${DEVFOLDER}/" @@ -60,6 +88,8 @@ do cp -r dist/styleassets.json "${DEVFOLDER}/" mkdir -p "${PFOLDER}/log" cd "$DEVFOLDER" + [ $DO_REINSTALL -eq 0 ] && npm_reinstall pm2 start ecosystem.yml + pm2 start ecosystem-captchas.yml fi - done +done