62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import { migrations, locks } from "@budibase/backend-core"
|
|
import {
|
|
Migration,
|
|
MigrationOptions,
|
|
MigrationName,
|
|
LockType,
|
|
LockName,
|
|
} from "@budibase/types"
|
|
import env from "../environment"
|
|
|
|
// migration functions
|
|
import * as syncUserInfo from "./functions/globalInfoSyncUsers"
|
|
|
|
/**
|
|
* Populate the migration function and additional configuration from
|
|
* the static migration definitions.
|
|
*/
|
|
export const buildMigrations = () => {
|
|
const definitions = migrations.DEFINITIONS
|
|
const workerMigrations: Migration[] = []
|
|
|
|
for (const definition of definitions) {
|
|
switch (definition.name) {
|
|
case MigrationName.GLOBAL_INFO_SYNC_USERS: {
|
|
// only needed in cloud
|
|
if (!env.SELF_HOSTED) {
|
|
workerMigrations.push({
|
|
...definition,
|
|
fn: syncUserInfo.run,
|
|
})
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return workerMigrations
|
|
}
|
|
|
|
export const MIGRATIONS = buildMigrations()
|
|
|
|
export const migrate = async (options?: MigrationOptions) => {
|
|
if (env.SELF_HOSTED) {
|
|
await migrateWithLock(options)
|
|
} else {
|
|
await migrations.runMigrations(MIGRATIONS, options)
|
|
}
|
|
}
|
|
|
|
const migrateWithLock = async (options?: MigrationOptions) => {
|
|
await locks.doWithLock(
|
|
{
|
|
type: LockType.TRY_ONCE,
|
|
name: LockName.MIGRATIONS,
|
|
ttl: 1000 * 60 * 15, // auto expire the migration lock after 15 minutes
|
|
},
|
|
async () => {
|
|
await migrations.runMigrations(MIGRATIONS, options)
|
|
}
|
|
)
|
|
}
|