mirror of
https://github.com/WorldEditAxe/eaglerproxy.git
synced 2024-12-03 05:54:12 -08:00
added smart compilation to decrease startup time
This commit is contained in:
parent
81f190ed87
commit
1f37152843
38
.config/build.sh
Normal file → Executable file
38
.config/build.sh
Normal file → Executable file
|
@ -1,11 +1,33 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -e
|
echo "installing dependencies..."
|
||||||
|
|
||||||
rm -rf .build
|
|
||||||
mkdir -p ./.build
|
|
||||||
|
|
||||||
cd ~/$REPL_SLUG/
|
|
||||||
npm install typescript
|
|
||||||
npm install
|
npm install
|
||||||
npx tsc
|
|
||||||
|
echo "compiling eaglerproxy, please wait... "
|
||||||
|
echo "this may take a while when you first compile the proxy, or when the proxy has to be recompiled (usually due to modification of anything in the src folder, including config.ts)"
|
||||||
|
echo "after the initial compile, startups will be a lot more faster and snappier"
|
||||||
|
|
||||||
|
set +e
|
||||||
|
|
||||||
|
cd ~/$REPL_SLUG/replit_runtime
|
||||||
|
node ./index.js
|
||||||
|
exit_code=$?
|
||||||
|
|
||||||
|
if [ $exit_code -eq 0 ]; then
|
||||||
|
set -e
|
||||||
|
echo "detected that recompilation is not required, skipping and directly launching..."
|
||||||
|
elif [ $exit_code -eq 2 ]; then
|
||||||
|
set -e
|
||||||
|
echo "recompiling proxy..."
|
||||||
|
rm -rf .build
|
||||||
|
mkdir -p ./.build
|
||||||
|
cd ~/$REPL_SLUG/
|
||||||
|
npm install typescript
|
||||||
|
npx tsc
|
||||||
|
echo "finished compiling, launching..."
|
||||||
|
else
|
||||||
|
echo "received non-zero exit code ($?), exiting!"
|
||||||
|
set -e
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
0
replit_launch.sh
Normal file → Executable file
0
replit_launch.sh
Normal file → Executable file
|
@ -1,5 +1,6 @@
|
||||||
const path = require("path")
|
const path = require("path")
|
||||||
|
const os = require("os")
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
sourceDir: path.resolve("~", process.env.REPL_SLUG)
|
sourceDir: path.resolve(os.homedir(), path.join(process.env.REPL_SLUG, "src"))
|
||||||
}
|
}
|
|
@ -39,9 +39,9 @@ class Logger {
|
||||||
async function recursiveFileSearch(dir) {
|
async function recursiveFileSearch(dir) {
|
||||||
const fileList = []
|
const fileList = []
|
||||||
for (const file of await fs.readdir(dir, { withFileTypes: true })) {
|
for (const file of await fs.readdir(dir, { withFileTypes: true })) {
|
||||||
let pathDir = path.resolve(dir, file)
|
let pathDir = path.resolve(dir, file.name)
|
||||||
if (file.isFile()) {
|
if (file.isFile()) {
|
||||||
fileList.push(file)
|
fileList.push(pathDir)
|
||||||
} else if (file.isDirectory()) {
|
} else if (file.isDirectory()) {
|
||||||
fileList.push(...(await recursiveFileSearch(pathDir)))
|
fileList.push(...(await recursiveFileSearch(pathDir)))
|
||||||
} else {
|
} else {
|
||||||
|
@ -51,7 +51,10 @@ async function recursiveFileSearch(dir) {
|
||||||
return fileList
|
return fileList
|
||||||
}
|
}
|
||||||
|
|
||||||
const logger = new Logger("Launcher", process.env.DEBUG == "true"),
|
const logger = new Logger({
|
||||||
|
name: "launcher",
|
||||||
|
logDebug: process.env.DEBUG == "true"
|
||||||
|
}),
|
||||||
LINE_SEPERATOR = "-----------------------------------"
|
LINE_SEPERATOR = "-----------------------------------"
|
||||||
|
|
||||||
if (!process.env.REPL_SLUG) {
|
if (!process.env.REPL_SLUG) {
|
||||||
|
@ -83,7 +86,14 @@ fs.readFile(path.join(__dirname, ".sourcehash"))
|
||||||
process.exit(0)
|
process.exit(0)
|
||||||
} else {
|
} else {
|
||||||
logger.info("Source has been changed, recompiling...")
|
logger.info("Source has been changed, recompiling...")
|
||||||
process.exit(2)
|
fs.writeFile(path.join(__dirname, ".sourcehash"), sourceHash)
|
||||||
|
.then(() => {
|
||||||
|
process.exit(2)
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
logger.error(`Could not write new hash to disk!\n${err.stack}`)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -95,8 +105,31 @@ fs.readFile(path.join(__dirname, ".sourcehash"))
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
if (err.code == "ENOENT") {
|
if (err.code == "ENOENT") {
|
||||||
logger.warn("Previous source hash not found! Assuming a clean install is being used.")
|
logger.warn("Previous source hash not found! Assuming a clean install is being used.")
|
||||||
|
logger.info("Calculating hash...")
|
||||||
|
recursiveFileSearch(sourceDir)
|
||||||
|
.then(files => {
|
||||||
|
Promise.all(files.map(f => fs.readFile(f)))
|
||||||
|
.then(data => {
|
||||||
|
const hash = crypto.createHash("sha256")
|
||||||
|
data.forEach(d => hash.update(d))
|
||||||
|
let sourceHash = hash.digest().toString()
|
||||||
|
fs.writeFile(path.join(__dirname, ".sourcehash"), sourceHash)
|
||||||
|
.then(() => {
|
||||||
|
logger.info("Saved hash to disk.")
|
||||||
|
process.exit(2)
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
logger.error(`Could not write new hash to disk!\n${err.stack}`)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
logger.error(`Could not calculate file hashes for files in directory ${sourceDir}!\n${err.stack}`)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
logger.error(`Could not read .sourcehash file in ${path.join(__dirname, ".sourcehash")} due to an unknown error! Try again with a clean repl?\n${err.stack}`)
|
logger.error(`Could not read .sourcehash file in ${path.join(__dirname, ".sourcehash")} due to an unknown error! Try again with a clean repl?\n${err.stack}`)
|
||||||
process.exit(2)
|
process.exit(1)
|
||||||
}
|
}
|
||||||
})
|
})
|
5
replit_runtime/package.json
Normal file
5
replit_runtime/package.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"name": "replit_runtime",
|
||||||
|
"description": "Runtime preparation utility for Repls. Determines whether or not a recompilation is necessary.",
|
||||||
|
"type": "commonjs"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user