127 lines
4.8 KiB
TypeScript
127 lines
4.8 KiB
TypeScript
import { migrateLegacySchema, installLifecycleIndexes } from './legacy.js';
|
|
import { migrateNativeInstances } from '../backends/schema.js';
|
|
import { migrateServerKeys } from './server-keys.js';
|
|
import { ensureAutoscalingSchema } from '../autoscaling/schema.js';
|
|
import { ensureRebalancingSchema } from '../rebalancing/schema.js';
|
|
import { migrateFileBlobs } from './file-blobs.js';
|
|
import { installPerformanceIndexes } from './performance-indexes.js';
|
|
import {
|
|
installMetricsMatchRevisions,
|
|
installMetricsPlayerRevisions,
|
|
installMetricsPolicyRevisions,
|
|
installMetricsProvisioningRevisions,
|
|
installReportRevisions
|
|
} from '../reports/revisions.js';
|
|
import { enableIncrementalVacuum, retentionClocks } from './retention-clocks.js';
|
|
import { migrateHostSchema } from '../hosts/schema.js';
|
|
import {
|
|
migrateAuthSchema,
|
|
migrateRememberedSessions,
|
|
migrateSuperViewerRole
|
|
} from '../auth/schema.js';
|
|
import { migrateGameFileSchema } from '../game-files/schema.js';
|
|
import { migrateLeaderboardReports } from './leaderboard-reports.js';
|
|
import { migratePlayerScoreTotal } from './player-score-total.js';
|
|
import { migrateBank } from './bank.js';
|
|
import { migrateBankCredentials } from './bank-credentials.js';
|
|
import { migrateTemperatures } from '../hosts/temperatures.js';
|
|
import type { Migration } from './migration-runner.js';
|
|
|
|
// Append only: never renumber entries or change an applied migration to add an
|
|
// upgrade. These initial steps bridge every historical, unversioned database;
|
|
// their old sentinels are compatibility inputs, not the migration ledger.
|
|
export const migrations: readonly Migration[] = [
|
|
{
|
|
version: 1,
|
|
name: 'legacy controller schema and backfills',
|
|
mode: 'foreign-keys-off',
|
|
run: migrateLegacySchema
|
|
},
|
|
{
|
|
version: 2,
|
|
name: 'native instances and file plans',
|
|
mode: 'foreign-keys-off',
|
|
run: migrateNativeInstances
|
|
},
|
|
{ version: 3, name: 'per-game server key pools', run: migrateServerKeys },
|
|
{ version: 4, name: 'autoscaling', run: ensureAutoscalingSchema },
|
|
{ version: 5, name: 'rebalancing', run: ensureRebalancingSchema },
|
|
// Native file plans are stripped before artifact bodies are moved to blobs.
|
|
{ version: 6, name: 'shared file blobs', run: migrateFileBlobs },
|
|
{
|
|
version: 7,
|
|
name: 'query indexes and report revisions',
|
|
run: (handle) => {
|
|
installLifecycleIndexes(handle);
|
|
installPerformanceIndexes(handle);
|
|
installReportRevisions(handle);
|
|
}
|
|
},
|
|
{
|
|
version: 8,
|
|
name: 'retention clocks and indexes',
|
|
run: (handle) =>
|
|
retentionClocks(handle, {
|
|
deployments: ['started_at', 'finished_at'],
|
|
server_deployments: ['started_at', 'finished_at'],
|
|
maintenance_jobs: ['requested_at', 'finished_at'],
|
|
watchdog_incidents: ['first_seen_at', 'finished_at'],
|
|
leaderboard_matches: ['started_at', 'last_received_at', 'ended_at'],
|
|
betas: ['opened_at', 'closed_at'],
|
|
script_versions: ['uploaded_at'],
|
|
retention_controls: ['resolved_at']
|
|
})
|
|
},
|
|
{ version: 9, name: 'hosts and saved command files', run: migrateHostSchema },
|
|
{ version: 10, name: 'authentication', run: migrateAuthSchema },
|
|
{ version: 11, name: 'game-file libraries', run: migrateGameFileSchema },
|
|
{
|
|
version: 12,
|
|
name: 'incremental vacuum page map',
|
|
mode: 'autocommit',
|
|
run: enableIncrementalVacuum
|
|
},
|
|
{
|
|
version: 13,
|
|
name: 'metrics policy report revisions',
|
|
run: installMetricsPolicyRevisions
|
|
},
|
|
{
|
|
version: 14,
|
|
name: 'metrics match report revisions',
|
|
run: installMetricsMatchRevisions
|
|
},
|
|
{
|
|
version: 15,
|
|
name: 'metrics provisioning report revisions',
|
|
run: installMetricsProvisioningRevisions
|
|
},
|
|
{
|
|
version: 16,
|
|
name: 'metrics player history and report revisions',
|
|
run: installMetricsPlayerRevisions
|
|
},
|
|
{
|
|
version: 17,
|
|
name: 'super viewer authentication role',
|
|
mode: 'foreign-keys-off',
|
|
run: migrateSuperViewerRole
|
|
},
|
|
{
|
|
version: 18,
|
|
name: 'durable leaderboard report identity and sequences',
|
|
run: migrateLeaderboardReports
|
|
},
|
|
{
|
|
version: 19,
|
|
name: 'cumulative player score per match',
|
|
run: migratePlayerScoreTotal
|
|
},
|
|
{ version: 20, name: 'persistent player bank and transfer ledger', run: migrateBank },
|
|
{ version: 21, name: 'instance-owned bank credentials', run: migrateBankCredentials },
|
|
{ version: 22, name: 'remembered browser sessions', run: migrateRememberedSessions },
|
|
{ version: 23, name: 'host temperature history', run: migrateTemperatures }
|
|
];
|
|
|
|
export const databaseVersion = migrations.length;
|