New:Socket for Asana Is Now Available.Learn more
Sign In

@fettle/cli

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fettle/cli - npm Package Compare versions

Comparing version
4.0.0
to
4.1.0
+27
dist/pretty.d.ts
/**
* The human-facing terminal renderer.
*
* Deliberately CLI-only: markdown and the JSON report are contracts other things
* consume, while this exists to be read once by the person who just typed the
* command. It may change shape whenever that makes it clearer.
*
* Colour is written by hand rather than pulled in — a dozen escape codes do not
* justify a dependency in a tool that ships its own bundle.
*/
import type { HealthReport } from '@fettle/core';
export interface PrettyOptions {
/** Off when piped, when NO_COLOR is set, or when the terminal says it is dumb. */
colour: boolean;
/** Used to keep evidence on one line. */
width: number;
}
/**
* Decides whether to colour.
*
* Honours the NO_COLOR and FORCE_COLOR conventions, and otherwise colours only a
* real terminal — piping into a file should not fill it with escape codes.
*/
export declare function prettyOptions(env: Readonly<Record<string, string | undefined>>, isTty: boolean, columns?: number): PrettyOptions;
/** Renders a report for a person reading it in a terminal. */
export declare function renderPretty(report: HealthReport, options: PrettyOptions): string;
//# sourceMappingURL=pretty.d.ts.map
{"version":3,"file":"pretty.d.ts","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAS,YAAY,EAA0B,MAAM,cAAc,CAAC;AAiBhF,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,CAQf;AA6DD,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CA2BjF"}
/**
* The human-facing terminal renderer.
*
* Deliberately CLI-only: markdown and the JSON report are contracts other things
* consume, while this exists to be read once by the person who just typed the
* command. It may change shape whenever that makes it clearer.
*
* Colour is written by hand rather than pulled in — a dozen escape codes do not
* justify a dependency in a tool that ships its own bundle.
*/
const CSI = '\u001b[';
const ANSI = {
reset: `${CSI}0m`,
bold: `${CSI}1m`,
dim: `${CSI}2m`,
red: `${CSI}31m`,
green: `${CSI}32m`,
yellow: `${CSI}33m`,
blue: `${CSI}34m`,
grey: `${CSI}90m`,
};
/**
* Decides whether to colour.
*
* Honours the NO_COLOR and FORCE_COLOR conventions, and otherwise colours only a
* real terminal — piping into a file should not fill it with escape codes.
*/
export function prettyOptions(env, isTty, columns) {
const forced = env.FORCE_COLOR !== undefined && env.FORCE_COLOR !== '0';
const disabled = env.NO_COLOR !== undefined || env.TERM === 'dumb';
return {
colour: forced || (isTty && !disabled),
width: Math.max(60, Math.min(columns ?? 100, 120)),
};
}
function paint(options, colour, text) {
return options.colour ? `${ANSI[colour]}${text}${ANSI.reset}` : text;
}
const GRADE_COLOUR = {
A: 'green',
B: 'green',
C: 'yellow',
D: 'yellow',
F: 'red',
'N/A': 'grey',
};
/** A glyph per status, chosen to stay legible without colour. */
const STATUS_MARK = {
pass: { mark: 'ok ', colour: 'green' },
fail: { mark: 'FAIL', colour: 'red' },
na: { mark: 'n/a ', colour: 'grey' },
disabled: { mark: 'off ', colour: 'grey' },
};
function truncate(text, width) {
return text.length <= width ? text : `${text.slice(0, Math.max(0, width - 1))}…`;
}
/** Truncates *and* pads, so a column is exactly its width whatever it holds. */
function column(text, width) {
return truncate(text, width).padEnd(width);
}
/** Columns consumed by everything on a rule line except the evidence. */
const RULE_ID_WIDTH = 19;
const RULE_GUTTER = 2 + 4 + 1 + RULE_ID_WIDTH + 1 + 3 + 1 + 3 + 2;
function renderRule(rule, options) {
const { mark, colour } = STATUS_MARK[rule.status];
const score = rule.score === null ? ' -' : String(rule.score).padStart(3);
const weight = `x${rule.weight}`.padEnd(3);
const evidence = truncate(rule.evidence, Math.max(20, options.width - RULE_GUTTER));
return (` ${paint(options, colour, mark)} ${column(rule.id, RULE_ID_WIDTH)} ${score} ` +
`${paint(options, 'grey', weight)} ${paint(options, 'grey', evidence)}`);
}
function renderRepo(repo, options) {
const gradeText = options.colour ? `${ANSI.bold}${repo.grade}${ANSI.reset}` : repo.grade;
const grade = paint(options, GRADE_COLOUR[repo.grade], gradeText);
const score = repo.score === null ? '' : ` ${repo.score.toFixed(1)}`;
const nameWidth = Math.max(20, options.width - 12);
return [
'',
`${paint(options, 'blue', column(repo.repo, nameWidth))} ${grade}${score}`,
...repo.rules.map((rule) => renderRule(rule, options)),
];
}
/** Renders a report for a person reading it in a terminal. */
export function renderPretty(report, options) {
const { repoCount, averageScore } = report.fleet;
const summary = repoCount === 1
? '1 repository'
: `${repoCount} repositories` +
(averageScore === null ? '' : `, average ${averageScore.toFixed(1)}`);
const lines = [paint(options, 'dim', `fettle - ${summary}`)];
for (const repo of report.repos)
lines.push(...renderRepo(repo, options));
const blocked = report.repos.flatMap((repo) => repo.rules.filter((rule) => rule.status === 'na').map((rule) => ({ repo: repo.repo, rule })));
if (blocked.length > 0) {
lines.push('', paint(options, 'yellow', 'Checks that could not run'));
for (const { repo, rule } of blocked) {
const detail = `${repo} ${rule.id} - ${rule.evidence}`;
lines.push(paint(options, 'grey', ` ${truncate(detail, options.width - 2)}`));
}
}
if (repoCount === 0)
lines.push('', paint(options, 'grey', ' no repositories scanned'));
return lines.join('\n');
}
//# sourceMappingURL=pretty.js.map
{"version":3,"file":"pretty.js","sourceRoot":"","sources":["../src/pretty.ts"],"names":[],"mappings":"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"}
+13
-3

