Skip to content

Commit 43aeb0f

Browse files
committed
cleanup code
1 parent 60a2fd1 commit 43aeb0f

File tree

1 file changed

+37
-57
lines changed

1 file changed

+37
-57
lines changed

src/main.ts

Lines changed: 37 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,118 +1,98 @@
11
import * as core from '@actions/core';
2-
import * as github from '@actions/github';
32
import * as glob from "@actions/glob";
43
import { readFileSync, existsSync } from 'fs';
54

65
interface Input {
7-
token: string;
86
'include-gitignore': boolean;
97
'ignore-default': boolean;
108
files: string;
119
}
1210

1311
export function getInputs(): Input {
1412
const result = {} as Input;
15-
result.token = core.getInput('github-token');
1613
result['include-gitignore'] = core.getBooleanInput('include-gitignore');
1714
result['ignore-default'] = core.getBooleanInput('ignore-default');
1815
result.files = core.getInput('files');
1916
return result;
2017
}
2118

22-
export const runAction = async (octokit: ReturnType<typeof github.getOctokit>, input: Input): Promise<void> => {
23-
let allFiles: string[] = [];
19+
export const runAction = async (input: Input): Promise<void> => {
20+
let filesToCheck: string[] = [];
21+
core.startGroup(`Loading files to check.`);
2422
if (input.files) {
25-
allFiles = input.files.split(' ');
26-
allFiles = await (await glob.create(allFiles.join('\n'))).glob();
23+
filesToCheck = input.files.split(' ');
24+
filesToCheck = await (await glob.create(filesToCheck.join('\n'))).glob();
2725
} else {
28-
allFiles = await (await glob.create('*')).glob();
26+
filesToCheck = await (await glob.create('*')).glob();
2927
}
30-
core.startGroup(`All Files: ${allFiles.length}`);
31-
core.info(JSON.stringify(allFiles));
28+
// core.info(JSON.stringify(filesToCheck));
3229
core.endGroup();
3330

34-
const codeownerContent = getCodeownerContent();
3531
core.startGroup('Reading CODEOWNERS File');
36-
core.endGroup();
32+
const codeownerContent = getCodeownerContent();
3733
let codeownerFileGlobs = codeownerContent.split('\n')
3834
.map(line => line.split(' ')[0])
3935
.filter(file => !file.startsWith('#'))
4036
.map(file => file.replace(/^\//, ''));
4137
if (input['ignore-default'] === true) {
4238
codeownerFileGlobs = codeownerFileGlobs.filter(file => file !== '*');
4339
}
44-
4540
const codeownersGlob = await glob.create(codeownerFileGlobs.join('\n'));
4641
let codeownersFiles = await codeownersGlob.glob();
47-
core.startGroup(`CODEOWNERS Files: ${codeownersFiles.length}`);
48-
core.info(JSON.stringify(codeownersFiles));
42+
// core.info(JSON.stringify(codeownersFiles));
4943
core.endGroup();
50-
codeownersFiles = codeownersFiles.filter(file => allFiles.includes(file));
44+
45+
core.startGroup('Matching CODEOWNER Files with found files');
46+
codeownersFiles = codeownersFiles.filter(file => filesToCheck.includes(file));
5147
core.info(`CODEOWNER Files in All Files: ${codeownersFiles.length}`);
52-
core.startGroup('CODEOWNERS');
5348
core.info(JSON.stringify(codeownersFiles));
5449
core.endGroup();
5550

56-
57-
58-
let filesCovered = codeownersFiles;
59-
let allFilesClean = allFiles;
6051
if (input['include-gitignore'] === true) {
61-
let gitIgnoreFiles: string[] = [];
52+
core.startGroup('Ignoring .gitignored files');
53+
let gitIgnoreFiles: string[] = [];
6254
if(!existsSync('.gitignore')){
6355
core.warning('No .gitignore file found');
6456
} else {
6557
const gitIgnoreBuffer = readFileSync('.gitignore', 'utf8');
6658
const gitIgnoreGlob = await glob.create(gitIgnoreBuffer);
6759
gitIgnoreFiles = await gitIgnoreGlob.glob();
6860
core.info(`.gitignore Files: ${gitIgnoreFiles.length}`);
61+
const lengthBefore = filesToCheck.length;
62+
filesToCheck = filesToCheck.filter(file => !gitIgnoreFiles.includes(file));
63+
const filesIgnored = lengthBefore - filesToCheck.length;
64+
core.info(`Files Ignored: ${filesIgnored}`);
6965
}
70-
allFilesClean = allFiles.filter(file => !gitIgnoreFiles.includes(file));
71-
filesCovered = filesCovered.filter(file => !gitIgnoreFiles.includes(file));
72-
}
73-
if (input.files) {
74-
filesCovered = filesCovered.filter(file => allFilesClean.includes(file));
66+
core.endGroup();
7567
}
76-
const coveragePercent = (filesCovered.length / allFilesClean.length) * 100;
77-
const coverageMessage = `${filesCovered.length}/${allFilesClean.length}(${coveragePercent.toFixed(2)}%) files covered by CODEOWNERS`;
68+
69+
core.startGroup('Checking CODEOWNERS Coverage');
70+
const filesNotCovered = filesToCheck.filter(file => !codeownersFiles.includes(file));
71+
const amountCovered = filesToCheck.length - filesNotCovered.length
72+
73+
74+
const coveragePercent = filesToCheck.length === 0 ? 100 : (amountCovered / filesToCheck.length) * 100;
75+
const coverageMessage = `${amountCovered}/${filesToCheck.length}(${coveragePercent.toFixed(2)}%) files covered by CODEOWNERS`;
7876
core.notice(coverageMessage, {
7977
title: 'Coverage',
8078
file: 'CODEOWNERS'
8179
});
82-
83-
const filesNotCovered = allFilesClean.filter(f => !filesCovered.includes(f));
84-
core.info(`Files not covered: ${filesNotCovered.length}`);
85-
86-
if (github.context.eventName === 'pull_request') {
87-
const checkResponse = await octokit.rest.checks.create({
88-
owner: github.context.repo.owner,
89-
repo: github.context.repo.repo,
90-
name: 'Changed Files have CODEOWNERS',
91-
head_sha: github.context.payload.pull_request?.head.sha || github.context.payload.after || github.context.sha,
92-
status: 'completed',
93-
completed_at: (new Date()).toISOString(),
94-
output: {
95-
title: 'Codeowners check!',
96-
summary: `Summary`,
97-
annotations: filesNotCovered.map(file => ({
98-
path: file,
99-
annotation_level: 'failure' as 'failure',
100-
message: 'File not covered by CODEOWNERS',
101-
start_line: 0,
102-
end_line: 1,
103-
})).slice(0, 50),
104-
},
105-
conclusion: coveragePercent < 100 ? 'failure' : 'success',
106-
});
107-
console.log('Check Response OK: ', checkResponse.status);
80+
core.endGroup();
81+
core.startGroup('Annotating files');
82+
filesNotCovered.forEach(file => core.error(`File not covered by CODEOWNERS: ${file}`, {
83+
title: 'File mssing in CODEOWNERS',
84+
file: file,
85+
}));
86+
core.endGroup();
87+
if(filesNotCovered.length > 0){
88+
core.setFailed(`${filesNotCovered.length}/${filesToCheck.length} files not covered in CODEOWNERS`);
10889
}
10990
}
11091

11192
export async function run(): Promise<void> {
11293
try {
11394
const input = getInputs();
114-
const octokit: ReturnType<typeof github.getOctokit> = github.getOctokit(input.token);
115-
return runAction(octokit, input);
95+
return runAction(input);
11696
} catch (error) {
11797
core.startGroup(error instanceof Error ? error.message : JSON.stringify(error));
11898
core.info(JSON.stringify(error, null, 2));

0 commit comments

Comments
 (0)