diff --git a/lib/progress-logger/index.ts b/lib/progress-logger/index.ts index a551a4b8..79e24de1 100644 --- a/lib/progress-logger/index.ts +++ b/lib/progress-logger/index.ts @@ -1,2 +1,2 @@ -export { default } from './progress-logger'; +export { default, resolveColor } from './progress-logger'; export * from './log-templates'; diff --git a/lib/progress-logger/log-templates.ts b/lib/progress-logger/log-templates.ts index 1f5b14c5..31182926 100644 --- a/lib/progress-logger/log-templates.ts +++ b/lib/progress-logger/log-templates.ts @@ -2,6 +2,9 @@ import { Task } from './types'; import config from '@config'; import { CACHE_LOCATION } from '@file-client'; +// Regexp for converting `[INFO][LINTING] reponame` to `[INFO/LINTING] reponame` +const CI_TEMPLATE_TASK_REGEXP = /\]\[/; + export const TASK_TEMPLATE = (task: Task): string => { switch (task.step) { case 'START': @@ -33,8 +36,14 @@ export const REPOSITORIES_STATUS_TEMPLATE = ( ): string => `Repositories (${scannedRepositories}/${config.repositories.length})`; -export const CI_STATUS_TEMPLATE = (scannedRepositories: number): string => - `[INFO] ${REPOSITORIES_STATUS_TEMPLATE(scannedRepositories)}\n`; +export const CI_STATUS_TEMPLATE = ( + scannedRepositories: number, + tasks: Task[] +): string => `[INFO/STATUS] ${REPOSITORIES_STATUS_TEMPLATE(scannedRepositories)} +${tasks.map(task => CI_TASK_TEMPLATE(task)).join('\n')}\n`; + +const CI_TASK_TEMPLATE = (task: Task): string => + `[INFO]${TASK_TEMPLATE(task)}`.replace(CI_TEMPLATE_TASK_REGEXP, '/'); export const LINT_END_TEMPLATE = ( repository: string, diff --git a/lib/progress-logger/progress-logger.ts b/lib/progress-logger/progress-logger.ts index 210a782c..4cb65d5e 100644 --- a/lib/progress-logger/progress-logger.ts +++ b/lib/progress-logger/progress-logger.ts @@ -1,8 +1,20 @@ +import chalk from 'chalk'; + import * as Templates from './log-templates'; import { LogMessage, Task, Listeners, Listener, ListenerType } from './types'; import config from '@config'; -const CI_KEEP_ALIVE_INTERVAL_MS = 15 * 1000; +const CI_KEEP_ALIVE_INTERVAL_MS = 4.5 * 60 * 1000; +const DEFAULT_COLOR = (text: string) => text; + +/** + * Resolve color for message or task + */ +export function resolveColor( + taskOrMessage: Task | LogMessage +): typeof DEFAULT_COLOR { + return (taskOrMessage.color && chalk[taskOrMessage.color]) || DEFAULT_COLOR; +} /** * Logger for holding state of current progress @@ -305,7 +317,10 @@ class ProgressLogger { * Log status of scanning to CI */ onCiStatus() { - const message = Templates.CI_STATUS_TEMPLATE(this.scannedRepositories); + const message = Templates.CI_STATUS_TEMPLATE( + this.scannedRepositories, + this.tasks + ); this.listeners.ciKeepAlive.forEach(listener => listener(message)); } diff --git a/lib/ui/components/AppCI.tsx b/lib/ui/components/AppCI.tsx index fd0c9a76..09a51513 100644 --- a/lib/ui/components/AppCI.tsx +++ b/lib/ui/components/AppCI.tsx @@ -1,18 +1,11 @@ import React, { useLayoutEffect } from 'react'; import { useStdout } from 'ink'; -import chalk from 'chalk'; import Results from './Results'; import { useOnExit } from '../hooks'; -import ProgressLogger, { TASK_TEMPLATE } from '@progress-logger'; +import ProgressLogger, { resolveColor, TASK_TEMPLATE } from '@progress-logger'; import { LogMessage, Task } from '@progress-logger/types'; -const DEFAULT_COLOR = (text: string) => text; - -function resolveColor(taskOrMessage: Task | LogMessage) { - return (taskOrMessage.color && chalk[taskOrMessage.color]) || DEFAULT_COLOR; -} - /** * Application for CIs * - Message and task updates are rendered directly to stdout due to ink not