@@ -7,2 +7,3 @@ /**

*/
import { type PrettyOptions } from './pretty.js';
import { type AssessOptions, type BadgePayload, type FloorGrade, type HealthReport } from '@fettle/core';

@@ -14,9 +15,14 @@ export declare const EXIT_OK = 0;

export declare const EXIT_SCAN_FAILED = 3;
declare const FORMATS: readonly ["json", "markdown", "badge"];
declare const FORMATS: readonly ["pretty", "json", "markdown", "badge"];
export type Format = (typeof FORMATS)[number];
export interface CliOptions {
repos: string[];
format: Format;
/** Absent when not given: the default depends on whether stdout is a terminal. */
format?: Format;
failBelow?: FloorGrade;
apiUrl?: string;
/** A bare hostname, as `gh` takes in `GH_HOST`. Lower precedence than `apiUrl`. */
host?: string;
/** Print diagnostics to stderr. */
debug: boolean;
/** A local config file; absent means each repository supplies its own. */

@@ -39,3 +45,3 @@ configPath?: string;

export declare function renderBadges(report: HealthReport): Record<string, BadgePayload>;
export declare function render(report: HealthReport, format: Format): string;
export declare function render(report: HealthReport, format: Format, pretty: PrettyOptions): string;
/**

@@ -56,2 +62,6 @@ * Performs the scan.

now?: Date;
/** Whether stdout is a terminal. Decides the default format and colour. */
isTty?: boolean;
/** Terminal width, for keeping evidence on one line. */
columns?: number;
}

@@ -58,0 +68,0 @@ /** Runs the command and returns its exit code. Never throws for expected failures. */

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAWL,KAAK,aAAa,EAClB,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEf,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,QAAA,MAAM,OAAO,wCAAyC,CAAC;AACvD,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,mFAAmF;AACnF,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,KAAK,QAyByD,CAAC;AAsB5E;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,GACrD,UAAU,CAqDZ;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAI/E;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASnE;AAMD;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAElG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAyBD,sFAAsF;AACtF,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAkE9D"}
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAWL,KAAK,aAAa,EAClB,KAAK,YAAY,EAEjB,KAAK,UAAU,EAEf,KAAK,YAAY,EAClB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,QAAA,MAAM,OAAO,kDAAmD,CAAC;AACjE,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,mFAAmF;AACnF,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED,eAAO,MAAM,KAAK,QA8ByD,CAAC;AAsB5E;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAM,GACrD,UAAU,CAyDZ;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAI/E;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAW1F;AAMD;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAElG,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyBD,sFAAsF;AACtF,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAmF9D"}

