From 8c1be6555f6e64b9b22ea4f6880c73cbb8bbfd14 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Mon, 20 Oct 2025 12:14:02 +0000 Subject: [PATCH] fix(migrations): correct migration version from v4.0-to-v4.1 to v4.1-to-v4.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The migration was incorrectly named as v4.0→v4.1 but was actually performing the v4.1→v4.2 migration (moving thresholds from UPS-level to action-level). This meant users upgrading from v4.1 would not get their configs migrated. Changes: - Renamed migration file from migration-v4.0-to-v4.1.ts to migration-v4.1-to-v4.2.ts - Updated class name from MigrationV4_0ToV4_1 to MigrationV4_1ToV4_2 - Updated fromVersion from '4.0' to '4.1' - Updated toVersion from '4.1' to '4.2' - Updated shouldRun() to check for config.version === '4.1' - Updated all imports and exports to reference the new class name - Updated comments and log messages to reflect v4.1→v4.2 migration --- ts/migrations/index.ts | 2 +- ts/migrations/migration-runner.ts | 6 ++-- ...0-to-v4.1.ts => migration-v4.1-to-v4.2.ts} | 33 ++++++++++--------- 3 files changed, 21 insertions(+), 20 deletions(-) rename ts/migrations/{migration-v4.0-to-v4.1.ts => migration-v4.1-to-v4.2.ts} (82%) diff --git a/ts/migrations/index.ts b/ts/migrations/index.ts index 74e65fd..85cb64e 100644 --- a/ts/migrations/index.ts +++ b/ts/migrations/index.ts @@ -8,4 +8,4 @@ export { BaseMigration } from './base-migration.ts'; export { MigrationRunner } from './migration-runner.ts'; export { MigrationV1ToV2 } from './migration-v1-to-v2.ts'; export { MigrationV3ToV4 } from './migration-v3-to-v4.ts'; -export { MigrationV4_0ToV4_1 } from './migration-v4.0-to-v4.1.ts'; +export { MigrationV4_1ToV4_2 } from './migration-v4.1-to-v4.2.ts'; diff --git a/ts/migrations/migration-runner.ts b/ts/migrations/migration-runner.ts index a719a97..41d9775 100644 --- a/ts/migrations/migration-runner.ts +++ b/ts/migrations/migration-runner.ts @@ -1,7 +1,7 @@ import { BaseMigration } from './base-migration.ts'; import { MigrationV1ToV2 } from './migration-v1-to-v2.ts'; import { MigrationV3ToV4 } from './migration-v3-to-v4.ts'; -import { MigrationV4_0ToV4_1 } from './migration-v4.0-to-v4.1.ts'; +import { MigrationV4_1ToV4_2 } from './migration-v4.1-to-v4.2.ts'; import { logger } from '../logger.ts'; /** @@ -18,8 +18,8 @@ export class MigrationRunner { this.migrations = [ new MigrationV1ToV2(), new MigrationV3ToV4(), - new MigrationV4_0ToV4_1(), - // Add future migrations here (v4.2, v4.3, etc.) + new MigrationV4_1ToV4_2(), + // Add future migrations here (v4.3, v4.4, etc.) ]; // Sort by version order to ensure they run in sequence diff --git a/ts/migrations/migration-v4.0-to-v4.1.ts b/ts/migrations/migration-v4.1-to-v4.2.ts similarity index 82% rename from ts/migrations/migration-v4.0-to-v4.1.ts rename to ts/migrations/migration-v4.1-to-v4.2.ts index f13dd0f..af21bdb 100644 --- a/ts/migrations/migration-v4.0-to-v4.1.ts +++ b/ts/migrations/migration-v4.1-to-v4.2.ts @@ -2,7 +2,7 @@ import { BaseMigration } from './base-migration.ts'; import { logger } from '../logger.ts'; /** - * Migration from v4.0 to v4.1 + * Migration from v4.1 to v4.2 * * Major changes: * 1. Moves thresholds from UPS level to action level @@ -10,23 +10,24 @@ import { logger } from '../logger.ts'; * 3. Adds empty actions array to UPS devices without actions * 4. Adds empty actions array to groups * - * Transforms v4.0 format: + * Transforms v4.1 format (with UPS-level thresholds): * { - * version: "4.0", + * version: "4.1", * upsDevices: [ * { * id: "ups-1", * name: "UPS 1", * snmp: {...}, * thresholds: { battery: 60, runtime: 20 }, // UPS-level - * groups: [] + * groups: [], + * actions: [] * } * ] * } * - * To v4.1 format: + * To v4.2 format (with action-level thresholds): * { - * version: "4.1", + * version: "4.2", * upsDevices: [ * { * id: "ups-1", @@ -37,7 +38,7 @@ import { logger } from '../logger.ts'; * { * type: "shutdown", * thresholds: { battery: 60, runtime: 20 }, - * onlyOnThresholdViolation: true, + * triggerMode: "onlyThresholds", * shutdownDelay: 5 * } * ] @@ -45,28 +46,28 @@ import { logger } from '../logger.ts'; * ] * } */ -export class MigrationV4_0ToV4_1 extends BaseMigration { - readonly fromVersion = '4.0'; - readonly toVersion = '4.1'; +export class MigrationV4_1ToV4_2 extends BaseMigration { + readonly fromVersion = '4.1'; + readonly toVersion = '4.2'; async shouldRun(config: any): Promise { - // Run if config is version 4.0 or missing version with v4 structure - if (config.version === '4.0') { + // Run if config is version 4.1 + if (config.version === '4.1') { return true; } - // Also run if config has upsDevices with thresholds at UPS level (v4.0 format) + // Also run if config has upsDevices with thresholds at UPS level (v4.1 format) if (config.upsDevices && config.upsDevices.length > 0) { const firstDevice = config.upsDevices[0]; - // v4.0 has thresholds at UPS level, v4.1 has them in actions - return firstDevice.thresholds !== undefined && firstDevice.actions === undefined; + // v4.1 has thresholds at UPS level, v4.2 has them in actions + return firstDevice.thresholds !== undefined; } return false; } async migrate(config: any): Promise { - logger.info(`${this.getName()}: Migrating v4.0 config to v4.1 format...`); + logger.info(`${this.getName()}: Migrating v4.1 config to v4.2 format...`); logger.dim(` - Moving thresholds from UPS level to action level`); logger.dim(` - Creating default shutdown actions from existing thresholds`);