Skip to content

Commit 873ff5f

Browse files
feat: Add summary option (#2549)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
1 parent 2e8603d commit 873ff5f

File tree

18 files changed

+464
-116
lines changed

18 files changed

+464
-116
lines changed

.github/workflows/test-action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ jobs:
127127
config: ./fixtures/cspell.json
128128
strict: false
129129
inline: none
130+
summary: true
130131
- name: Show Results
131132
uses: streetsidesoftware/actions/public/summary@v1
132133
with:

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
22
"search.exclude": {
3+
".git": true,
34
"**/.yarn": true,
45
"**/.pnp.*": true
56
},
67
"typescript.enablePromptUseWorkspaceTsdk": true,
78
"git.ignoreLimitWarning": true,
8-
"editor.formatOnSave": false
9+
"editor.formatOnSave": true
910
}

action-src/src/ActionParams.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ export interface ActionParams {
7272
* default: use default reporting.
7373
*/
7474
report: ReportChoices;
75+
76+
/**
77+
* Include a summary of the results in the output.
78+
*/
79+
summary: TrueFalse;
7580
}
7681

7782
const defaultActionParams: ActionParams = {
@@ -87,6 +92,7 @@ const defaultActionParams: ActionParams = {
8792
use_cspell_files: 'false',
8893
suggestions: 'false',
8994
report: undefined,
95+
summary: 'false',
9096
};
9197

9298
type ValidationFunction = (params: ActionParamsInput) => string | undefined;
@@ -153,6 +159,7 @@ export function validateActionParams(
153159
validateTrueFalse('suggestions'),
154160
validateOptions('check_dot_files', ['true', 'false', 'explicit']),
155161
validateOptions('report', ['all', 'simple', 'typos', 'flagged'], true),
162+
validateTrueFalse('summary'),
156163
];
157164
const success = validations
158165
.map((fn) => fn(params))

action-src/src/__snapshots__/action.test.ts.snap

Lines changed: 220 additions & 22 deletions
Large diffs are not rendered by default.

action-src/src/action.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,21 @@ function outputResult(runResult: RunResult) {
9292
setOutput('number_of_files_checked', result.number_of_files_checked);
9393
setOutput('number_of_issues', result.number_of_issues);
9494
setOutput('number_of_files_with_issues', result.files_with_issues.length);
95-
setOutput('files_with_issues', normalizeFiles(result.files_with_issues));
95+
setOutput('files_with_issues', result.files_with_issues);
96+
setOutput('number_of_files_skipped', result.number_of_files_skipped);
97+
setOutput('number_of_files_cached', result.number_of_files_cached);
9698
setOutput('result', result);
9799
}
98100

99101
function normalizeResult(result: RunResult) {
100-
const { issues: number_of_issues, files: number_of_files_checked, filesWithIssues } = result;
102+
const { issues: number_of_issues, files, filesWithIssues, skippedFiles = 0, cachedFiles = 0 } = result;
101103
return {
102104
success: !number_of_issues && !result.errors,
103105
errors: result.errors,
104106
number_of_issues,
105-
number_of_files_checked,
107+
number_of_files_checked: files - skippedFiles,
108+
number_of_files_skipped: skippedFiles,
109+
number_of_files_cached: cachedFiles,
106110
files_with_issues: normalizeFiles(filesWithIssues).slice(0, 1000),
107111
};
108112
}

action-src/src/checkSpelling.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { getDefaultLogger, type Logger } from './logger.js';
77
const { gatherFileGlobsFromContext } = __testing__;
88

99
vi.mock('./logger.js', async (importActual) => {
10-
const f = () => {};
1110
const logger: Logger = {
12-
error: vi.fn(f),
13-
debug: vi.fn(f),
14-
info: vi.fn(f),
15-
warning: vi.fn(f),
16-
issueCommand: vi.fn(f),
11+
error: vi.fn(),
12+
debug: vi.fn(),
13+
info: vi.fn(),
14+
warning: vi.fn(),
15+
issueCommand: vi.fn(),
16+
summary: vi.fn(),
1717
};
1818

1919
return {

action-src/src/checkSpelling.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ async function checkSpelling(
9797
const reporterOptions = {
9898
verbose: params.verbose === 'true',
9999
treatFlaggedWordsAsErrors: params.treat_flagged_words_as_errors === 'true',
100+
summary: params.summary === 'true',
100101
};
101102

102103
const collector = new CSpellReporterForGithubAction(params.inline, reporterOptions);

action-src/src/getActionParams.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { tf } from './utils.js';
55

66
export function getActionParams(): ActionParamsInput {
77
const params: ActionParamsInput = {
8-
// github_token: getInput('github_token', { required: true }),
98
files: getInput('files'),
109
incremental_files_only: tf(getInput('incremental_files_only')),
1110
config: getInput('config'),
@@ -18,6 +17,7 @@ export function getActionParams(): ActionParamsInput {
1817
use_cspell_files: tf(getInput('use_cspell_files')),
1918
suggestions: tf(getInput('suggestions')),
2019
report: getInput('report').toLowerCase(),
20+
summary: tf(getInput('summary') || 'false'),
2121
};
2222
return applyDefaults(params);
2323
}

action-src/src/logger.test.ts

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,40 @@
1-
import { describe, expect, test } from 'vitest';
1+
import { summary as coreSummary } from '@actions/core';
2+
import { describe, expect, test, vi } from 'vitest';
23

3-
import {} from './logger.js';
4+
import { createLogger } from './logger.js';
5+
6+
vi.mock('@actions/core', async (_importActual) => {
7+
return {
8+
debug: vi.fn(),
9+
info: vi.fn(),
10+
warning: vi.fn(),
11+
error: vi.fn(),
12+
issueCommand: vi.fn(),
13+
summary: {
14+
addRaw: vi.fn(),
15+
write: vi.fn(),
16+
},
17+
};
18+
});
419

520
describe('Validate Logger', () => {
6-
test('placeholder', () => {
7-
expect(true).toBe(true);
21+
test('createLogger', () => {
22+
const logger = createLogger({ debug: vi.fn() });
23+
expect(logger.debug).toBeDefined();
24+
expect(logger.info).toBeDefined();
25+
expect(logger.warning).toBeDefined();
26+
expect(logger.error).toBeDefined();
27+
expect(logger.issueCommand).toBeDefined();
28+
expect(logger.summary).toBeDefined();
29+
30+
logger.debug('test debug');
31+
expect(logger.debug).toHaveBeenCalledWith('test debug');
32+
});
33+
34+
test('summary', () => {
35+
const logger = createLogger();
36+
logger.summary('test summary');
37+
expect(coreSummary.addRaw).toHaveBeenCalledWith('test summary');
38+
expect(coreSummary.write).toHaveBeenCalled();
839
});
940
});

action-src/src/logger.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { debug, error, info, warning } from '@actions/core';
1+
import { debug, error, info, summary as coreSummary, warning } from '@actions/core';
22
import { issueCommand } from '@actions/core/lib/command.js';
33

44
export type IssueCommandFn = typeof issueCommand;
@@ -14,10 +14,16 @@ export interface Logger {
1414
warning: LogErrorFn;
1515
error: LogErrorFn;
1616
issueCommand: IssueCommandFn;
17+
summary: LogFn;
18+
}
19+
20+
function summary(message: string) {
21+
coreSummary.addRaw(message);
22+
coreSummary.write();
1723
}
1824

1925
export function createLogger(logger?: Partial<Logger>): Logger {
20-
return { debug, info, warning, error, issueCommand, ...logger };
26+
return { debug, info, warning, error, issueCommand, summary, ...logger };
2127
}
2228

2329
export function getDefaultLogger(): Logger {

0 commit comments

Comments
 (0)