switch from jest to vitest

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2026-02-27 18:24:25 +01:00
parent 206b75dbd2
commit 48428700fb
9 changed files with 1178 additions and 3150 deletions

View File

@@ -1,4 +1,4 @@
import {beforeEach, describe, expect, test} from '@jest/globals'; import {beforeEach, describe, expect, test} from 'vitest';
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
@@ -15,7 +15,7 @@ describe('getInputs', () => {
}); });
// prettier-ignore // prettier-ignore
test.each([ const cases: [number, Map<string, string>, context.Inputs][] = [
[ [
0, 0,
new Map<string, string>([ new Map<string, string>([
@@ -35,7 +35,7 @@ describe('getInputs', () => {
setHost: false, setHost: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
1, 1,
@@ -59,7 +59,7 @@ describe('getInputs', () => {
setHost: false, setHost: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
2, 2,
@@ -79,7 +79,7 @@ describe('getInputs', () => {
setHost: true, setHost: true,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
3, 3,
@@ -101,7 +101,7 @@ describe('getInputs', () => {
setHost: false, setHost: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
4, 4,
@@ -121,7 +121,7 @@ describe('getInputs', () => {
setHost: false, setHost: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
5, 5,
@@ -142,7 +142,7 @@ describe('getInputs', () => {
rootless: false, rootless: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
6, 6,
@@ -163,7 +163,7 @@ describe('getInputs', () => {
rootless: false, rootless: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
7, 7,
@@ -183,7 +183,7 @@ describe('getInputs', () => {
rootless: false, rootless: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
8, 8,
@@ -203,7 +203,7 @@ describe('getInputs', () => {
rootless: true, rootless: true,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
[ [
9, 9,
@@ -226,10 +226,11 @@ describe('getInputs', () => {
setHost: false, setHost: false,
runtimeBasedir: path.join(os.homedir(), `setup-docker-action`), runtimeBasedir: path.join(os.homedir(), `setup-docker-action`),
githubToken: '', githubToken: '',
} as context.Inputs }
], ],
])( ];
'[%d] given %p as inputs, returns %p', test.each(cases)(
'[%d] given %o as inputs, returns %o',
async (num: number, inputs: Map<string, string>, expected: context.Inputs) => { async (num: number, inputs: Map<string, string>, expected: context.Inputs) => {
inputs.forEach((value: string, name: string) => { inputs.forEach((value: string, name: string) => {
setInput(name, value); setInput(name, value);

12
__tests__/setup.unit.ts Normal file
View File

@@ -0,0 +1,12 @@
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-docker-action-'));
process.env = Object.assign({}, process.env, {
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/setup-docker-action',
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});

View File

@@ -74,7 +74,7 @@ FROM deps AS test
RUN --mount=type=bind,target=.,rw \ RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/src/.yarn/cache \ --mount=type=cache,target=/src/.yarn/cache \
--mount=type=cache,target=/src/node_modules \ --mount=type=cache,target=/src/node_modules \
yarn run test --coverage --coverageDirectory=/tmp/coverage yarn run test --coverage --coverage.reportsDirectory=/tmp/coverage
FROM scratch AS test-coverage FROM scratch AS test-coverage
COPY --from=test /tmp/coverage / COPY --from=test /tmp/coverage /

View File

@@ -2,7 +2,7 @@
const {defineConfig, globalIgnores} = require('eslint/config'); const {defineConfig, globalIgnores} = require('eslint/config');
const {fixupConfigRules, fixupPluginRules} = require('@eslint/compat'); const {fixupConfigRules, fixupPluginRules} = require('@eslint/compat');
const typescriptEslint = require('@typescript-eslint/eslint-plugin'); const typescriptEslint = require('@typescript-eslint/eslint-plugin');
const jestPlugin = require('eslint-plugin-jest'); const vitestPlugin = require('@vitest/eslint-plugin');
const prettier = require('eslint-plugin-prettier'); const prettier = require('eslint-plugin-prettier');
const globals = require('globals'); const globals = require('globals');
const tsParser = require('@typescript-eslint/parser'); const tsParser = require('@typescript-eslint/parser');
@@ -19,26 +19,27 @@ const compat = new FlatCompat({
module.exports = defineConfig([ module.exports = defineConfig([
globalIgnores(['dist/**/*', 'coverage/**/*', 'node_modules/**/*']), globalIgnores(['dist/**/*', 'coverage/**/*', 'node_modules/**/*']),
{ {
// prettier-ignore
extends: fixupConfigRules( extends: fixupConfigRules(
compat.extends( compat.extends(
'eslint:recommended', 'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended',
'plugin:jest/recommended', 'plugin:@vitest/legacy-recommended',
'plugin:prettier/recommended' 'plugin:prettier/recommended'
) )
), ),
plugins: { plugins: {
'@typescript-eslint': fixupPluginRules(typescriptEslint), '@typescript-eslint': fixupPluginRules(typescriptEslint),
jest: fixupPluginRules(jestPlugin), '@vitest': fixupPluginRules(vitestPlugin),
prettier: fixupPluginRules(prettier) prettier: fixupPluginRules(prettier)
}, },
languageOptions: { languageOptions: {
globals: { globals: {
...globals.node, ...globals.node,
...globals.jest ...vitestPlugin.environments.env.globals
}, },
parser: tsParser, parser: tsParser,
ecmaVersion: 'latest', ecmaVersion: 'latest',

View File

@@ -1,29 +0,0 @@
/* eslint-disable @typescript-eslint/no-require-imports */
const fs = require('fs');
const os = require('os');
const path = require('path');
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-setup-docker-action-'));
process.env = Object.assign({}, process.env, {
TEMP: tmpDir,
GITHUB_REPOSITORY: 'docker/setup-docker-action',
RUNNER_TEMP: path.join(tmpDir, 'runner-temp'),
RUNNER_TOOL_CACHE: path.join(tmpDir, 'runner-tool-cache')
});
module.exports = {
clearMocks: true,
testEnvironment: 'node',
moduleFileExtensions: ['js', 'ts'],
testMatch: ['**/*.test.ts'],
transform: {
'^.+\\.ts$': 'ts-jest'
},
moduleNameMapper: {
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
},
collectCoverageFrom: ['src/**/{!(main.ts),}.ts'],
coveragePathIgnorePatterns: ['lib/', 'node_modules/', '__mocks__/', '__tests__/'],
verbose: true
};

View File

@@ -10,7 +10,7 @@
"eslint:fix": "eslint --fix .", "eslint:fix": "eslint --fix .",
"prettier": "prettier --check \"./**/*.ts\"", "prettier": "prettier --check \"./**/*.ts\"",
"prettier:fix": "prettier --write \"./**/*.ts\"", "prettier:fix": "prettier --write \"./**/*.ts\"",
"test": "jest", "test": "vitest run",
"all": "yarn run build && yarn run format && yarn test" "all": "yarn run build && yarn run format && yarn test"
}, },
"repository": { "repository": {
@@ -37,14 +37,14 @@
"@typescript-eslint/eslint-plugin": "^8.50.0", "@typescript-eslint/eslint-plugin": "^8.50.0",
"@typescript-eslint/parser": "^8.50.0", "@typescript-eslint/parser": "^8.50.0",
"@vercel/ncc": "^0.38.4", "@vercel/ncc": "^0.38.4",
"@vitest/coverage-v8": "^4.0.18",
"@vitest/eslint-plugin": "^1.6.9",
"eslint": "^9.39.2", "eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-plugin-jest": "^29.5.0",
"eslint-plugin-prettier": "^5.5.4", "eslint-plugin-prettier": "^5.5.4",
"jest": "^30.2.0",
"prettier": "^3.7.4", "prettier": "^3.7.4",
"ts-jest": "^29.4.6",
"ts-node": "^10.9.2", "ts-node": "^10.9.2",
"typescript": "^5.9.3" "typescript": "^5.9.3",
"vitest": "^4.0.18"
} }
} }

View File

@@ -14,6 +14,6 @@
"exclude": [ "exclude": [
"node_modules", "node_modules",
"**/*.test.ts", "**/*.test.ts",
"jest.config.ts" "vitest.config.ts"
] ]
} }

16
vitest.config.ts Normal file
View File

@@ -0,0 +1,16 @@
import {defineConfig} from 'vitest/config';
export default defineConfig({
test: {
clearMocks: true,
environment: 'node',
setupFiles: ['./__tests__/setup.unit.ts'],
include: ['**/*.test.ts'],
coverage: {
provider: 'v8',
reporter: ['clover'],
include: ['src/**/*.ts'],
exclude: ['src/**/main.ts']
}
}
});

4219
yarn.lock

File diff suppressed because it is too large Load Diff