Reduce background model deployment overhead
This commit is contained in:
@@ -16,11 +16,14 @@ COPY . .
|
|||||||
# that directory in a BuildKit cache avoids downloading ~300 MB after every
|
# that directory in a BuildKit cache avoids downloading ~300 MB after every
|
||||||
# source-only redeploy, while Vite still copies the assets into dist/imgly.
|
# source-only redeploy, while Vite still copies the assets into dist/imgly.
|
||||||
RUN --mount=type=cache,id=plimi-imgly-assets,target=/app/public/imgly,sharing=locked \
|
RUN --mount=type=cache,id=plimi-imgly-assets,target=/app/public/imgly,sharing=locked \
|
||||||
pnpm build
|
pnpm build && mv /app/dist/imgly /app/imgly-dist
|
||||||
|
|
||||||
FROM nginx:1.27-alpine AS runtime
|
FROM nginx:1.27-alpine AS runtime
|
||||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
COPY docker/40-generate-runtime-config.sh /docker-entrypoint.d/40-generate-runtime-config.sh
|
COPY docker/40-generate-runtime-config.sh /docker-entrypoint.d/40-generate-runtime-config.sh
|
||||||
|
# Keep the large, versioned model files in a stable layer. App-only changes can
|
||||||
|
# then reuse this layer instead of exporting the full model bundle each time.
|
||||||
|
COPY --from=build /app/imgly-dist /usr/share/nginx/html/imgly
|
||||||
COPY --from=build /app/dist /usr/share/nginx/html
|
COPY --from=build /app/dist /usr/share/nginx/html
|
||||||
RUN chmod +x /docker-entrypoint.d/40-generate-runtime-config.sh
|
RUN chmod +x /docker-entrypoint.d/40-generate-runtime-config.sh
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"predev": "node scripts/fetch-imgly-assets.mjs",
|
"predev": "node scripts/fetch-imgly-assets.mjs",
|
||||||
"dev": "vite --host",
|
"dev": "vite --host",
|
||||||
"prebuild": "node scripts/fetch-imgly-assets.mjs",
|
"prebuild": "node scripts/fetch-imgly-assets.mjs",
|
||||||
"build": "tsc -b && vite build",
|
"build": "node scripts/build.mjs",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"test": "vitest",
|
"test": "vitest",
|
||||||
"test:e2e": "playwright test",
|
"test:e2e": "playwright test",
|
||||||
|
|||||||
32
scripts/build.mjs
Normal file
32
scripts/build.mjs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { spawn } from "node:child_process";
|
||||||
|
import path from "node:path";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
|
||||||
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||||
|
|
||||||
|
function run(script, args) {
|
||||||
|
const child = spawn(process.execPath, [path.join(root, script), ...args], {
|
||||||
|
cwd: root,
|
||||||
|
stdio: "inherit",
|
||||||
|
});
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
child.once("error", reject);
|
||||||
|
child.once("exit", (code, signal) => {
|
||||||
|
if (signal) {
|
||||||
|
reject(new Error(`${script} terminated by ${signal}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve(code ?? 1);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const [typecheckStatus, viteStatus] = await Promise.all([
|
||||||
|
run("node_modules/typescript/bin/tsc", ["-b"]),
|
||||||
|
run("node_modules/vite/bin/vite.js", ["build"]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (typecheckStatus !== 0 || viteStatus !== 0) {
|
||||||
|
process.exitCode = 1;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user