Add container readiness checks and exclude local state from images

Adapted from MikaelKW/nodecast-tv-plus readiness and container context work.

Co-authored-by: MikaelKW <87399352+MikaelKW@users.noreply.github.com>
This commit is contained in:
Technomancer702
2026-10-12 16:39:31 -07:00
parent 7ce5f4693d
commit bd8365efc8
8 changed files with 161 additions and 1 deletions

31
scripts/healthcheck.cjs Normal file
View File

@ -0,0 +1,31 @@
const http = require('node:http');
function checkHealth(port = process.env.PORT || 3000, timeout = 4000) {
return new Promise(resolve => {
let settled = false;
const finish = healthy => {
if (settled) return;
settled = true;
clearTimeout(timer);
resolve(healthy);
};
const request = http.get({ host: '127.0.0.1', port, path: '/api/health' }, response => {
let body = '';
response.setEncoding('utf8');
response.on('data', chunk => {
body += chunk;
if (body.length > 4096) { finish(false); request.destroy(); }
});
response.on('error', () => finish(false));
response.on('end', () => {
try { finish(response.statusCode === 200 && JSON.parse(body).status === 'ok'); }
catch { finish(false); }
});
});
request.on('error', () => finish(false));
const timer = setTimeout(() => { finish(false); request.destroy(); }, timeout);
});
}
if (require.main === module) checkHealth().then(healthy => { process.exitCode = healthy ? 0 : 1; });
module.exports = { checkHealth };