test: restore all-skipped coverage guard with custom reporter

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2026-02-27 12:20:09 +01:00
parent 1b45318512
commit b1b6c30312
5 changed files with 86 additions and 4 deletions

View File

@@ -47,7 +47,7 @@ jobs:
-
name: Check coverage
run: |
if [ -f ./coverage/clover.xml ]; then
if [ -f ./coverage/clover.xml ] && [ ! -f ./coverage/allSkipped.txt ]; then
echo "RUN_CODECOV=true" >> $GITHUB_ENV
else
echo "RUN_CODECOV=false" >> $GITHUB_ENV
@@ -217,7 +217,7 @@ jobs:
-
name: Check coverage
run: |
if [ -f ./coverage/clover.xml ]; then
if [ -f ./coverage/clover.xml ] && [ ! -f ./coverage/allSkipped.txt ]; then
echo "RUN_CODECOV=true" >> $GITHUB_ENV
else
echo "RUN_CODECOV=false" >> $GITHUB_ENV

View File

@@ -0,0 +1,19 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type {Reporter} from 'vitest/node';
export declare const vitestAllSkippedReporter: () => Reporter;

View File

@@ -0,0 +1,59 @@
/**
* Copyright 2026 actions-toolkit authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import fs from 'node:fs';
import path from 'node:path';
export const vitestAllSkippedReporter = () => {
let vitest;
let hasExecutedTest;
let hasAnyCollectedTest;
const getFlagPath = () => {
const reportsDirectory = vitest?.config?.coverage?.reportsDirectory ?? 'coverage';
return path.join(reportsDirectory, 'allSkipped.txt');
};
return {
onInit(ctx) {
vitest = ctx;
hasExecutedTest = false;
hasAnyCollectedTest = false;
},
onTestCaseReady() {
hasAnyCollectedTest = true;
},
onTestCaseResult(testCase) {
const state = testCase.result()?.state;
if (state === 'passed' || state === 'failed') {
hasExecutedTest = true;
}
},
onTestRunEnd() {
if (!vitest?.config?.coverage?.enabled) {
return;
}
const allSkipped = hasAnyCollectedTest && !hasExecutedTest;
const flagPath = getFlagPath();
if (allSkipped) {
fs.mkdirSync(path.dirname(flagPath), {recursive: true});
fs.writeFileSync(flagPath, '');
} else if (fs.existsSync(flagPath)) {
fs.rmSync(flagPath);
}
}
};
};

View File

@@ -15,6 +15,7 @@
*/
import {defineConfig} from 'vitest/config';
import {vitestAllSkippedReporter} from './__tests__/.setup/skipped-reporter.mjs';
export default defineConfig({
test: {
@@ -22,11 +23,12 @@ export default defineConfig({
environment: 'node',
include: ['**/*.test.itg.ts'],
testTimeout: 1800000,
reporters: ['default', vitestAllSkippedReporter()],
coverage: {
provider: 'v8',
reporter: ['clover'],
include: ['src/**/*.ts'],
exclude: ['src/**/index.ts']
exclude: ['src/**/index.ts', '__tests__/**', 'lib/**']
}
}
});

View File

@@ -15,6 +15,7 @@
*/
import {defineConfig} from 'vitest/config';
import {vitestAllSkippedReporter} from './__tests__/.setup/skipped-reporter.mjs';
export default defineConfig({
test: {
@@ -22,11 +23,12 @@ export default defineConfig({
environment: 'node',
setupFiles: ['./__tests__/.setup/setup.unit.ts'],
include: ['**/*.test.ts'],
reporters: ['default', vitestAllSkippedReporter()],
coverage: {
provider: 'v8',
reporter: ['clover'],
include: ['src/**/*.ts'],
exclude: ['src/**/index.ts']
exclude: ['src/**/index.ts', '__tests__/**', 'lib/**']
}
}
});