Convert project to ESM and update dependencies (#854)

- Switch to esbuild for bundling
- Update npm dependency version
- Add require header for compat with older JS libs
This commit is contained in:
Daz DeBoer
2026-02-10 15:30:49 -07:00
committed by GitHub
parent d9d9739be8
commit 2b9247147a
8 changed files with 901 additions and 446 deletions

View File

@@ -1,3 +1,4 @@
# Configuration file for asdf version manager # Configuration file for asdf version manager
nodejs 24.3.0 nodejs 24.3.0
gradle 8.14.2 gradle 8.14.2
java liberica-11.0.26+9

6
build
View File

@@ -2,12 +2,6 @@
cd sources cd sources
if [[ -f ~/.gradle/develocity/keys.properties ]]; then
export NODE_OPTIONS='-r @gradle-tech/develocity-agent/preload'
export DEVELOCITY_URL=https://ge.solutions-team.gradle.com
export DEVELOCITY_ACCESS_KEY=$(paste -sd ';' ~/.gradle/develocity/keys.properties)
fi
case "$1" in case "$1" in
all) all)
npm run all npm run all

View File

@@ -1,12 +1,16 @@
const develocityReporter = require.resolve('@gradle-tech/develocity-agent/jest-reporter'); import {createRequire} from 'node:module'
module.exports = { const require = createRequire(import.meta.url)
const develocityReporter = require.resolve('@gradle-tech/develocity-agent/jest-reporter')
export default {
clearMocks: true, clearMocks: true,
moduleFileExtensions: ['js', 'ts', 'json'], moduleFileExtensions: ['js', 'ts', 'json'],
testEnvironment: 'node', testEnvironment: 'node',
testMatch: ['**/*.test.ts'], testMatch: ['**/*.test.ts'],
extensionsToTreatAsEsm: ['.ts'],
transform: { transform: {
'^.+\\.ts$': 'ts-jest' '^.+\\.ts$': ['ts-jest', { useESM: true }]
}, },
reporters: [ reporters: [
'default', 'default',

1271
sources/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,21 +2,22 @@
"name": "gradle-actions", "name": "gradle-actions",
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"type": "module",
"description": "Execute Gradle Build", "description": "Execute Gradle Build",
"scripts": { "scripts": {
"postinstall": "patch-package", "postinstall": "patch-package",
"prettier-write": "prettier --write 'src/**/*.ts'", "prettier-write": "prettier --write 'src/**/*.ts'",
"prettier-check": "prettier --check 'src/**/*.ts'", "prettier-check": "prettier --check 'src/**/*.ts'",
"lint": "eslint 'src/**/*.ts'", "lint": "eslint 'src/**/*.ts'",
"compile-dependency-submission-main": "ncc build src/actions/dependency-submission/main.ts --out dist/dependency-submission/main --source-map --no-source-map-register", "compile-dependency-submission-main": "esbuild src/actions/dependency-submission/main.ts --bundle --platform=node --target=node24 --format=esm --banner:js=\"import {createRequire} from 'module';const require=createRequire(import.meta.url);\" --outfile=dist/dependency-submission/main/index.js --sourcemap --minify",
"compile-dependency-submission-post": "ncc build src/actions/dependency-submission/post.ts --out dist/dependency-submission/post --source-map --no-source-map-register", "compile-dependency-submission-post": "esbuild src/actions/dependency-submission/post.ts --bundle --platform=node --target=node24 --format=esm --banner:js=\"import {createRequire} from 'module';const require=createRequire(import.meta.url);\" --outfile=dist/dependency-submission/post/index.js --sourcemap --minify",
"compile-setup-gradle-main": "ncc build src/actions/setup-gradle/main.ts --out dist/setup-gradle/main --source-map --no-source-map-register", "compile-setup-gradle-main": "esbuild src/actions/setup-gradle/main.ts --bundle --platform=node --target=node24 --format=esm --banner:js=\"import {createRequire} from 'module';const require=createRequire(import.meta.url);\" --outfile=dist/setup-gradle/main/index.js --sourcemap --minify",
"compile-setup-gradle-post": "ncc build src/actions/setup-gradle/post.ts --out dist/setup-gradle/post --source-map --no-source-map-register", "compile-setup-gradle-post": "esbuild src/actions/setup-gradle/post.ts --bundle --platform=node --target=node24 --format=esm --banner:js=\"import {createRequire} from 'module';const require=createRequire(import.meta.url);\" --outfile=dist/setup-gradle/post/index.js --sourcemap --minify",
"compile-wrapper-validation-main": "ncc build src/actions/wrapper-validation/main.ts --out dist/wrapper-validation/main --source-map --no-source-map-register", "compile-wrapper-validation-main": "esbuild src/actions/wrapper-validation/main.ts --bundle --platform=node --target=node24 --format=esm --banner:js=\"import {createRequire} from 'module';const require=createRequire(import.meta.url);\" --outfile=dist/wrapper-validation/main/index.js --sourcemap --minify",
"compile": "npm-run-all --parallel compile-*", "compile": "npm-run-all --parallel compile-*",
"check": "npm-run-all --parallel prettier-check lint", "check": "npm-run-all --parallel prettier-check lint",
"format": "npm-run-all --parallel prettier-write lint", "format": "npm-run-all --parallel prettier-write lint",
"test": "jest", "test": "NODE_OPTIONS=--experimental-vm-modules jest",
"build": "npm run format && npm run compile", "build": "npm run format && npm run compile",
"all": "npm run build && npm test" "all": "npm run build && npm test"
}, },
@@ -35,38 +36,38 @@
"node": ">=24.0.0" "node": ">=24.0.0"
}, },
"dependencies": { "dependencies": {
"@actions/artifact": "4.0.0", "@actions/artifact": "6.1.0",
"@actions/cache": "4.0.5", "@actions/cache": "4.0.5",
"@actions/core": "2.0.2", "@actions/core": "3.0.0",
"@actions/exec": "2.0.0", "@actions/exec": "3.0.0",
"@actions/github": "7.0.0", "@actions/github": "9.0.0",
"@actions/glob": "0.5.0", "@actions/glob": "0.6.1",
"@actions/http-client": "3.0.1", "@actions/http-client": "4.0.0",
"@actions/tool-cache": "3.0.0", "@actions/tool-cache": "4.0.0",
"@octokit/webhooks-types": "7.6.1", "@octokit/webhooks-types": "7.6.1",
"cheerio": "1.1.2", "cheerio": "1.2.0",
"semver": "7.7.3", "semver": "7.7.4",
"string-argv": "0.3.2", "string-argv": "0.3.2",
"unhomoglyph": "1.0.6", "unhomoglyph": "1.0.6",
"which": "6.0.0" "which": "6.0.1"
}, },
"devDependencies": { "devDependencies": {
"@jest/globals": "30.2.0", "@jest/globals": "30.2.0",
"@types/jest": "30.0.0", "@types/jest": "30.0.0",
"@types/node": "25.0.9", "@types/node": "25.2.3",
"@types/semver": "7.7.1", "@types/semver": "7.7.1",
"@types/unzipper": "0.10.11", "@types/unzipper": "0.10.11",
"@types/which": "3.0.4", "@types/which": "3.0.4",
"@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@vercel/ncc": "0.38.4",
"dedent": "1.7.1", "dedent": "1.7.1",
"esbuild": "0.27.3",
"eslint": "9.24.0", "eslint": "9.24.0",
"globals": "17.0.0", "globals": "17.3.0",
"jest": "30.2.0", "jest": "30.2.0",
"nock": "15.0.0", "nock": "15.0.0",
"npm-run-all": "4.1.5", "npm-run-all": "4.1.5",
"patch-package": "8.0.1", "patch-package": "8.0.1",
"prettier": "3.8.0", "prettier": "3.8.1",
"ts-jest": "29.4.6", "ts-jest": "29.4.6",
"typescript": "5.9.3" "typescript": "5.9.3"
}, },

View File

@@ -1,9 +1,11 @@
import path from 'path' import path from 'path'
import fs from 'fs' import fs from 'fs'
import {fileURLToPath} from 'url'
export function readResourceFileAsString(...paths: string[]): string { export function readResourceFileAsString(...paths: string[]): string {
// Resolving relative to __dirname will allow node to find the resource at runtime // Resolving relative to __dirname will allow node to find the resource at runtime
const absolutePath = path.resolve(__dirname, '..', '..', '..', 'sources', 'src', 'resources', ...paths) const moduleDir = path.dirname(fileURLToPath(import.meta.url))
const absolutePath = path.resolve(moduleDir, '..', '..', '..', 'sources', 'src', 'resources', ...paths)
return fs.readFileSync(absolutePath, 'utf8') return fs.readFileSync(absolutePath, 'utf8')
} }

View File

@@ -2,11 +2,11 @@ import * as core from '@actions/core'
import * as github from '@actions/github' import * as github from '@actions/github'
import * as cache from '@actions/cache' import * as cache from '@actions/cache'
import * as deprecator from './deprecation-collector' import * as deprecator from './deprecation-collector'
import {SUMMARY_ENV_VAR} from '@actions/core/lib/summary'
import path from 'path' import * as path from 'path'
const ACTION_ID_VAR = 'GRADLE_ACTION_ID' const ACTION_ID_VAR = 'GRADLE_ACTION_ID'
const SUMMARY_ENV_VAR = 'GITHUB_STEP_SUMMARY'
export const ACTION_METADATA_DIR = '.setup-gradle' export const ACTION_METADATA_DIR = '.setup-gradle'

View File

@@ -3,7 +3,7 @@
/* Basic Options */ /* Basic Options */
"incremental": false, /* Enable incremental compilation */ "incremental": false, /* Enable incremental compilation */
"target": "es2021", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "target": "es2021", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ "module": "ESNext", /* Emit ESM so source aligns with package "type": "module". */
// "allowJs": true, /* Allow javascript files to be compiled. */ // "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */ // "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
@@ -38,7 +38,7 @@
"noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
/* Module Resolution Options */ /* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "moduleResolution": "bundler", /* Use bundler-friendly resolution to avoid requiring file extensions in TS imports. */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */