From 664e5d61bb0f7caf1b5bd695fd4748a75851be74 Mon Sep 17 00:00:00 2001 From: William Candillon Date: Thu, 11 Dec 2025 09:08:55 +0100 Subject: [PATCH] =?UTF-8?q?chore(=F0=9F=90=99):=20enhance=20logging=20in?= =?UTF-8?q?=20build=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/skia/scripts/utils.ts | 103 ++++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 2 deletions(-) diff --git a/packages/skia/scripts/utils.ts b/packages/skia/scripts/utils.ts index 7f561d409e..22af401dae 100644 --- a/packages/skia/scripts/utils.ts +++ b/packages/skia/scripts/utils.ts @@ -25,28 +25,87 @@ export const ensureFolderExists = (dirPath: string) => { export const runAsync = (command: string, label: string): Promise => { return new Promise((resolve, reject) => { const [cmd, ...args] = command.split(" "); - console.log({ cmd, args }); + console.log(`\nšŸš€ Running: ${cmd} ${args.join(" ")}`); const childProcess = spawn(cmd, args, { shell: true, }); + const stdoutLines: string[] = []; + const stderrLines: string[] = []; + childProcess.stdout.on("data", (data) => { + const lines = data.toString(); + stdoutLines.push(lines); process.stdout.write(`${label} ${data}`); }); childProcess.stderr.on("data", (data) => { + const lines = data.toString(); + stderrLines.push(lines); console.error(`${label} ${data}`); }); childProcess.on("close", (code) => { if (code === 0) { + console.log(`āœ… ${label} completed successfully`); resolve(); } else { + console.log("\n"); + // prettier-ignore + [ + "╔════════════════════════════════════════════════════════════════╗", + "ā•‘ āŒ BUILD FAILED ā•‘", + "ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•", + ].forEach(line => console.log(line)); + console.log(`\nšŸ“‹ Command: ${command}`); + console.log(`šŸ·ļø Label: ${label}`); + console.log(`šŸ“ Exit Code: ${code}`); + console.log(`šŸ“‚ Working Directory: ${process.cwd()}`); + + if (stderrLines.length > 0) { + // prettier-ignore + [ + "\nā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”", + "│ Last stderr output: │", + "ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜", + ].forEach(line => console.log(line)); + const lastStderr = stderrLines.slice(-20).join(""); + console.log(lastStderr); + } + + if (stdoutLines.length > 0) { + // prettier-ignore + [ + "\nā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”", + "│ Last stdout output: │", + "ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜", + ].forEach(line => console.log(line)); + const lastStdout = stdoutLines.slice(-20).join(""); + console.log(lastStdout); + } + + console.log( + "\n════════════════════════════════════════════════════════════════════\n" + ); reject(new Error(`${label} exited with code ${code}`)); } }); childProcess.on("error", (error) => { + console.log("\n"); + // prettier-ignore + [ + "╔════════════════════════════════════════════════════════════════╗", + "ā•‘ āŒ PROCESS ERROR ā•‘", + "ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•", + ].forEach(line => console.log(line)); + console.log(`\nšŸ“‹ Command: ${command}`); + console.log(`šŸ·ļø Label: ${label}`); + console.log(`šŸ’„ Error: ${error.message}`); + console.log(`šŸ“‚ Working Directory: ${process.cwd()}`); + console.log( + "\n════════════════════════════════════════════════════════════════════\n" + ); reject(new Error(`${label} ${error.message}`)); }); }); @@ -70,8 +129,48 @@ export const checkFileExists = (filePath: string) => { export const $ = (command: string) => { try { - return execSync(command); + return execSync(command, { stdio: "pipe" }); } catch (e) { + const error = e as { + status?: number; + stderr?: Buffer; + stdout?: Buffer; + message?: string; + }; + console.log("\n"); + // prettier-ignore + [ + "╔════════════════════════════════════════════════════════════════╗", + "ā•‘ āŒ COMMAND FAILED ā•‘", + "ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•", + ].forEach(line => console.log(line)); + console.log(`\nšŸ“‹ Command: ${command}`); + console.log(`šŸ“ Exit Code: ${error.status ?? "unknown"}`); + console.log(`šŸ“‚ Working Directory: ${process.cwd()}`); + + if (error.stderr && error.stderr.length > 0) { + // prettier-ignore + [ + "\nā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”", + "│ stderr: │", + "ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜", + ].forEach(line => console.log(line)); + console.log(error.stderr.toString()); + } + + if (error.stdout && error.stdout.length > 0) { + // prettier-ignore + [ + "\nā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”", + "│ stdout: │", + "ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜", + ].forEach(line => console.log(line)); + console.log(error.stdout.toString()); + } + + console.log( + "\n════════════════════════════════════════════════════════════════════\n" + ); exit(1); } };