fix(dev-infra): write to unique log file for `FATAL_ERROR`s in release tooling (#40524)

Write to the unique log file, to prevent being overwritten, for `FATAL_ERROR`
failures in the release tooling.  This will help to assist in determining where
something goes wrong in the process as well as being able to resume the action.

PR Close #40524
This commit is contained in:
Joey Perrott 2021-01-22 09:54:07 -08:00 committed by Jessica Janiuk
parent 2980d85b8c
commit 64628a4d7d
3 changed files with 16 additions and 6 deletions

View File

@ -387,7 +387,9 @@ function captureLogOutputForCommand(argv) {
LOGGED_TEXT += headerLine + "\nCommand: " + argv.$0 + " " + argv._.join(' ') + "\nRan at: " + now + "\n"; LOGGED_TEXT += headerLine + "\nCommand: " + argv.$0 + " " + argv._.join(' ') + "\nRan at: " + now + "\n";
// On process exit, write the logged output to the appropriate log files // On process exit, write the logged output to the appropriate log files
process.on('exit', function (code) { process.on('exit', function (code) {
LOGGED_TEXT += "Command ran in " + (new Date().getTime() - now.getTime()) + "ms"; LOGGED_TEXT += headerLine + "\n";
LOGGED_TEXT += "Command ran in " + (new Date().getTime() - now.getTime()) + "ms\n";
LOGGED_TEXT += "Exit Code: " + code + "\n";
/** Path to the log file location. */ /** Path to the log file location. */
var logFilePath = path.join(getRepoBaseDir(), '.ng-dev.log'); var logFilePath = path.join(getRepoBaseDir(), '.ng-dev.log');
// Strip ANSI escape codes from log outputs. // Strip ANSI escape codes from log outputs.
@ -396,7 +398,9 @@ function captureLogOutputForCommand(argv) {
// For failure codes greater than 1, the new logged lines should be written to a specific log // For failure codes greater than 1, the new logged lines should be written to a specific log
// file for the command run failure. // file for the command run failure.
if (code > 1) { if (code > 1) {
fs.writeFileSync(path.join(getRepoBaseDir(), ".ng-dev.err-" + now.getTime() + ".log"), LOGGED_TEXT); var logFileName = ".ng-dev.err-" + now.getTime() + ".log";
console.error("Exit code: " + code + ". Writing full log to " + logFileName);
fs.writeFileSync(path.join(getRepoBaseDir(), logFileName), LOGGED_TEXT);
} }
}); });
// Mark file logging as enabled to prevent the function from executing multiple times. // Mark file logging as enabled to prevent the function from executing multiple times.
@ -6489,10 +6493,11 @@ function handler$9(args) {
switch (result) { switch (result) {
case CompletionState.FATAL_ERROR: case CompletionState.FATAL_ERROR:
error(red(`Release action has been aborted due to fatal errors. See above.`)); error(red(`Release action has been aborted due to fatal errors. See above.`));
process.exitCode = 1; process.exitCode = 2;
break; break;
case CompletionState.MANUALLY_ABORTED: case CompletionState.MANUALLY_ABORTED:
info(yellow(`Release action has been manually aborted.`)); info(yellow(`Release action has been manually aborted.`));
process.exitCode = 1;
break; break;
case CompletionState.SUCCESS: case CompletionState.SUCCESS:
info(green(`Release action has completed successfully.`)); info(green(`Release action has completed successfully.`));

View File

@ -36,10 +36,11 @@ async function handler(args: Arguments<ReleasePublishOptions>) {
switch (result) { switch (result) {
case CompletionState.FATAL_ERROR: case CompletionState.FATAL_ERROR:
error(red(`Release action has been aborted due to fatal errors. See above.`)); error(red(`Release action has been aborted due to fatal errors. See above.`));
process.exitCode = 1; process.exitCode = 2;
break; break;
case CompletionState.MANUALLY_ABORTED: case CompletionState.MANUALLY_ABORTED:
info(yellow(`Release action has been manually aborted.`)); info(yellow(`Release action has been manually aborted.`));
process.exitCode = 1;
break; break;
case CompletionState.SUCCESS: case CompletionState.SUCCESS:
info(green(`Release action has completed successfully.`)); info(green(`Release action has completed successfully.`));

View File

@ -193,7 +193,9 @@ export function captureLogOutputForCommand(argv: Arguments) {
// On process exit, write the logged output to the appropriate log files // On process exit, write the logged output to the appropriate log files
process.on('exit', (code: number) => { process.on('exit', (code: number) => {
LOGGED_TEXT += `Command ran in ${new Date().getTime() - now.getTime()}ms`; LOGGED_TEXT += `${headerLine}\n`;
LOGGED_TEXT += `Command ran in ${new Date().getTime() - now.getTime()}ms\n`;
LOGGED_TEXT += `Exit Code: ${code}\n`;
/** Path to the log file location. */ /** Path to the log file location. */
const logFilePath = join(getRepoBaseDir(), '.ng-dev.log'); const logFilePath = join(getRepoBaseDir(), '.ng-dev.log');
@ -205,7 +207,9 @@ export function captureLogOutputForCommand(argv: Arguments) {
// For failure codes greater than 1, the new logged lines should be written to a specific log // For failure codes greater than 1, the new logged lines should be written to a specific log
// file for the command run failure. // file for the command run failure.
if (code > 1) { if (code > 1) {
writeFileSync(join(getRepoBaseDir(), `.ng-dev.err-${now.getTime()}.log`), LOGGED_TEXT); const logFileName = `.ng-dev.err-${now.getTime()}.log`;
console.error(`Exit code: ${code}. Writing full log to ${logFileName}`);
writeFileSync(join(getRepoBaseDir(), logFileName), LOGGED_TEXT);
} }
}); });