diff --git a/.github/workflows/conformance-test.yaml b/.github/workflows/conformance-test.yaml index a3df27da0c21..1ef82b98026b 100644 --- a/.github/workflows/conformance-test.yaml +++ b/.github/workflows/conformance-test.yaml @@ -20,7 +20,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 14 + node-version: 22 - run: node --version - run: cd handwritten/storage && npm install - run: cd handwritten/storage && npm run conformance-test diff --git a/.github/workflows/conformance.yaml b/.github/workflows/conformance.yaml index 0532ef0a003b..6b775d3268d1 100644 --- a/.github/workflows/conformance.yaml +++ b/.github/workflows/conformance.yaml @@ -34,7 +34,7 @@ jobs: working-directory: handwritten/bigtable strategy: matrix: - node: [ 18, 20 ] + node: [ 20, 22 ] steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: diff --git a/.github/workflows/issues-no-repro.yaml b/.github/workflows/issues-no-repro.yaml index f65c54ea1dbd..258b6585bf4c 100644 --- a/.github/workflows/issues-no-repro.yaml +++ b/.github/workflows/issues-no-repro.yaml @@ -18,7 +18,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 18 + node-version: 22 - run: npm install working-directory: ./.github/scripts - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 diff --git a/.github/workflows/mandatory-conformance.yaml b/.github/workflows/mandatory-conformance.yaml index 6cd546a7dc72..e86bacd24a98 100644 --- a/.github/workflows/mandatory-conformance.yaml +++ b/.github/workflows/mandatory-conformance.yaml @@ -34,7 +34,7 @@ jobs: working-directory: handwritten/bigtable strategy: matrix: - node: [ 18, 20 ] + node: [ 20, 22 ] steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: diff --git a/.github/workflows/update-api-list.yaml b/.github/workflows/update-api-list.yaml index 52095638468a..0254d3035e26 100644 --- a/.github/workflows/update-api-list.yaml +++ b/.github/workflows/update-api-list.yaml @@ -15,7 +15,7 @@ jobs: persist-credentials: false - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: - node-version: 18 + node-version: 22 - run: npm install - run: npm run generate env: diff --git a/.pnpmfile.cjs b/.pnpmfile.cjs deleted file mode 100644 index 01999c7fb598..000000000000 --- a/.pnpmfile.cjs +++ /dev/null @@ -1,72 +0,0 @@ -module.exports = { - hooks: { - readPackage(pkg, context) { - // Check if this package has yargs as a dependency or devDependency - if (pkg.dependencies && pkg.dependencies.yargs) { - mutateYargs(pkg.dependencies, pkg.name, 'dependencies', context); - } - if (pkg.devDependencies && pkg.devDependencies.yargs) { - mutateYargs(pkg.devDependencies, pkg.name, 'devDependencies', context); - } - - // C8 broke Node 18 compatibility the week of July 20th 2026. - // Until we complete the upgrade, we need this workaround to enable CI - // to continue running. - // - // TODO: Remove this workaround after Node 22 upgrade. - if (pkg.dependencies && pkg.dependencies.c8) { - mutateC8(pkg.dependencies, pkg.name, 'dependencies', context); - } - if (pkg.devDependencies && pkg.devDependencies.c8) { - mutateC8(pkg.devDependencies, pkg.name, 'devDependencies', context); - } - - // Check if this package has brace-expansion as a dependency or devDependency - if (pkg.dependencies && pkg.dependencies['brace-expansion']) { - mutateBraceExpansion(pkg.dependencies, pkg.name, 'dependencies', context); - } - if (pkg.devDependencies && pkg.devDependencies['brace-expansion']) { - mutateBraceExpansion(pkg.devDependencies, pkg.name, 'devDependencies', context); - } - return pkg; - } - } -}; - -function mutateBraceExpansion(deps, pkgName, depType, context) { - const nodeVersion = process.version; - const majorVersion = parseInt(nodeVersion.replace('v', '').split('.')[0], 10); - - if (majorVersion === 18) { - if (deps['brace-expansion'] && deps['brace-expansion'].startsWith('^5.')) { - console.log(`[pnpmfile] Node.js version is 18. Overriding brace-expansion to 5.0.7 in ${pkgName}`); - deps['brace-expansion'] = '5.0.7'; - } - } -} - -function mutateYargs(deps, pkgName, depType, context) { - const nodeVersion = process.version; - const majorVersion = parseInt(nodeVersion.replace('v', '').split('.')[0], 10); - - if (majorVersion >= 24) { - console.log(`[pnpmfile] Node.js version is ${nodeVersion} (>= 24). Overriding yargs to 18.0.0 in ${pkgName}`); - deps.yargs = '18.0.0'; - } -} - -/** - * Override C8 dependency for versions of Node <=18 to enable CI to continue functioning. - * - * Otherwise, continue to use 10+ version. - */ -function mutateC8(deps, pkgName, depType, context) { - const nodeVersion = process.version; - const majorVersion = parseInt(nodeVersion.replace('v', '').split('.')[0], 10); - - if (majorVersion <= 18) { - console.log(`[pnpmfile] Node.js version is ${nodeVersion} (<= 18). Overriding c8 to ^9.1.0 in ${pkgName}`); - deps.c8 = '^9.1.0'; - } -} - diff --git a/ci/run_single_test.sh b/ci/run_single_test.sh index 662a1184f347..51c84bc0483d 100755 --- a/ci/run_single_test.sh +++ b/ci/run_single_test.sh @@ -40,15 +40,8 @@ if [ ${BUILD_TYPE} != "presubmit" ]; then fi # Install dependencies -# Normalize POSIX paths to Windows-compatible mixed paths (forward slashes) on Windows Git Bash -# so native Node.js and pnpm processes can resolve .pnpmfile.cjs without segmentation faults. -PNPMFILE_PATH="${PROJECT_ROOT}/.pnpmfile.cjs" -if command -v cygpath >/dev/null 2>&1; then - PNPMFILE_PATH=$(cygpath -m "${PNPMFILE_PATH}") -fi - -echo "pnpm install --ignore-scripts --engine-strict --prod --pnpmfile \"${PNPMFILE_PATH}\"; pnpm install --pnpmfile \"${PNPMFILE_PATH}\"" -pnpm install --ignore-scripts --engine-strict --prod --pnpmfile "${PNPMFILE_PATH}"; pnpm install --pnpmfile "${PNPMFILE_PATH}" +echo "pnpm install --ignore-scripts --engine-strict --prod; pnpm install" +pnpm install --ignore-scripts --engine-strict --prod; pnpm install retval=0 diff --git a/core/generator/gapic-generator-typescript/baselines-esm/duplicate_methods_test-esm/package.json b/core/generator/gapic-generator-typescript/baselines-esm/duplicate_methods_test-esm/package.json index 0ab004c938fe..999b16f2d6ac 100644 --- a/core/generator/gapic-generator-typescript/baselines-esm/duplicate_methods_test-esm/package.json +++ b/core/generator/gapic-generator-typescript/baselines-esm/duplicate_methods_test-esm/package.json @@ -98,6 +98,6 @@ "webpack-cli": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/core/packages/gapic-node-processing/templates/bootstrap-templates/package.json b/core/packages/gapic-node-processing/templates/bootstrap-templates/package.json index b4f734f77a57..e728738a2bf4 100644 --- a/core/packages/gapic-node-processing/templates/bootstrap-templates/package.json +++ b/core/packages/gapic-node-processing/templates/bootstrap-templates/package.json @@ -62,6 +62,6 @@ "typescript": "^5.8.2" }, "engines": { - "node": ">=18" + "node": ">=22" } } diff --git a/package.json b/package.json index 3cabdb748dac..6c7a910346df 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,6 @@ "prettier": "^3.3.3" }, "engines": { - "node": ">=18" + "node": ">=20" } }