@@ -9,2 +9,3 @@ /**

import { parseArgs } from 'node:util';
import { prettyOptions, renderPretty } from './pretty.js';
import { assess, badgeFilename, buildBadgePayload, CONFIG_FILENAME, FLOOR_GRADES, meetsGradeFloor, parseConfig, renderMarkdown, TOOL_NAME, TOOL_VERSION, } from '@fettle/core';

@@ -16,3 +17,3 @@ export const EXIT_OK = 0;

export const EXIT_SCAN_FAILED = 3;
const FORMATS = ['json', 'markdown', 'badge'];
const FORMATS = ['pretty', 'json', 'markdown', 'badge'];
/** A problem with how the command was invoked. Reported to stderr, exit code 2. */

@@ -33,7 +34,12 @@ export class UsageError extends Error {

$GITHUB_REPOSITORY when set.
--format <format> Output format: ${FORMATS.join(' | ')} (default: json).
--format <format> Output format: ${FORMATS.join(' | ')}.
Defaults to pretty in a terminal, json when piped.
--fail-below <grade> Exit ${EXIT_BELOW_FLOOR} if any repository grades below this
floor: ${FLOOR_GRADES.join(' | ')}.
--api-url <url> GitHub API base URL for GitHub Enterprise Server.
Defaults to $GITHUB_API_URL, then https://api.github.com.
--api-url <url> Full GitHub API base URL, e.g.
https://ghe.example.com/api/v3. Defaults to $GITHUB_API_URL.
--gh-host <host> Hostname instead of a full URL, e.g. ghe.example.com.
Defaults to $GH_HOST, the variable the gh CLI uses.
--debug Print the resolved host, every API request and its timing
to stderr. Never prints the token. Also $FETTLE_DEBUG=1.
--config <path> Local config file to apply to every repository, instead of

@@ -88,3 +94,5 @@ reading ${CONFIG_FILENAME} from each one.

'api-url': { type: 'string' },
'gh-host': { type: 'string' },
config: { type: 'string' },
debug: { type: 'boolean', default: false },
version: { type: 'boolean', default: false },

@@ -111,3 +119,3 @@ help: { type: 'boolean', short: 'h', default: false },

repos,
format: values.format === undefined ? 'json' : oneOf(values.format, FORMATS, 'format'),
format: values.format === undefined ? undefined : oneOf(values.format, FORMATS, 'format'),
failBelow: values['fail-below'] === undefined

@@ -117,2 +125,4 @@ ? undefined

apiUrl: values['api-url'] ?? env.GITHUB_API_URL,
host: values['gh-host'] ?? env.GH_HOST,
debug: values.debug === true || (env.FETTLE_DEBUG !== undefined && env.FETTLE_DEBUG !== '0'),
configPath: values.config,

@@ -127,4 +137,6 @@ help,

}
export function render(report, format) {
export function render(report, format, pretty) {
switch (format) {
case 'pretty':
return renderPretty(report, pretty);
case 'json':

@@ -182,2 +194,12 @@ return JSON.stringify(report, null, 2);

const warn = (text) => stderr(`${TOOL_NAME}: ${text}\n`);
// Pretty output is for a person reading it now; anything piped stays machine
// readable, so a script that never passed --format keeps working.
const isTty = options.isTty ?? false;
const format = cli.format ?? (isTty ? 'pretty' : 'json');
const pretty = prettyOptions(env, isTty, options.columns);
const debug = cli.debug
? (message) => stderr(`${TOOL_NAME}: debug: ${message}\n`)
: undefined;
debug?.(`format ${format}${cli.format === undefined ? ' (default)' : ''}, colour ${pretty.colour}`);
debug?.(`repositories: ${cli.repos.join(', ')}`);
let config;

@@ -200,5 +222,7 @@ try {

apiUrl: cli.apiUrl,
host: cli.host,
config,
now: options.now,
onWarning: (repo, warning) => warn(`${repo}: ${warning}`),
onDebug: debug,
});

@@ -210,3 +234,3 @@ }

}
stdout(`${render(report, cli.format)}\n`);
stdout(`${render(report, format, pretty)}\n`);
if (cli.failBelow === undefined)

@@ -213,0 +237,0 @@ return EXIT_OK;

@@ -1,1 +0,1 @@

{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}

@@ -8,3 +8,5 @@ #!/usr/bin/env node

stderr: (chunk) => process.stderr.write(chunk),
isTty: process.stdout.isTTY === true,
columns: process.stdout.columns,
});
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;CAC/C,CAAC,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;IACpC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;CAChC,CAAC,CAAC"}
{
"name": "@fettle/cli",
"version": "4.0.0",
"version": "4.1.0",
"description": "Command-line interface for grading repository maintenance health.",

@@ -40,3 +40,3 @@ "license": "MIT",

"dependencies": {
"@fettle/core": "4.0.0"
"@fettle/core": "4.1.0"
},

@@ -43,0 +43,0 @@ "scripts": {