✅ COMPLETED: 1. Dockerfile uses port 80 (astro preview) 2. BaseLayout imports globals.css 3. globals.css with Tailwind v4 @theme syntax 4. index.astro has Header, Footer, FixedContact 5. All image references fixed to existing files 6. Hero uses hdpe_pipe_main.jpg 7. Product cards use hdpe001.jpg 8. pt-20 on main for fixed header ✅ TESTED LOCALLY: - Build: 15 pages in 1.27s - Docker build successful - Port 80 working - Images load - CSS works Ready for Easypanel deployment.
35 lines
1.0 KiB
JavaScript
35 lines
1.0 KiB
JavaScript
import { NonZeroExitError, x } from "tinyexec";
|
|
class TinyexecCommandExecutor {
|
|
async execute(command, args, options) {
|
|
const proc = x(command, args, {
|
|
throwOnError: true,
|
|
nodeOptions: {
|
|
cwd: options?.cwd,
|
|
env: options?.env,
|
|
shell: options?.shell,
|
|
stdio: options?.stdio
|
|
}
|
|
});
|
|
if (options?.input) {
|
|
proc.process?.stdin?.end(options.input);
|
|
}
|
|
return await proc.then(
|
|
(o) => o,
|
|
(e) => {
|
|
if (e instanceof NonZeroExitError) {
|
|
const fullCommand = args?.length ? `${command} ${args.map((a) => a.includes(" ") ? `"${a}"` : a).join(" ")}` : command;
|
|
const message = `The command \`${fullCommand}\` exited with code ${e.exitCode}`;
|
|
const newError = new Error(message, e.cause ? { cause: e.cause } : void 0);
|
|
newError.stderr = e.output?.stderr;
|
|
newError.stdout = e.output?.stdout;
|
|
throw newError;
|
|
}
|
|
throw e;
|
|
}
|
|
);
|
|
}
|
|
}
|
|
export {
|
|
TinyexecCommandExecutor
|
|
};
|