Merge pull request #212 from crazy-max/esm

switch to ESM and update config/test wiring
This commit is contained in:
CrazyMax
2026-02-27 23:56:39 +01:00
committed by GitHub
17 changed files with 1308 additions and 3550 deletions

View File

@@ -6,6 +6,5 @@
"singleQuote": true, "singleQuote": true,
"trailingComma": "none", "trailingComma": "none",
"bracketSpacing": false, "bracketSpacing": false,
"arrowParens": "avoid", "arrowParens": "avoid"
"parser": "typescript"
} }

View File

@@ -1,8 +1,8 @@
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';
import * as context from '../src/context'; import * as context from '../src/context.js';
describe('getInputs', () => { describe('getInputs', () => {
beforeEach(() => { beforeEach(() => {
@@ -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 /

23
dist/index.js generated vendored

File diff suppressed because one or more lines are too long

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

3
dist/package.json generated vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

View File

@@ -1,57 +0,0 @@
/* eslint-disable @typescript-eslint/no-require-imports */
const {defineConfig, globalIgnores} = require('eslint/config');
const {fixupConfigRules, fixupPluginRules} = require('@eslint/compat');
const typescriptEslint = require('@typescript-eslint/eslint-plugin');
const jestPlugin = require('eslint-plugin-jest');
const prettier = require('eslint-plugin-prettier');
const globals = require('globals');
const tsParser = require('@typescript-eslint/parser');
const js = require('@eslint/js');
const {FlatCompat} = require('@eslint/eslintrc');
// __dirname and __filename exist natively in CommonJS
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
module.exports = defineConfig([
globalIgnores(['dist/**/*', 'coverage/**/*', 'node_modules/**/*']),
{
extends: fixupConfigRules(
compat.extends(
'eslint:recommended',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'plugin:jest/recommended',
'plugin:prettier/recommended'
)
),
plugins: {
'@typescript-eslint': fixupPluginRules(typescriptEslint),
jest: fixupPluginRules(jestPlugin),
prettier: fixupPluginRules(prettier)
},
languageOptions: {
globals: {
...globals.node,
...globals.jest
},
parser: tsParser,
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
'@typescript-eslint/no-require-imports': [
'error',
{
allowAsImport: true
}
]
}
}
]);

52
eslint.config.mjs Normal file
View File

@@ -0,0 +1,52 @@
import {defineConfig} from 'eslint/config';
import js from '@eslint/js';
import tseslint from '@typescript-eslint/eslint-plugin';
import vitest from '@vitest/eslint-plugin';
import globals from 'globals';
import eslintConfigPrettier from 'eslint-config-prettier/flat';
import eslintPluginPrettier from 'eslint-plugin-prettier';
export default defineConfig([
{
ignores: ['.yarn/**/*', 'coverage/**/*', 'dist/**/*']
},
js.configs.recommended,
...tseslint.configs['flat/recommended'],
eslintConfigPrettier,
{
languageOptions: {
globals: {
...globals.node
}
}
},
{
files: ['__tests__/**'],
...vitest.configs.recommended,
languageOptions: {
globals: {
...globals.node,
...vitest.environments.env.globals
}
},
rules: {
...vitest.configs.recommended.rules,
'vitest/no-conditional-expect': 'error',
'vitest/no-disabled-tests': 0
}
},
{
plugins: {
prettier: eslintPluginPrettier
},
rules: {
'prettier/prettier': 'error',
'@typescript-eslint/no-require-imports': [
'error',
{
allowAsImport: true
}
]
}
}
]);

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

@@ -1,16 +1,13 @@
{ {
"name": "docker-setup-docker", "name": "docker-setup-docker",
"description": "Set up Docker for use in GitHub Actions by downloading and installing a version of Docker CE", "description": "Set up Docker for use in GitHub Actions by downloading and installing a version of Docker CE",
"main": "lib/main.js", "type": "module",
"main": "src/main.ts",
"scripts": { "scripts": {
"build": "ncc build src/main.ts --source-map --minify --license licenses.txt", "build": "ncc build src/main.ts --source-map --minify --license licenses.txt",
"lint": "yarn run prettier && yarn run eslint", "lint": "eslint --max-warnings=0 .",
"format": "yarn run prettier:fix && yarn run eslint:fix", "format": "eslint --fix .",
"eslint": "eslint --max-warnings=0 .", "test": "vitest run",
"eslint:fix": "eslint --fix .",
"prettier": "prettier --check \"./**/*.ts\"",
"prettier:fix": "prettier --write \"./**/*.ts\"",
"test": "jest",
"all": "yarn run build && yarn run format && yarn test" "all": "yarn run build && yarn run format && yarn test"
}, },
"repository": { "repository": {
@@ -30,21 +27,19 @@
"@docker/actions-toolkit": "^0.71.0" "@docker/actions-toolkit": "^0.71.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/compat": "^2.0.0", "@eslint/js": "^9.39.3",
"@eslint/eslintrc": "^3.3.3", "@types/node": "^20.19.35",
"@eslint/js": "^9.39.2", "@typescript-eslint/eslint-plugin": "^8.56.1",
"@types/node": "^20.19.27", "@typescript-eslint/parser": "^8.56.1",
"@typescript-eslint/eslint-plugin": "^8.50.0",
"@typescript-eslint/parser": "^8.50.0",
"@vercel/ncc": "^0.38.4", "@vercel/ncc": "^0.38.4",
"eslint": "^9.39.2", "@vitest/coverage-v8": "^4.0.18",
"@vitest/eslint-plugin": "^1.6.9",
"eslint": "^9.39.3",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-plugin-jest": "^29.5.0", "eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-prettier": "^5.5.4", "globals": "^17.3.0",
"jest": "^30.2.0", "prettier": "^3.8.1",
"prettier": "^3.7.4", "typescript": "^5.9.3",
"ts-jest": "^29.4.6", "vitest": "^4.0.18"
"ts-node": "^10.9.2",
"typescript": "^5.9.3"
} }
} }

View File

@@ -3,8 +3,8 @@ import path from 'path';
import * as core from '@actions/core'; import * as core from '@actions/core';
import {parse} from 'csv-parse/sync'; import {parse} from 'csv-parse/sync';
import {InstallSource} from '@docker/actions-toolkit/lib/docker/install'; import {InstallSource} from '@docker/actions-toolkit/lib/docker/install.js';
import {Util} from '@docker/actions-toolkit/lib/util'; import {Util} from '@docker/actions-toolkit/lib/util.js';
export interface Inputs { export interface Inputs {
source: InstallSource; source: InstallSource;

View File

@@ -2,13 +2,13 @@ import * as crypto from 'crypto';
import path from 'path'; import path from 'path';
import * as core from '@actions/core'; import * as core from '@actions/core';
import * as actionsToolkit from '@docker/actions-toolkit'; import * as actionsToolkit from '@docker/actions-toolkit';
import {Install} from '@docker/actions-toolkit/lib/docker/install'; import {Install} from '@docker/actions-toolkit/lib/docker/install.js';
import {Docker} from '@docker/actions-toolkit/lib/docker/docker'; import {Docker} from '@docker/actions-toolkit/lib/docker/docker.js';
import {Install as RegclientInstall} from '@docker/actions-toolkit/lib/regclient/install'; import {Install as RegclientInstall} from '@docker/actions-toolkit/lib/regclient/install.js';
import {Install as UndockInstall} from '@docker/actions-toolkit/lib/undock/install'; import {Install as UndockInstall} from '@docker/actions-toolkit/lib/undock/install.js';
import * as context from './context'; import * as context from './context.js';
import * as stateHelper from './state-helper'; import * as stateHelper from './state-helper.js';
const regctlDefaultVersion = 'v0.8.3'; const regctlDefaultVersion = 'v0.8.3';
const undockDefaultVersion = 'v0.10.0'; const undockDefaultVersion = 'v0.10.0';

View File

@@ -1,8 +1,8 @@
{ {
"compilerOptions": { "compilerOptions": {
"module": "nodenext",
"moduleResolution": "nodenext",
"esModuleInterop": true, "esModuleInterop": true,
"target": "es6",
"module": "commonjs",
"newLine": "lf", "newLine": "lf",
"outDir": "./lib", "outDir": "./lib",
"rootDir": "./src", "rootDir": "./src",
@@ -11,9 +11,7 @@
"resolveJsonModule": true, "resolveJsonModule": true,
"useUnknownInCatchVariables": false, "useUnknownInCatchVariables": false,
}, },
"exclude": [ "include": [
"node_modules", "src/**/*.ts"
"**/*.test.ts",
"jest.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']
}
}
});

4563
yarn.lock

File diff suppressed because it is too large Load Diff