UNPKG

@artilleryio/platform-fargate

Version:
1 lines 2.99 kB
const getDataMigrations=require("./data-api/get-data-migrations"),pkg=require("../package.json"),MIGRATIONS=[{version:1,fn:async dataMigrations=>{await dataMigrations.updateDataMigrationsRecord({version:1,report:JSON.stringify({status:"done"})})}}],runMigrations=async()=>{const dataMigrations=await getDataMigrations(),migrationsRecord=await dataMigrations.getDataMigrationsStatus();var latestMigrationVersion=MIGRATIONS[MIGRATIONS.length-1].version;if(migrationsRecord.version!==latestMigrationVersion)if(migrationsRecord.migrating)console.log("Data migrations record found. Another data migration process may be already running.");else{let restoringFailedMigration=!1;const handleMigrationFailure=async({targetTableName,errorMessage})=>{var migrationsStatus;restoringFailedMigration||(restoringFailedMigration=!0,console.log("Restoring latest backup to "+targetTableName),global.artillery&&global.artillery.telemetry&&(migrationsStatus=await dataMigrations.getDataMigrationsStatus(),global.artillery.telemetry.capture("datamigrations:error",{version:global.artillery.version,proVersion:pkg.version,region:dataMigrations.region,awsAccountId:dataMigrations.accountId,migrationVersion:migrationsStatus.version,errorMessage:errorMessage})),await Promise.all([dataMigrations.deleteTable(),dataMigrations.restoreTableBackup(targetTableName),dataMigrations.setTestRunsTableName(targetTableName)]))};new Date;const targetTableName=dataMigrations.tableName.split("-").slice(0,4).join("-")+"-"+Math.random().toString(36).slice(5);console.log("Starting data migrations");try{["SIGTERM","SIGINT"].forEach(sigName=>{process.once(sigName,async()=>{await handleMigrationFailure({targetTableName:targetTableName,errorMessage:sigName})})});var backupDetails=await dataMigrations.backupTable(),lockId=(console.log(`Table ${dataMigrations.tableName} backup arn: `+backupDetails.arn),await dataMigrations.lockTestRunsTable());console.log(`Table ${dataMigrations.tableName} locked: `+lockId);var migrationRecord,migrationReport,currentVersion=migrationsRecord.version||0;for(const migration of MIGRATIONS)migration.version<=currentVersion||restoringFailedMigration?console.log(`Skipping migration ${migration.version}. Current version: `+currentVersion):(console.log("Running migration "+migration.version),await migration.fn(dataMigrations),migrationRecord=await dataMigrations.updateDataMigrationsRecord({version:migration.version}),[migrationReport]=Object.keys(migrationRecord).filter(prop=>prop==="migrationReport"+migration.version),migrationReport?console.log(`Migration ${migration.version} completed: `+migrationRecord[migrationReport]):console.log(`Migration ${migration.version} completed.`));await 0,await dataMigrations.unlockTestRunsTable()}catch(err){return(console.error("Data migration failed:",err),"MigrationInProgress"===err.name)?void 0:void await handleMigrationFailure({targetTableName:targetTableName,errorMessage:err.message})}handleMigrationFailure}};module.exports=runMigrations;