From d86f244dc67f7cfb288c5be8292f6a71b71a242d Mon Sep 17 00:00:00 2001 From: David Michon Date: Wed, 30 Jul 2025 23:21:01 +0000 Subject: [PATCH 1/3] [rush] Add status emojis --- .../rush/status-emojis_2025-07-30-23-06.json | 10 + .../cli/scriptActions/PhasedScriptAction.ts | 14 +- .../operations/OperationExecutionManager.ts | 89 +++-- .../operations/OperationExecutionRecord.ts | 7 +- .../OperationResultSummarizerPlugin.ts | 8 +- .../src/logic/operations/OperationStatus.ts | 44 +++ .../OperationExecutionManager.test.ts.snap | 344 ++++++++++++++++-- 7 files changed, 448 insertions(+), 68 deletions(-) create mode 100644 common/changes/@microsoft/rush/status-emojis_2025-07-30-23-06.json diff --git a/common/changes/@microsoft/rush/status-emojis_2025-07-30-23-06.json b/common/changes/@microsoft/rush/status-emojis_2025-07-30-23-06.json new file mode 100644 index 00000000000..cb02e97edc9 --- /dev/null +++ b/common/changes/@microsoft/rush/status-emojis_2025-07-30-23-06.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Add emojis for operation statuses. Replace the \"x of y\" operations indicator with a breakdown by status using the emojis. Add a legend at the start of the build log.", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts index 3846d9e912b..18a5dc12ced 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -37,7 +37,7 @@ import { PhasedOperationPlugin } from '../../logic/operations/PhasedOperationPlu import { ShellOperationRunnerPlugin } from '../../logic/operations/ShellOperationRunnerPlugin'; import { Event } from '../../api/EventHooks'; import { ProjectChangeAnalyzer } from '../../logic/ProjectChangeAnalyzer'; -import { OperationStatus } from '../../logic/operations/OperationStatus'; +import { OperationStatus, STATUS_EMOJIS } from '../../logic/operations/OperationStatus'; import type { IExecutionResult, IOperationExecutionResult @@ -955,7 +955,7 @@ export class PhasedScriptAction extends BaseScriptAction { stopwatch.stop(); - const message: string = `rush ${this.actionName} (${stopwatch.toString()})`; + const message: string = `${STATUS_EMOJIS[result.status]} rush ${this.actionName} (${stopwatch.toString()})`; if (result.status === OperationStatus.Success) { terminal.writeLine(Colorize.green(message)); } else { @@ -966,7 +966,9 @@ export class PhasedScriptAction extends BaseScriptAction { stopwatch.stop(); if (error instanceof AlreadyReportedError) { - terminal.writeLine(`rush ${this.actionName} (${stopwatch.toString()})`); + terminal.writeLine( + `${STATUS_EMOJIS[OperationStatus.Failure]} rush ${this.actionName} (${stopwatch.toString()})` + ); } else { if (error && (error as Error).message) { if (this.parser.isDebug) { @@ -976,7 +978,11 @@ export class PhasedScriptAction extends BaseScriptAction { } } - terminal.writeErrorLine(Colorize.red(`rush ${this.actionName} - Errors! (${stopwatch.toString()})`)); + terminal.writeErrorLine( + Colorize.red( + `${STATUS_EMOJIS[OperationStatus.Failure]} rush ${this.actionName} - Errors! (${stopwatch.toString()})` + ) + ); } } diff --git a/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts b/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts index 01cc0845889..13da4c80163 100644 --- a/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts +++ b/libraries/rush-lib/src/logic/operations/OperationExecutionManager.ts @@ -14,7 +14,7 @@ import { NewlineKind, Async, InternalError, AlreadyReportedError } from '@rushst import { AsyncOperationQueue, type IOperationSortFunction } from './AsyncOperationQueue'; import type { Operation } from './Operation'; -import { OperationStatus } from './OperationStatus'; +import { OperationStatus, STATUS_BY_EMOJI, STATUS_EMOJIS } from './OperationStatus'; import { type IOperationExecutionRecordContext, OperationExecutionRecord } from './OperationExecutionRecord'; import type { IExecutionResult } from './IOperationExecutionResult'; import type { IEnvironment } from '../../utilities/Utilities'; @@ -81,16 +81,19 @@ export class OperationExecutionManager { operation: OperationExecutionRecord ) => Promise; private readonly _afterExecuteOperation?: (operation: OperationExecutionRecord) => Promise; - private readonly _onOperationStatusChanged?: (record: OperationExecutionRecord) => void; + private readonly _onOperationStatusChanged?: ( + record: OperationExecutionRecord, + oldStatus: OperationStatus + ) => void; private readonly _beforeExecuteOperations?: ( records: Map ) => Promise; private readonly _createEnvironmentForOperation?: (operation: OperationExecutionRecord) => IEnvironment; // Variables for current status + private readonly _operationCountByStatusEmoji: Record; private _hasAnyFailures: boolean; private _hasAnyNonAllowedWarnings: boolean; - private _completedOperations: number; private _executionQueue: AsyncOperationQueue; public constructor(operations: Set, options: IOperationExecutionManagerOptions) { @@ -105,7 +108,6 @@ export class OperationExecutionManager { beforeExecuteOperationsAsync: beforeExecuteOperations, createEnvironmentForOperation } = options; - this._completedOperations = 0; this._quietMode = quietMode; this._hasAnyFailures = false; this._hasAnyNonAllowedWarnings = false; @@ -115,10 +117,23 @@ export class OperationExecutionManager { this._afterExecuteOperation = afterExecuteOperation; this._beforeExecuteOperations = beforeExecuteOperations; this._createEnvironmentForOperation = createEnvironmentForOperation; - this._onOperationStatusChanged = (record: OperationExecutionRecord) => { + + const operationCountByStatusEmoji: Record = {}; + for (const statusEmoji of Object.values(STATUS_EMOJIS)) { + operationCountByStatusEmoji[statusEmoji] = 0; + } + this._operationCountByStatusEmoji = operationCountByStatusEmoji; + + this._onOperationStatusChanged = (record: OperationExecutionRecord, oldStatus: OperationStatus) => { if (record.status === OperationStatus.Ready) { this._executionQueue.assignOperations(); } + + if (!record.silent) { + operationCountByStatusEmoji[STATUS_EMOJIS[oldStatus]]--; + operationCountByStatusEmoji[STATUS_EMOJIS[record.status]]++; + } + onOperationStatusChanged?.(record); }; @@ -192,24 +207,41 @@ export class OperationExecutionManager { prioritySort ); this._executionQueue = executionQueue; + for (const operation of executionRecords.values()) { + if (operation.silent) { + continue; + } + // Initialize the status counts + operationCountByStatusEmoji[STATUS_EMOJIS[operation.status]]++; + } + } + + private _getStatusBar(): string { + const statusBarParts: string[] = []; + for (const emoji of STATUS_BY_EMOJI.keys()) { + const count: number = this._operationCountByStatusEmoji[emoji]; + if (count > 0) { + statusBarParts.push(`${emoji} ${count}`); + } + } + return statusBarParts.join(' '); } private _streamCollator_onWriterActive = (writer: CollatedWriter | undefined): void => { if (writer) { - this._completedOperations++; - // Format a header like this // - // ==[ @rushstack/the-long-thing ]=================[ 1 of 1000 ]== + // ==[ @rushstack/the-long-thing ]=================[❌3 ✅20 📦245]== // leftPart: "==[ @rushstack/the-long-thing " const leftPart: string = Colorize.gray('==[') + ' ' + Colorize.cyan(writer.taskName) + ' '; const leftPartLength: number = 4 + writer.taskName.length + 1; - // rightPart: " 1 of 1000 ]==" - const completedOfTotal: string = `${this._completedOperations} of ${this._totalOperations}`; - const rightPart: string = ' ' + Colorize.white(completedOfTotal) + ' ' + Colorize.gray(']=='); - const rightPartLength: number = 1 + completedOfTotal.length + 4; + const statusBar: string = this._getStatusBar(); + + // rightPart: "❌3 ✅20 📦245]==" + const rightPart: string = Colorize.white(statusBar) + Colorize.gray(']=='); + const rightPartLength: number = statusBar.length + 3; // middlePart: "]=================[" const twoBracketsLength: number = 2; @@ -233,7 +265,6 @@ export class OperationExecutionManager { * operations are completed successfully, or rejects when any operation fails. */ public async executeAsync(): Promise { - this._completedOperations = 0; const totalOperations: number = this._totalOperations; if (!this._quietMode) { @@ -254,6 +285,11 @@ export class OperationExecutionManager { this._terminal.writeStdoutLine(`Executing a maximum of ${this._parallelism} simultaneous processes...`); + this._terminal.writeStdoutLine(`Legend:`); + for (const [emoji, statuses] of STATUS_BY_EMOJI) { + this._terminal.writeStdoutLine(`${emoji} ${statuses.join(' / ')}`); + } + const maxParallelism: number = Math.min(totalOperations, this._parallelism); await this._beforeExecuteOperations?.(this._executionRecords); @@ -352,7 +388,9 @@ export class OperationExecutionManager { // This creates the writer, so don't do this globally const { terminal } = record.collatedWriter; - terminal.writeStderrLine(Colorize.red(`"${name}" failed to build.`)); + terminal.writeStderrLine( + `${STATUS_EMOJIS[OperationStatus.Failure]} ${Colorize.red(`"${name}" failed to build.`)}` + ); const blockedQueue: Set = new Set(record.consumers); for (const blockedRecord of blockedQueue) { @@ -361,16 +399,13 @@ export class OperationExecutionManager { // {blockedRecord.runner} with a no-op that sets status to Blocked and logs the blocking // operations. However, the existing behavior is a bit simpler, so keeping that for now. if (!blockedRecord.silent) { - terminal.writeStdoutLine(`"${blockedRecord.name}" is blocked by "${name}".`); + terminal.writeStdoutLine( + `${STATUS_EMOJIS[OperationStatus.Blocked]} "${blockedRecord.name}" is blocked by "${name}".` + ); } blockedRecord.status = OperationStatus.Blocked; this._executionQueue.complete(blockedRecord); - if (!blockedRecord.silent) { - // Only increment the count if the operation is not silent to avoid confusing the user. - // The displayed total is the count of non-silent operations. - this._completedOperations++; - } for (const dependent of blockedRecord.consumers) { blockedQueue.add(dependent); @@ -392,7 +427,7 @@ export class OperationExecutionManager { case OperationStatus.FromCache: { if (!silent) { record.collatedWriter.terminal.writeStdoutLine( - Colorize.green(`"${name}" was restored from the build cache.`) + `${STATUS_EMOJIS[OperationStatus.FromCache]} ${Colorize.green(`"${name}" was restored from the build cache.`)}` ); } break; @@ -403,7 +438,9 @@ export class OperationExecutionManager { */ case OperationStatus.Skipped: { if (!silent) { - record.collatedWriter.terminal.writeStdoutLine(Colorize.green(`"${name}" was skipped.`)); + record.collatedWriter.terminal.writeStdoutLine( + `${STATUS_EMOJIS[OperationStatus.Skipped]} ${Colorize.green(`"${name}" was skipped.`)}` + ); } break; } @@ -413,7 +450,9 @@ export class OperationExecutionManager { */ case OperationStatus.NoOp: { if (!silent) { - record.collatedWriter.terminal.writeStdoutLine(Colorize.gray(`"${name}" did not define any work.`)); + record.collatedWriter.terminal.writeStdoutLine( + `${STATUS_EMOJIS[OperationStatus.NoOp]} ${Colorize.gray(`"${name}" did not define any work.`)}` + ); } break; } @@ -421,7 +460,7 @@ export class OperationExecutionManager { case OperationStatus.Success: { if (!silent) { record.collatedWriter.terminal.writeStdoutLine( - Colorize.green(`"${name}" completed successfully in ${stopwatch.toString()}.`) + `${STATUS_EMOJIS[OperationStatus.Success]} ${Colorize.green(`"${name}" completed successfully in ${stopwatch.toString()}.`)}` ); } break; @@ -430,7 +469,7 @@ export class OperationExecutionManager { case OperationStatus.SuccessWithWarning: { if (!silent) { record.collatedWriter.terminal.writeStderrLine( - Colorize.yellow(`"${name}" completed with warnings in ${stopwatch.toString()}.`) + `${STATUS_EMOJIS[OperationStatus.SuccessWithWarning]} ${Colorize.yellow(`"${name}" completed with warnings in ${stopwatch.toString()}.`)}` ); } this._hasAnyNonAllowedWarnings = this._hasAnyNonAllowedWarnings || !runner.warningsAreAllowed; diff --git a/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts b/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts index b10da76af58..05181c0297d 100644 --- a/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts +++ b/libraries/rush-lib/src/logic/operations/OperationExecutionRecord.ts @@ -39,7 +39,7 @@ import { */ export interface IOperationExecutionRecordContext { streamCollator: StreamCollator; - onOperationStatusChanged?: (record: OperationExecutionRecord) => void; + onOperationStatusChanged?: (record: OperationExecutionRecord, oldStatus: OperationStatus) => void; createEnvironment?: (record: OperationExecutionRecord) => IEnvironment; inputsSnapshot: IInputsSnapshot | undefined; @@ -207,11 +207,12 @@ export class OperationExecutionRecord implements IOperationRunnerContext, IOpera return this._status; } public set status(newStatus: OperationStatus) { - if (newStatus === this._status) { + const oldStatus: OperationStatus = this._status; + if (newStatus === oldStatus) { return; } this._status = newStatus; - this._context.onOperationStatusChanged?.(this); + this._context.onOperationStatusChanged?.(this, oldStatus); } public get silent(): boolean { diff --git a/libraries/rush-lib/src/logic/operations/OperationResultSummarizerPlugin.ts b/libraries/rush-lib/src/logic/operations/OperationResultSummarizerPlugin.ts index 296b15b09d5..5997d59ca86 100644 --- a/libraries/rush-lib/src/logic/operations/OperationResultSummarizerPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/OperationResultSummarizerPlugin.ts @@ -11,7 +11,7 @@ import type { } from '../../pluginFramework/PhasedCommandHooks'; import type { IExecutionResult, IOperationExecutionResult } from './IOperationExecutionResult'; import type { Operation } from './Operation'; -import { OperationStatus } from './OperationStatus'; +import { OperationStatus, STATUS_EMOJIS } from './OperationStatus'; import type { OperationExecutionRecord } from './OperationExecutionRecord'; import type { IStopwatchResult } from '../../utilities/Stopwatch'; @@ -257,7 +257,7 @@ function writeDetailedSummary( ); terminal.writeLine( - `${Colorize.gray('--[')} ${headingColor(subheadingText)} ${Colorize.gray( + `${Colorize.gray('--[')}${STATUS_EMOJIS[operationResult.status]} ${headingColor(subheadingText)} ${Colorize.gray( `]${'-'.repeat(middlePartLengthMinusTwoBrackets)}[` )} ${Colorize.white(time)} ${Colorize.gray(']--')}\n` ); @@ -289,14 +289,14 @@ function writeSummaryHeader( const headingText: string = `${status}: ${projectsText}`; // leftPart: "==[ FAILED: 2 operations " - const leftPartLength: number = 3 + 1 + headingText.length + 1; + const leftPartLength: number = 3 + 2 + headingText.length + 1; const rightPartLengthMinusBracket: number = Math.max(ASCII_HEADER_WIDTH - (leftPartLength + 1), 0); // rightPart: "]======================" terminal.writeLine( - `${Colorize.gray('==[')} ${headingColor(headingText)} ${Colorize.gray( + `${Colorize.gray('==[')}${STATUS_EMOJIS[status]} ${headingColor(headingText)} ${Colorize.gray( `]${'='.repeat(rightPartLengthMinusBracket)}` )}\n` ); diff --git a/libraries/rush-lib/src/logic/operations/OperationStatus.ts b/libraries/rush-lib/src/logic/operations/OperationStatus.ts index 4005de5227c..d103429dcf7 100644 --- a/libraries/rush-lib/src/logic/operations/OperationStatus.ts +++ b/libraries/rush-lib/src/logic/operations/OperationStatus.ts @@ -52,6 +52,50 @@ export enum OperationStatus { NoOp = 'NO OP' } +/** + * Mapping from {@link OperationStatus} to an emoji that can be used in the terminal. + * @alpha + */ +export const STATUS_EMOJIS: Record = { + // Most important statuses to report + [OperationStatus.Failure]: '❌', + [OperationStatus.SuccessWithWarning]: '⚠️ ', + + // Use an emoji that indicates that the operation is currently executing + [OperationStatus.Executing]: '🔄', + + // Use an emoji that indicates that the operations are yet to execute + [OperationStatus.Waiting]: '⏳', + [OperationStatus.Queued]: '⏳', + [OperationStatus.Ready]: '⏳', + + [OperationStatus.Blocked]: '🚧', + + // Use an emoji that indicates that the operation has completed successfully + [OperationStatus.Success]: '✅\u200b', + + // Use an emoji that indicates that the operation output was reused + [OperationStatus.FromCache]: '📦', + [OperationStatus.Skipped]: '📦', + [OperationStatus.NoOp]: '' +}; + +/** + * The set of unique status emojis used in the `STATUS_EMOJIS` mapping. + * @alpha + */ +export const STATUS_BY_EMOJI: Map = new Map(); +for (const [status, emoji] of Object.entries(STATUS_EMOJIS)) { + if (emoji) { + let existingStatuses: OperationStatus[] | undefined = STATUS_BY_EMOJI.get(emoji); + if (!existingStatuses) { + existingStatuses = []; + STATUS_BY_EMOJI.set(emoji, existingStatuses); + } + existingStatuses.push(status as OperationStatus); + } +} + /** * The set of statuses that are considered terminal. * @alpha diff --git a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap index deb3e8fe623..1f1797f4857 100644 --- a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap +++ b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap @@ -25,12 +25,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation2 (success)[default] [gray]]=========================================[[default] [white]1 of 2[default] [gray]]==[default] +[gray]==[[default] [cyan]operation2 (success)[default] [gray]]=========================================[[default][white]🔄 1 ⏳ 1[default][gray]]==[default] ", }, Object { @@ -40,13 +80,13 @@ Array [ }, Object { "kind": "O", - "text": "[green]\\"operation2 (success)\\" completed successfully in 15.00 seconds.[default] + "text": "✅​ [green]\\"operation2 (success)\\" completed successfully in 15.00 seconds.[default] ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation (success)[default] [gray]]==========================================[[default] [white]2 of 2[default] [gray]]==[default] +[gray]==[[default] [cyan]operation (success)[default] [gray]]=========================================[[default][white]🔄 1 ✅​ 1[default][gray]]==[default] ", }, Object { @@ -56,7 +96,7 @@ Array [ }, Object { "kind": "O", - "text": "[green]\\"operation (success)\\" completed successfully in 15.00 seconds.[default] + "text": "✅​ [green]\\"operation (success)\\" completed successfully in 15.00 seconds.[default] ", }, Object { @@ -128,7 +168,7 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [green]SUCCESS: 2 operations[default] [gray]]====================================================[default] + "text": "[gray]==[[default]✅​ [green]SUCCESS: 2 operations[default] [gray]]===================================================[default] ", }, @@ -185,12 +225,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation2 (success with warnings)[default] [gray]]===========================[[default] [white]1 of 2[default] [gray]]==[default] +[gray]==[[default] [cyan]operation2 (success with warnings)[default] [gray]]===========================[[default][white]🔄 1 ⏳ 1[default][gray]]==[default] ", }, Object { @@ -212,13 +292,13 @@ Array [ }, Object { "kind": "E", - "text": "[yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚠️ [yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]============================[[default] [white]2 of 2[default] [gray]]==[default] +[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]==========================[[default][white]⚠️ 1 🔄 1[default][gray]]==[default] ", }, Object { @@ -240,7 +320,7 @@ Array [ }, Object { "kind": "E", - "text": "[yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚠️ [yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { @@ -312,13 +392,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]=====================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️ [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -329,7 +409,7 @@ Array [ }, Object { "kind": "O", - "text": "[gray]--[[default] [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️ [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -372,12 +452,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]stdout+stderr[default] [gray]]================================================[[default] [white]1 of 1[default] [gray]]==[default] +[gray]==[[default] [cyan]stdout+stderr[default] [gray]]====================================================[[default][white]🔄 1[default][gray]]==[default] ", }, Object { @@ -399,7 +519,7 @@ Array [ }, Object { "kind": "E", - "text": "[red]\\"stdout+stderr\\" failed to build.[default] + "text": "❌ [red]\\"stdout+stderr\\" failed to build.[default] ", }, Object { @@ -411,13 +531,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [red]FAILURE: 1 operation[default] [gray]]=====================================================[default] + "text": "[gray]==[[default]❌ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [red]FAILURE: stdout+stderr[default] [gray]]---------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]❌ [red]FAILURE: stdout+stderr[default] [gray]]---------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -460,12 +580,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]stdout only[default] [gray]]==================================================[[default] [white]1 of 1[default] [gray]]==[default] +[gray]==[[default] [cyan]stdout only[default] [gray]]======================================================[[default][white]🔄 1[default][gray]]==[default] ", }, Object { @@ -487,7 +647,7 @@ Array [ }, Object { "kind": "E", - "text": "[red]\\"stdout only\\" failed to build.[default] + "text": "❌ [red]\\"stdout only\\" failed to build.[default] ", }, Object { @@ -499,13 +659,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [red]FAILURE: 1 operation[default] [gray]]=====================================================[default] + "text": "[gray]==[[default]❌ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [red]FAILURE: stdout only[default] [gray]]-----------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]❌ [red]FAILURE: stdout only[default] [gray]]-----------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -548,12 +708,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]success with warnings (failure)[default] [gray]]==============================[[default] [white]1 of 1[default] [gray]]==[default] +[gray]==[[default] [cyan]success with warnings (failure)[default] [gray]]==================================[[default][white]🔄 1[default][gray]]==[default] ", }, Object { @@ -575,7 +775,7 @@ Array [ }, Object { "kind": "E", - "text": "[yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️ [yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -587,13 +787,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]=======================================[default] + "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -636,12 +836,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]success with warnings (success)[default] [gray]]==============================[[default] [white]1 of 1[default] [gray]]==[default] +[gray]==[[default] [cyan]success with warnings (success)[default] [gray]]==================================[[default][white]🔄 1[default][gray]]==[default] ", }, Object { @@ -663,7 +903,7 @@ Array [ }, Object { "kind": "E", - "text": "[yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -675,13 +915,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]=======================================[default] + "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -718,12 +958,52 @@ Array [ Object { "kind": "O", "text": "Executing a maximum of 1 simultaneous processes... +", + }, + Object { + "kind": "O", + "text": "Legend: +", + }, + Object { + "kind": "O", + "text": "❌ FAILURE +", + }, + Object { + "kind": "O", + "text": "⚠️ SUCCESS WITH WARNINGS +", + }, + Object { + "kind": "O", + "text": "🔄 EXECUTING +", + }, + Object { + "kind": "O", + "text": "⏳ WAITING / QUEUED / READY +", + }, + Object { + "kind": "O", + "text": "🚧 BLOCKED +", + }, + Object { + "kind": "O", + "text": "✅​ SUCCESS +", + }, + Object { + "kind": "O", + "text": "📦 FROM CACHE / SKIPPED ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]success with warnings (success)[default] [gray]]==============================[[default] [white]1 of 1[default] [gray]]==[default] +[gray]==[[default] [cyan]success with warnings (success)[default] [gray]]==================================[[default][white]🔄 1[default][gray]]==[default] ", }, Object { @@ -745,7 +1025,7 @@ Array [ }, Object { "kind": "E", - "text": "[yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -812,13 +1092,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default] [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]=======================================[default] + "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default] [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, From 9448e27da04098347ed50a8a175eeee0d34996a5 Mon Sep 17 00:00:00 2001 From: David Michon Date: Wed, 30 Jul 2025 23:25:44 +0000 Subject: [PATCH 2/3] Adjust spacing --- .../src/logic/operations/OperationStatus.ts | 2 +- .../OperationExecutionManager.test.ts.snap | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/libraries/rush-lib/src/logic/operations/OperationStatus.ts b/libraries/rush-lib/src/logic/operations/OperationStatus.ts index d103429dcf7..75ec3fd2ffa 100644 --- a/libraries/rush-lib/src/logic/operations/OperationStatus.ts +++ b/libraries/rush-lib/src/logic/operations/OperationStatus.ts @@ -59,7 +59,7 @@ export enum OperationStatus { export const STATUS_EMOJIS: Record = { // Most important statuses to report [OperationStatus.Failure]: '❌', - [OperationStatus.SuccessWithWarning]: '⚠️ ', + [OperationStatus.SuccessWithWarning]: '⚠️\u2009', // Use an emoji that indicates that the operation is currently executing [OperationStatus.Executing]: '🔄', diff --git a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap index 1f1797f4857..b29163b7046 100644 --- a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap +++ b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap @@ -39,7 +39,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -239,7 +239,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -292,13 +292,13 @@ Array [ }, Object { "kind": "E", - "text": "⚠️ [yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚠️  [yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]==========================[[default][white]⚠️ 1 🔄 1[default][gray]]==[default] +[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]==========================[[default][white]⚠️  1 🔄 1[default][gray]]==[default] ", }, Object { @@ -320,7 +320,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️ [yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚠️  [yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { @@ -392,13 +392,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]=====================================[default] + "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]=====================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️ [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️  [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -409,7 +409,7 @@ Array [ }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️ [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️  [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -466,7 +466,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -594,7 +594,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -722,7 +722,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -775,7 +775,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️ [yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️  [yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -787,13 +787,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -850,7 +850,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -903,7 +903,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️  [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -915,13 +915,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -972,7 +972,7 @@ Array [ }, Object { "kind": "O", - "text": "⚠️ SUCCESS WITH WARNINGS + "text": "⚠️  SUCCESS WITH WARNINGS ", }, Object { @@ -1025,7 +1025,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚠️  [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -1092,13 +1092,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, From bbcd8b3994311915dc2727e7fa7f279b3646d828 Mon Sep 17 00:00:00 2001 From: David Michon Date: Thu, 31 Jul 2025 01:31:36 +0000 Subject: [PATCH 3/3] Normalize emoji width --- .../src/logic/operations/OperationStatus.ts | 17 +-- .../OperationExecutionManager.test.ts.snap | 110 +++++++++--------- 2 files changed, 61 insertions(+), 66 deletions(-) diff --git a/libraries/rush-lib/src/logic/operations/OperationStatus.ts b/libraries/rush-lib/src/logic/operations/OperationStatus.ts index 75ec3fd2ffa..9f470804e8d 100644 --- a/libraries/rush-lib/src/logic/operations/OperationStatus.ts +++ b/libraries/rush-lib/src/logic/operations/OperationStatus.ts @@ -57,24 +57,19 @@ export enum OperationStatus { * @alpha */ export const STATUS_EMOJIS: Record = { - // Most important statuses to report - [OperationStatus.Failure]: '❌', - [OperationStatus.SuccessWithWarning]: '⚠️\u2009', + [OperationStatus.Failure]: '❌\ufe0f', + [OperationStatus.SuccessWithWarning]: '⚡\ufe0f', - // Use an emoji that indicates that the operation is currently executing [OperationStatus.Executing]: '🔄', - // Use an emoji that indicates that the operations are yet to execute - [OperationStatus.Waiting]: '⏳', - [OperationStatus.Queued]: '⏳', - [OperationStatus.Ready]: '⏳', + [OperationStatus.Waiting]: '⏳\ufe0f', + [OperationStatus.Queued]: '⏳\ufe0f', + [OperationStatus.Ready]: '⏳\ufe0f', [OperationStatus.Blocked]: '🚧', - // Use an emoji that indicates that the operation has completed successfully - [OperationStatus.Success]: '✅\u200b', + [OperationStatus.Success]: '✅\ufe0f', - // Use an emoji that indicates that the operation output was reused [OperationStatus.FromCache]: '📦', [OperationStatus.Skipped]: '📦', [OperationStatus.NoOp]: '' diff --git a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap index b29163b7046..edcb81ab404 100644 --- a/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap +++ b/libraries/rush-lib/src/logic/operations/test/__snapshots__/OperationExecutionManager.test.ts.snap @@ -34,12 +34,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -49,7 +49,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -59,7 +59,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -70,7 +70,7 @@ Array [ Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation2 (success)[default] [gray]]=========================================[[default][white]🔄 1 ⏳ 1[default][gray]]==[default] +[gray]==[[default] [cyan]operation2 (success)[default] [gray]]========================================[[default][white]🔄 1 ⏳️ 1[default][gray]]==[default] ", }, Object { @@ -80,13 +80,13 @@ Array [ }, Object { "kind": "O", - "text": "✅​ [green]\\"operation2 (success)\\" completed successfully in 15.00 seconds.[default] + "text": "✅️ [green]\\"operation2 (success)\\" completed successfully in 15.00 seconds.[default] ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation (success)[default] [gray]]=========================================[[default][white]🔄 1 ✅​ 1[default][gray]]==[default] +[gray]==[[default] [cyan]operation (success)[default] [gray]]=========================================[[default][white]🔄 1 ✅️ 1[default][gray]]==[default] ", }, Object { @@ -96,7 +96,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ [green]\\"operation (success)\\" completed successfully in 15.00 seconds.[default] + "text": "✅️ [green]\\"operation (success)\\" completed successfully in 15.00 seconds.[default] ", }, Object { @@ -168,7 +168,7 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]✅​ [green]SUCCESS: 2 operations[default] [gray]]===================================================[default] + "text": "[gray]==[[default]✅️ [green]SUCCESS: 2 operations[default] [gray]]===================================================[default] ", }, @@ -234,12 +234,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -249,7 +249,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -259,7 +259,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -270,7 +270,7 @@ Array [ Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation2 (success with warnings)[default] [gray]]===========================[[default][white]🔄 1 ⏳ 1[default][gray]]==[default] +[gray]==[[default] [cyan]operation2 (success with warnings)[default] [gray]]==========================[[default][white]🔄 1 ⏳️ 1[default][gray]]==[default] ", }, Object { @@ -292,13 +292,13 @@ Array [ }, Object { "kind": "E", - "text": "⚠️  [yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚡️ [yellow]\\"operation2 (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { "kind": "O", "text": " -[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]==========================[[default][white]⚠️  1 🔄 1[default][gray]]==[default] +[gray]==[[default] [cyan]operation (success with warnings)[default] [gray]]===========================[[default][white]⚡️ 1 🔄 1[default][gray]]==[default] ", }, Object { @@ -320,7 +320,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️  [yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] + "text": "⚡️ [yellow]\\"operation (success with warnings)\\" completed with warnings in 15.00 seconds.[default] ", }, Object { @@ -392,13 +392,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]=====================================[default] + "text": "[gray]==[[default]⚡️ [yellow]SUCCESS WITH WARNINGS: 2 operations[default] [gray]]=====================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️  [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚡️ [yellow]WARNING: operation (success with warnings)[default] [gray]]------------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -409,7 +409,7 @@ Array [ }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️  [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚡️ [yellow]WARNING: operation2 (success with warnings)[default] [gray]]-----------[[default] [white]15.00 seconds[default] [gray]]--[default] ", }, @@ -461,12 +461,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -476,7 +476,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -486,7 +486,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -519,7 +519,7 @@ Array [ }, Object { "kind": "E", - "text": "❌ [red]\\"stdout+stderr\\" failed to build.[default] + "text": "❌️ [red]\\"stdout+stderr\\" failed to build.[default] ", }, Object { @@ -531,13 +531,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]❌ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] + "text": "[gray]==[[default]❌️ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]❌ [red]FAILURE: stdout+stderr[default] [gray]]---------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]❌️ [red]FAILURE: stdout+stderr[default] [gray]]---------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -589,12 +589,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -604,7 +604,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -614,7 +614,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -647,7 +647,7 @@ Array [ }, Object { "kind": "E", - "text": "❌ [red]\\"stdout only\\" failed to build.[default] + "text": "❌️ [red]\\"stdout only\\" failed to build.[default] ", }, Object { @@ -659,13 +659,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]❌ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] + "text": "[gray]==[[default]❌️ [red]FAILURE: 1 operation[default] [gray]]====================================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]❌ [red]FAILURE: stdout only[default] [gray]]-----------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]❌️ [red]FAILURE: stdout only[default] [gray]]-----------------------------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -717,12 +717,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -732,7 +732,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -742,7 +742,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -775,7 +775,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️  [yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚡️ [yellow]\\"success with warnings (failure)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -787,13 +787,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚡️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚡️ [yellow]WARNING: success with warnings (failure)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -845,12 +845,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -860,7 +860,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -870,7 +870,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -903,7 +903,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️  [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚡️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -915,13 +915,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚡️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚡️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", }, @@ -967,12 +967,12 @@ Array [ }, Object { "kind": "O", - "text": "❌ FAILURE + "text": "❌️ FAILURE ", }, Object { "kind": "O", - "text": "⚠️  SUCCESS WITH WARNINGS + "text": "⚡️ SUCCESS WITH WARNINGS ", }, Object { @@ -982,7 +982,7 @@ Array [ }, Object { "kind": "O", - "text": "⏳ WAITING / QUEUED / READY + "text": "⏳️ WAITING / QUEUED / READY ", }, Object { @@ -992,7 +992,7 @@ Array [ }, Object { "kind": "O", - "text": "✅​ SUCCESS + "text": "✅️ SUCCESS ", }, Object { @@ -1025,7 +1025,7 @@ Array [ }, Object { "kind": "E", - "text": "⚠️  [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] + "text": "⚡️ [yellow]\\"success with warnings (success)\\" completed with warnings in 0.10 seconds.[default] ", }, Object { @@ -1092,13 +1092,13 @@ Array [ }, Object { "kind": "O", - "text": "[gray]==[[default]⚠️  [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] + "text": "[gray]==[[default]⚡️ [yellow]SUCCESS WITH WARNINGS: 1 operation[default] [gray]]======================================[default] ", }, Object { "kind": "O", - "text": "[gray]--[[default]⚠️  [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] + "text": "[gray]--[[default]⚡️ [yellow]WARNING: success with warnings (success)[default] [gray]]---------------[[default] [white]0.10 seconds[default] [gray]]--[default] ", },