Upgrade system finished

This commit is contained in:
2026-03-22 21:47:09 -06:00
parent a71ba20176
commit bb1935027d
299 changed files with 8067 additions and 2758 deletions

View File

@@ -172,6 +172,11 @@ const envSchema = z.object({
MEDIA_UPLOADS: z.string().default('/media/uploads'),
MAX_UPLOAD_SIZE_GB: z.coerce.number().default(10),
// Container Registry
GITEA_REGISTRY: z.string().default('gitea.bnkops.com/admin'),
GITEA_REGISTRY_USER: z.string().default(''),
GITEA_REGISTRY_PASS: z.string().default(''),
// Gitea Docs Comments
GITEA_COMMENTS_ENABLED: z.string().default('false'),
GITEA_API_TOKEN: z.string().default(''),

View File

@@ -39,17 +39,18 @@ router.post('/check', (req, res) => {
/**
* POST /api/upgrade/start
* Triggers an upgrade (writes trigger.json for systemd watcher).
* Body: { skipBackup?: boolean, pullServices?: boolean, dryRun?: boolean }
* Body: { skipBackup?: boolean, pullServices?: boolean, dryRun?: boolean, useRegistry?: boolean }
*/
router.post('/start', (req, res) => {
try {
const userEmail = req.user?.email || 'unknown';
const { skipBackup, pullServices, dryRun } = req.body as {
const { skipBackup, pullServices, dryRun, useRegistry } = req.body as {
skipBackup?: boolean;
pullServices?: boolean;
dryRun?: boolean;
useRegistry?: boolean;
};
upgradeService.triggerUpgrade(userEmail, { skipBackup, pullServices, dryRun });
upgradeService.triggerUpgrade(userEmail, { skipBackup, pullServices, dryRun, useRegistry });
res.json({ message: 'Upgrade triggered' });
} catch (err) {
const message = err instanceof Error ? err.message : 'Failed to trigger upgrade';

View File

@@ -66,6 +66,7 @@ interface TriggerPayload {
skipBackup?: boolean;
pullServices?: boolean;
dryRun?: boolean;
useRegistry?: boolean;
triggeredAt: string;
triggeredBy: string;
}
@@ -136,7 +137,7 @@ function triggerCheck(triggeredBy: string, branch?: string): void {
function triggerUpgrade(
triggeredBy: string,
options: { skipBackup?: boolean; pullServices?: boolean; dryRun?: boolean; branch?: string } = {},
options: { skipBackup?: boolean; pullServices?: boolean; dryRun?: boolean; branch?: string; useRegistry?: boolean } = {},
): void {
if (isRunning()) {
throw new Error('An upgrade is already in progress');

View File

@@ -54,6 +54,7 @@ import { areaImportRouter } from './modules/map/locations/area-import.routes';
import emailTemplatesRouter from './modules/email-templates/email-templates-admin.routes';
import { observabilityRouter } from './modules/observability/observability.routes';
import { upgradeRouter } from './modules/upgrade/upgrade.routes';
import { registryRouter } from './modules/registry/registry.routes';
import { dashboardRouter } from './modules/dashboard/dashboard.routes';
import { initEncryption } from './utils/crypto';
import { emailService } from './services/email.service';
@@ -253,6 +254,7 @@ app.use('/api/rocketchat', rocketchatRouter); // Rocket.Chat SSO +
app.use('/api/jitsi', jitsiRouter); // Jitsi Meet JWT + status (auth required)
app.use('/api/observability', observabilityRouter); // Observability / monitoring (SUPER_ADMIN)
app.use('/api/upgrade', upgradeRouter); // System upgrade management (SUPER_ADMIN)
app.use('/api/registry', registryRouter); // Container registry management (SUPER_ADMIN)
app.use('/api/dashboard', dashboardRouter); // Dashboard summary (ADMIN roles)
app.use('/api/donation-pages', donationPagesPublicRouter); // Public donation pages (no auth)
app.use('/api/payments', paymentsPublicRouter); // Public payment routes (plans, checkout, my subscription)

View File

@@ -124,11 +124,12 @@ class AutoUpgradeService {
logger.info(`Auto-upgrade: ${status.commitsBehind} commits behind, triggering upgrade`);
// Read settings for pullServices option
// Read settings for pullServices and registry options
const settings = await siteSettingsService.get();
upgradeService.triggerUpgrade('auto-upgrade', {
skipBackup: false,
pullServices: settings.autoUpgradePullServices,
useRegistry: settings.useRegistryForUpgrade ?? false,
});
// API will restart during upgrade — post-restart handler takes over
} catch (err) {