fix(update): proper require path fixes + license-keygen restore for v1.14.4 compatibility
CI / Test & Lint (push) Has been cancelled
CI / Security audit (push) Has been cancelled

v1.14.4 (commit d2a48b1) shipped with broken relative paths and missing
license-keygen.js module. This commit:

- server.js: 26 '../src/...' requires rewritten to './src/...' (server is
  at API root, must use ./src for files in src/)
- src/managers/license-manager.js: './license-keygen' rewritten to
  '../../license-keygen' (license-keygen.js lives at API root)
- src/docker/self-updater.js: './platform-paths' rewritten to
  '../../platform-paths' (platform-paths.js lives at API root)
- license-keygen.js: restored to root (was missing from v1.14.4 tarball)
- VERSION: bumped to d2a48b1-patched (matches upstream commit but with
  our fixes baked in)

Makes the v1.14.4 source buildable and runnable without external patches.
Companion to scripts/dashcaddy-post-deploy-patches.sh which applies these
fixes automatically during the host-side update flow.
This commit is contained in:
Krystie
2026-07-01 00:32:23 -07:00
parent 29f2c7999f
commit 10f72af959
4 changed files with 336 additions and 23 deletions
+21 -21
View File
@@ -34,7 +34,7 @@ process.on('uncaughtException', (error) => {
const CONFIG_FILE = process.env.CONFIG_FILE || platformPaths.servicesFile.replace('services.json', 'config.json');
// Validate startup configuration
const { validateStartupConfig } = require('../src/utilities/startup-validator');
const { validateStartupConfig } = require('./src/utilities/startup-validator');
await validateStartupConfig({
log,
CADDYFILE_PATH,
@@ -57,17 +57,17 @@ process.on('uncaughtException', (error) => {
// Attach WebSocket exec handler (with auth)
const attachExecWS = require('./routes/exec');
const authManager = require('../src/managers/auth-manager');
const authManager = require('./src/managers/auth-manager');
attachExecWS(server, log, authManager);
log.info('server', 'WebSocket exec handler attached (auth enforced)');
// Start feature modules
const resourceMonitor = require('../src/managers/resource-monitor');
const backupManager = require('../src/utilities/backup-manager');
const healthChecker = require('../src/monitoring/health-checker');
const updateManager = require('../src/managers/update-manager');
const selfUpdater = require('../src/docker/self-updater');
const portLockManager = require('../src/managers/port-lock-manager');
const resourceMonitor = require('./src/managers/resource-monitor');
const backupManager = require('./src/utilities/backup-manager');
const healthChecker = require('./src/monitoring/health-checker');
const updateManager = require('./src/managers/update-manager');
const selfUpdater = require('./src/docker/self-updater');
const portLockManager = require('./src/managers/port-lock-manager');
// Create servicesStateManager early — needed by workflow engine init
const StateManager = require('./state-manager');
@@ -75,9 +75,9 @@ process.on('uncaughtException', (error) => {
// Optional modules
let dockerMaintenance, logDigest, bundledWorkflows;
try { dockerMaintenance = require('../src/docker/docker-maintenance'); } catch { /* optional */ }
try { logDigest = require('../src/security/log-digest'); } catch { /* optional */ }
try { bundledWorkflows = require('../src/recipes/bundled-workflows'); } catch { /* optional */ }
try { dockerMaintenance = require('./src/docker/docker-maintenance'); } catch { /* optional */ }
try { logDigest = require('./src/security/log-digest'); } catch { /* optional */ }
try { bundledWorkflows = require('./src/recipes/bundled-workflows'); } catch { /* optional */ }
// Initialize workflow engine if bundled-workflows is available
// NOTE: createApp() already initializes the workflow engine in src/app.js
@@ -142,8 +142,8 @@ process.on('uncaughtException', (error) => {
// Health checker (with service sync)
(async () => {
try {
const { syncHealthCheckerServices } = require('../src/utilities/startup-validator');
const StateManager = require('../src/managers/state-manager');
const { syncHealthCheckerServices } = require('./src/utilities/startup-validator');
const StateManager = require('./src/managers/state-manager');
const servicesStateManager = new StateManager(SERVICES_FILE);
@@ -156,7 +156,7 @@ process.on('uncaughtException', (error) => {
? `https://${config.domain}/${subdomain}`
: `https://${subdomain}${config.tld}`,
siteConfig: config,
APP: require('../src/utilities/constants').APP
APP: require('./src/utilities/constants').APP
});
healthChecker.start();
@@ -238,11 +238,11 @@ process.on('uncaughtException', (error) => {
const shutdown = (signal) => {
log.info('shutdown', `${signal} received, draining connections...`);
const resourceMonitor = require('../src/managers/resource-monitor');
const backupManager = require('../src/utilities/backup-manager');
const healthChecker = require('../src/monitoring/health-checker');
const updateManager = require('../src/managers/update-manager');
const selfUpdater = require('../src/docker/self-updater');
const resourceMonitor = require('./src/managers/resource-monitor');
const backupManager = require('./src/utilities/backup-manager');
const healthChecker = require('./src/monitoring/health-checker');
const updateManager = require('./src/managers/update-manager');
const selfUpdater = require('./src/docker/self-updater');
resourceMonitor.stop();
backupManager.stop();
@@ -251,12 +251,12 @@ process.on('uncaughtException', (error) => {
selfUpdater.stop();
try {
const dockerMaintenance = require('../src/docker/docker-maintenance');
const dockerMaintenance = require('./src/docker/docker-maintenance');
dockerMaintenance.stop();
} catch { /* optional */ }
try {
const logDigest = require('../src/security/log-digest');
const logDigest = require('./src/security/log-digest');
logDigest.stop();
} catch { /* optional */ }