You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
vore-rpg/src/bin/migrate.ts

79 lines
2.5 KiB

import {config} from "dotenv"
import {Liquibase, LiquibaseLogLevels} from "liquibase"
import {resolve} from "path"
interface PostgresEnvVars {
host?: string
port?: string
db?: string
sslmode?: string
options?: string
user?: string
pass?: string
}
async function migrate() {
config()
const vars: PostgresEnvVars = {}
for (const variable of Object.keys(process.env)) {
const value = process.env[variable] || ""
if (variable.startsWith("PG")) {
switch (variable) {
case "PGHOST":
vars.host = value
break
case "PGPORT":
vars.port = value
break
case "PGDATABASE":
vars.db = value
break
case "PGUSER":
vars.user = value
break
case "PGPASSWORD":
vars.pass = value
break
case "PGOPTIONS":
vars.options = value
break
case "PGSSLMODE":
vars.sslmode = value
break
default:
console.log("Unknown PG* environment variable: " + variable)
}
}
}
const params = []
params.push(`ApplicationName=${encodeURIComponent("VoreRPG Migration")}`)
if (vars.options) {
params.push(`options=${encodeURIComponent(vars.options)}`)
}
if (vars.sslmode) {
params.push(`sslmode=${encodeURIComponent(vars.sslmode)}`)
}
const liquibase = new Liquibase({
changeLogFile: "liquibase-changelog.yml",
classpath: resolve("lib/postgresql-42.5.0.jar"),
liquibase: resolve("node_modules/liquibase/dist/liquibase/liquibase"),
liquibasePropertiesFile: resolve("liquibase.properties"),
username: vars.user || process.env.USER || process.env.USERNAME || "postgres",
password: vars.pass || "",
logLevel: LiquibaseLogLevels.Debug,
url: `jdbc:postgresql://`
+ `${vars.host ? encodeURIComponent(vars.host) : ""}${vars.port ? `:${encodeURIComponent(vars.port)}` : ""}`
+ `${vars.db ? `/${encodeURIComponent(vars.db)}` : ""}${params.length > 0 ? `?${params.join("&")}` : ""}`,
})
try {
await liquibase.update({})
} catch (err) {
console.log("Liquibase failed")
console.log(err)
}
}
migrate().catch((err) => {
console.log("Main thread failed", err)
})