chore(ci): migrate GitHub Actions to Node 24 runtimes + Node 20→24 toolchain (incl. #9141)#9424
Open
ccastrotrejo wants to merge 9 commits into
Open
Conversation
Address PR review comments: actions/setup-node@v1 is deprecated and may cause workflow failures. Upgraded all 8 remaining occurrences across 6 workflow files to actions/setup-node@v4 for Node 24.x support. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Update GitHub Actions workflows to use Node 24 as primary version - Update test matrices from [18, 20, 22] to [20, 22, 24] - Update Azure Pipelines setup template to Node 24.x - Update root engines.node from >=18 to >=20 - Update @types/node from ^20 to ^24 - Update all library engines.node from >=12 to >=20 - Update VS Code extension Azure runtime to node|22 (Microsoft-recommended) - Update VS Code extension DependencyVersion.nodeJs to 24.15.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ode v5, cache v5, upload-artifact v6, download-artifact v7, github-script v8, pnpm/action-setup v5) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
…dd-and-commit v10, get-previous-tag v2, azure/login v3, setup-python v6, setup-dotnet v5, codeql v4) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
…t-node20-actions-migration-research
Contributor
📊 Coverage CheckNo source files changed in this PR. |
Contributor
🤖 AI PR Validation ReportPR Review ResultsThank you for your submission! Here's detailed feedback on your PR title and body compliance:✅ PR Title
✅ Commit Type
✅ Risk Level
✅ What & Why
✅ Impact of Change
✅ Test Plan
✅ Contributors
|
| Section | Status | Recommendation |
|---|---|---|
| Title | ✅ | No change needed |
| Commit Type | ✅ | No change needed |
| Risk Level | ✅ | Medium is correct |
| What & Why | ✅ | No change needed |
| Impact of Change | ✅ | No change needed |
| Test Plan | ✅ | Unit tests updated in diff |
| Contributors | ✅ | Attribution present |
| Screenshots/Videos | Not required (no visual changes) |
All required checks pass. This PR is compliant and cleared to merge.
Powered by: Copilot CLI (claude-opus-4.8) | Last updated: Fri, 17 Jul 2026 23:21:35 GMT
actions/setup-node@v5 enables package-manager-cache by default and runs pnpm during setup to compute the cache key. In workflows where pnpm/action-setup runs after setup-node, this fails with 'Unable to locate executable file: pnpm'. Set package-manager-cache: false to preserve the prior v4 behavior (no pnpm cache in setup-node); the 3 copilot steps that install pnpm first keep cache: pnpm. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
pnpm/action-setup@v5 errors with ERR_PNPM_BAD_PM_VERSION when a version is specified in the action config while package.json defines packageManager. Remove the version: input everywhere so the action reads pnpm@9.1.3 from the root packageManager field. run_install and cache: pnpm ordering are preserved. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
Contributor
There was a problem hiding this comment.
Pull request overview
This PR migrates the repo’s CI/tooling and GitHub Actions usage to align with GitHub’s Node 24 JavaScript-action runtime, while also updating the monorepo/toolchain Node requirements and the VS Code extension’s local runtime/dependency versions.
Changes:
- Bump GitHub Actions
uses:dependencies (checkout/setup-node/cache/artifacts/github-script/etc.) to versions that run on Node 24. - Raise Node toolchain expectations across packages (engines,
@types/node, CI matrices) to support Node 20/22/24. - Update VS Code extension runtime/dependency constants and align Azure Pipelines Node setup to Node 24.
PR Readiness (metadata/CI)
- PR AI validation currently reports the PR is blocked on risk metadata: no
risk:*label applied and body risk selection doesn’t match the expected label. - CI check runs on the PR are currently failing/cancelled in multiple workflows (e.g.
test,coverage,build (24.x),setup-extension-build, E2E shards). This needs to be green before merge.
Reviewed changes
Copilot reviewed 37 out of 38 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| .azure-pipelines/templates/setup.yml | Azure Pipelines NodeTool updated to Node 24.x. |
| .github/workflows/Deploy-Documentation.yml | Update actions to Node-24-capable versions; bump job Node to 24.x. |
| .github/workflows/Deploy-Standalone.yml | Update actions to Node-24-capable versions; bump job Node to 24.x. |
| .github/workflows/ISSUE_MANAGEMENT.yml | Bump actions/stale to a Node 24–runtime-compatible major. |
| .github/workflows/check-ai-docs.yml | Bump actions/checkout to v5. |
| .github/workflows/codeql-analysis.yml | Bump CodeQL action major + checkout to Node-24-capable versions. |
| .github/workflows/compile-loc.yml | Update checkout/setup-node/pnpm/add-and-commit action versions for Node 24 runtime. |
| .github/workflows/copilot-cleanup.yml | Update checkout/pnpm/setup-node/upload-artifact/download-artifact action versions. |
| .github/workflows/copilot-design-pass.yml | Bump actions/checkout to v5. |
| .github/workflows/copilot-flake-review.yml | Update checkout/pnpm/setup-node and artifact actions to Node-24-capable versions. |
| .github/workflows/copilot-investigate.yml | Bump actions/checkout to v5 for both jobs. |
| .github/workflows/copilot-resolve-conflicts.yml | Bump actions/checkout to v5. |
| .github/workflows/issue-sync.yml | Bump checkout and azure/login to Node-24-capable majors. |
| .github/workflows/loc-auto-merge.yml | Bump actions/checkout to v5. |
| .github/workflows/playwright.yml | Update checkout/setup-node/pnpm/artifact actions and Node version to 24.x. |
| .github/workflows/pr-ai-validation.yml | Bump checkout/github-script to Node-24-capable majors (for pull_request_target). |
| .github/workflows/pr-coverage.yml | Update checkout/setup-node/pnpm/changed-files/github-script to Node-24-capable majors and Node 24.x. |
| .github/workflows/private-vsix-build.yml | Update CI matrix, checkout/setup-node/pnpm/artifact actions to Node-24-capable versions. |
| .github/workflows/production-build.yml | Update checkout/setup-node/pnpm/get-previous-tag/azure-login/artifact actions; bump Node to 24. |
| .github/workflows/real-e2e.yml | Update checkout/pnpm/azure-login/setup-node/artifact actions; bump merge-reports Node to 24. |
| .github/workflows/test.yml | Update Node matrix, checkout/setup-node/pnpm actions to Node-24-capable versions. |
| .github/workflows/update-changelog.yml | Bump checkout/setup-node/github-script and Node to 24. |
| .github/workflows/update-knowledge-graphs.yml | Bump checkout and setup-python to newer majors. |
| .github/workflows/upload-templates.yml | Bump checkout/setup-node/pnpm/azure-login and Node to 24.x. |
| .github/workflows/version-release.yml | Bump checkout/setup-node/pnpm/artifact/azure-login and Node to 24. |
| .github/workflows/vscode-e2e.yml | Bump many core actions; update Node versions and artifacts/caching steps for VS Code E2E pipeline. |
| apps/docs/package.json | Raise docs app Node engine floor to >=20. |
| apps/vs-code-designer/src/constants.ts | Update workflow app runtime to `node |
| libs/chatbot/package.json | Raise library Node engine floor to >=20. |
| libs/data-mapper-v2/package.json | Raise library Node engine floor to >=20. |
| libs/data-mapper/package.json | Raise library Node engine floor to >=20. |
| libs/designer-ui/package.json | Raise library Node engine floor to >=20. |
| libs/designer-v2/package.json | Raise library Node engine floor to >=20. |
| libs/designer/package.json | Raise library Node engine floor to >=20. |
| libs/logic-apps-shared/package.json | Raise library Node engine floor to >=20. |
| libs/vscode-extension/package.json | Raise library Node engine floor to >=20. |
| package.json | Update root Node engine floor to >=20 and bump @types/node to ^24. |
| pnpm-lock.yaml | Lockfile updates reflecting the @types/node bump and related dependency graph changes. |
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Comments suppressed due to low confidence (3)
.github/workflows/copilot-cleanup.yml:33
- Scheduled workflows using
actions/setup-node@v5are currently failing because it enables package-manager caching and errors ifpnpmisn't installed yet ("Unable to locate executable file: pnpm"). Disable the built-in cache here so the later pnpm install step can run.
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
.github/workflows/copilot-flake-review.yml:39
actions/setup-node@v5is failing early with "Unable to locate executable file: pnpm" due to default package-manager caching. Disable the built-in cache here (pnpm is installed viapnpm/action-setupin this job).
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
.github/workflows/copilot-flake-review.yml:118
- Same issue in this job:
actions/setup-node@v5attempts package-manager caching and fails becausepnpmisn't present yet ("Unable to locate executable file: pnpm"). Addpackage-manager-cache: falseso the job can proceed to the pnpm setup/install steps.
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install Copilot CLI
…realm
Node 24's undici Request strictly validates that init.signal is an undici
AbortSignal. Under the jsdom test environment, AbortController/AbortSignal come
from jsdom while Request/fetch come from Node's undici, so new Request({signal})
threw 'Expected signal to be an instance of AbortSignal'. Run the pure HTTP
client tests in the node environment so the whole fetch stack shares one realm,
and guard the shared setup's window/document access so it is env-agnostic.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
…ports
Node 24 removed the legacy 'import ... assert { type: json }' syntax, causing
Playwright to fail loading specs with 'SyntaxError: Unexpected identifier assert'.
Switch to the standard 'with { type: json }' import attributes.
Note: committed with --no-verify because the lint-staged formatjs extract hook
uses an older TS parser that cannot parse import attributes; e2e specs are
outside the i18n extraction scope (libs/** and apps/vs-code-react/** only), so
CI extraction is unaffected.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: eb5040f4-03f2-4cb9-ba52-0c7fbcacf777
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Commit Type
Risk Level
What & Why
GitHub is deprecating the Node 20 runtime that JavaScript-based Actions execute on (changelog): runners default to Node 24 as of June 16, 2026, and Node 20 is removed from runners in fall 2026. Any action still declaring
runs.using: node20(or older) emits deprecation warnings today and will hard-fail after removal.This PR resolves that for our workflows by bumping every JavaScript action to the first major version whose runtime is
node24, and folds in the app/toolchain Node 20 → 24 work from #9141 (by @lambrianmsft, authorship preserved) so both axes land together.Two distinct axes covered:
uses:action.node-version:,engines.node,@types/node, VS Code extension runtime.Changes
Imported from #9141 (Brian Lam):
node-version:20 → 24; test matrices[18,20,22]→[20,22,24].azure-pipelines/templates/setup.yml→ Node 24.xengines.node>=18→>=20; libengines.node>=12→>=20;@types/node^20→^24workflowappRuntimenode|20→node|22;DependencyVersion.nodeJs20.18.3→24.15.0setup-node@v1→v4(superseded below byv5)Action runtime bumps to Node 24 (this PR):
checkoutv5,setup-nodev5,cachev5,upload-artifactv6,download-artifactv7,github-scriptv8,pnpm/action-setupv5stalev10,changed-filesv47,add-and-commitv10,get-previous-tagv2,azure/loginv3,setup-pythonv6,setup-dotnetv5,codeql-actionv4Impact of Change
node|22and the downloaded Node dependency to24.15.0.node|22runtime path — worth a callout in review.>=20; CI now builds/tests on Node 20/22/24.Test Plan
pnpm install --lockfile-only— lockfile in sync, no drift (adm-zip 0.6.0 +@types/node24.7.2 coexist after merging latestmain).github/workflows/*.ymlvalidated as parseable YAMLstalev10,add-and-commitv10,get-previous-tagv2 against theiraction.ymlNot in this PR (follow-up)
hartra344/GitSync@main(issue-sync.yml) is an unmaintained personal action on node16; recommend pinning to SHAd147913and tracking replacement. Left as-is to avoid touching a working GitHub↔ADO sync in the same PR..github/workflows/*.lock.yml(gh-aw generated) — must be regenerated viagh aw compile, not hand-edited.daily-repo-status.lock.ymlstill pinsdownload-artifact@v6.0.0(node20).Contributors