mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 18:44:16 +00:00
120 lines
2.5 KiB
JavaScript
120 lines
2.5 KiB
JavaScript
import DbManager from "@shared-classes/DbManager"
|
|
import { Config } from "@db_models"
|
|
|
|
import fs from "node:fs/promises"
|
|
import path from "node:path"
|
|
|
|
const forceFlag = process.argv.includes("--force")
|
|
|
|
const tasksPath = path.resolve(__dirname, "./tasks")
|
|
|
|
async function main() {
|
|
if (
|
|
process.env.INFISICAL_CLIENT_ID &&
|
|
process.env.INFISICAL_CLIENT_SECRET
|
|
) {
|
|
console.log(
|
|
`[BOOT] INFISICAL Credentials found, injecting env variables from INFISICAL...`,
|
|
)
|
|
await global.injectEnvFromInfisical()
|
|
}
|
|
|
|
// create the context for tasks
|
|
global.db = new DbManager()
|
|
|
|
await global.db.initialize()
|
|
|
|
let serverConfig = await Config.findOne({ key: "server" }).catch(() => {
|
|
return false
|
|
})
|
|
|
|
if (serverConfig && serverConfig.value.setup === true && !forceFlag) {
|
|
console.log(
|
|
`Server is already setup (last run at ${serverConfig.value.updated_at}), skipping setup...\nUse --force to force setup.`,
|
|
)
|
|
return process.exit(0)
|
|
}
|
|
|
|
let tasks = await fs.readdir(tasksPath)
|
|
|
|
// filter only files ends with .js
|
|
tasks = tasks.filter((task) => task.endsWith(".js"))
|
|
|
|
// sort by first numbers in file
|
|
tasks = tasks.sort((a, b) => {
|
|
const aNum = parseInt(a.split(".")[0])
|
|
const bNum = parseInt(b.split(".")[0])
|
|
|
|
return aNum - bNum
|
|
})
|
|
|
|
console.log(`Total (${tasks.length}) tasks...`)
|
|
|
|
for await (const task of tasks) {
|
|
const taskIndex = tasks.indexOf(task) + 1
|
|
|
|
let taskObj = await import(path.resolve(tasksPath, task))
|
|
|
|
taskObj = taskObj.default ?? taskObj
|
|
|
|
if (typeof taskObj.fn !== "function") {
|
|
console.log(`[ERROR] [${task}] has not a function, skipping...`)
|
|
continue
|
|
}
|
|
|
|
try {
|
|
console.log(
|
|
`[INFO] Executing [${taskIndex}/${tasks.length}](${task})`,
|
|
)
|
|
|
|
if (taskObj.description) {
|
|
console.log(`[INFO] ${taskObj.description}`)
|
|
}
|
|
|
|
await taskObj.fn()
|
|
} catch (error) {
|
|
console.log(`[ERROR] ${task} failed to execute`)
|
|
console.log(error)
|
|
|
|
if (taskObj.crashOnError === true) {
|
|
console.log(`[ERROR] ${task} crashed, exiting...`)
|
|
process.exit(1)
|
|
}
|
|
|
|
continue
|
|
}
|
|
|
|
console.log(`[SUCCESS] ${task} executed successfully`)
|
|
}
|
|
|
|
console.log("All tasks executed successfully!")
|
|
|
|
if (serverConfig) {
|
|
console.log("Updating server configuration document...")
|
|
|
|
await Config.findOneAndUpdate(
|
|
{ _id: serverConfig._id.toString() },
|
|
{
|
|
key: "server",
|
|
value: {
|
|
setup: true,
|
|
updated_at: new Date(),
|
|
},
|
|
},
|
|
)
|
|
} else {
|
|
console.log("Creating server configuration document...")
|
|
|
|
await Config.create({
|
|
key: "server",
|
|
value: {
|
|
setup: false,
|
|
},
|
|
})
|
|
}
|
|
|
|
process.exit(0)
|
|
}
|
|
|
|
main()
|