From 7f9381169f9d0139a4593c28b2b7dde692371ce0 Mon Sep 17 00:00:00 2001 From: VPS 4 Deploy Agent Date: Sat, 30 May 2026 16:00:18 +0200 Subject: [PATCH] perf: preserve Docker npm cache - version bumps only touch version.txt, not package.json --- dental-server/server.js | 9 +++++++-- deploy-prod.sh | 3 ++- update-version.js | 15 +++++---------- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/dental-server/server.js b/dental-server/server.js index 83694c3..0f02b9e 100644 --- a/dental-server/server.js +++ b/dental-server/server.js @@ -500,8 +500,13 @@ app.get('/login', (req, res) => { // Função utilitária de Cache Buster async function serveHtmlWithCacheBuster(res, filePath) { try { - const pkg = require('./package.json'); - const APP_VERSION = pkg.version || Date.now(); + // Lê version.txt (não package.json) para não ter cache-miss no Docker a cada deploy + let APP_VERSION; + try { + APP_VERSION = (await fs.readFile(path.join(__dirname, 'version.txt'), 'utf8')).trim(); + } catch (_) { + APP_VERSION = require('./package.json').version || Date.now(); + } let content = await fs.readFile(filePath, 'utf8'); // Injeta versão em tags de script e css diff --git a/deploy-prod.sh b/deploy-prod.sh index 21a60d9..71a0cf4 100755 --- a/deploy-prod.sh +++ b/deploy-prod.sh @@ -58,8 +58,9 @@ ssh -o BatchMode=yes -o StrictHostKeyChecking=no "${PROD_USER}@${PROD_VPS}" " " # 5. Commit do bump de versão de volta ao Gitea (listener ignora → sem loop) +# package.json não é incluído propositalmente: preserva o cache de npm install no Docker log "💾 git commit + push do bump de versão..." -git add dental-server/version.txt dental-server/package.json dental-server/public/index.html +git add dental-server/version.txt dental-server/public/index.html git commit -m "chore(deploy): bump version" || true git push origin main || true diff --git a/update-version.js b/update-version.js index d0b971b..44a70ac 100644 --- a/update-version.js +++ b/update-version.js @@ -5,24 +5,19 @@ const fs = require('fs'); const path = require('path'); -const versionFile = path.join(__dirname, 'dental-server', 'version.txt'); -const packageFile = path.join(__dirname, 'dental-server', 'package.json'); -const indexFile = path.join(__dirname, 'dental-server', 'public', 'index.html'); +const versionFile = path.join(__dirname, 'dental-server', 'version.txt'); +const indexFile = path.join(__dirname, 'dental-server', 'public', 'index.html'); const current = fs.readFileSync(versionFile, 'utf8').trim(); const parts = current.split('.').map(Number); parts[2]++; // bump PATCH const next = parts.join('.'); -// version.txt +// version.txt — fonte de verdade do número de versão fs.writeFileSync(versionFile, next + '\n'); -// package.json -const pkg = JSON.parse(fs.readFileSync(packageFile, 'utf8')); -pkg.version = next; -fs.writeFileSync(packageFile, JSON.stringify(pkg, null, 2) + '\n'); - -// index.html — substitui qualquer v{X.Y.Z} dentro do da sidebar +// index.html — substitui v{X.Y.Z} dentro do da sidebar +// (package.json NÃO é alterado para preservar o cache de npm install no Docker) let html = fs.readFileSync(indexFile, 'utf8'); html = html.replace( /(RF Dental.*?]*>)\s*v[\d.]+\s*(<\/span>)/s,