|
| 1 | +import { createLogger } from '@sim/logger' |
| 2 | +import postgres from 'postgres' |
| 3 | +import { |
| 4 | + backfillWorkspaceFileSizeBytes, |
| 5 | + createPostgresWorkspaceFileSizeBytesBackfillStore, |
| 6 | +} from '../script-migrations/0008_backfill_workspace_file_size_bytes' |
| 7 | + |
| 8 | +const logger = createLogger('DevWorkspaceFileSizeCutover') |
| 9 | +const MIGRATION_NAME = '0008_backfill_workspace_file_size_bytes' |
| 10 | +const MIGRATION_SQL_URL = new URL( |
| 11 | + '../migrations/0308_workspace_file_size_cutover.sql', |
| 12 | + import.meta.url |
| 13 | +) |
| 14 | +const url = process.env.MIGRATION_DATABASE_URL || process.env.DATABASE_URL |
| 15 | + |
| 16 | +if (!url) { |
| 17 | + throw new Error('Missing MIGRATION_DATABASE_URL or DATABASE_URL') |
| 18 | +} |
| 19 | + |
| 20 | +const sql = postgres(url, { |
| 21 | + max: 1, |
| 22 | + connect_timeout: 10, |
| 23 | + max_lifetime: null, |
| 24 | + connection: { application_name: 'sim-dev-workspace-file-size-cutover' }, |
| 25 | +}) |
| 26 | + |
| 27 | +try { |
| 28 | + const migrationSql = await Bun.file(MIGRATION_SQL_URL).text() |
| 29 | + await sql.unsafe(migrationSql) |
| 30 | + const backfilled = await backfillWorkspaceFileSizeBytes( |
| 31 | + createPostgresWorkspaceFileSizeBytesBackfillStore(sql) |
| 32 | + ) |
| 33 | + await sql` |
| 34 | + CREATE TABLE IF NOT EXISTS script_migrations ( |
| 35 | + name text PRIMARY KEY, |
| 36 | + applied_at timestamptz NOT NULL DEFAULT now() |
| 37 | + ) |
| 38 | + ` |
| 39 | + await sql` |
| 40 | + INSERT INTO script_migrations (name) VALUES (${MIGRATION_NAME}) |
| 41 | + ON CONFLICT (name) DO NOTHING |
| 42 | + ` |
| 43 | + logger.info('Dev workspace file size cutover completed', { backfilled }) |
| 44 | +} finally { |
| 45 | + await sql.end() |
| 46 | +} |
0 commit comments