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.
79 lines
2.5 KiB
79 lines
2.5 KiB
2 years ago
|
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)
|
||
|
})
|