Skip to content

Node 24 migration for AppCenterDistributeV3#21972

Open
yehor-obraztsov wants to merge 3 commits intomasterfrom
users/v-yobraztsov/node24-appcenter-distribute-v3
Open

Node 24 migration for AppCenterDistributeV3#21972
yehor-obraztsov wants to merge 3 commits intomasterfrom
users/v-yobraztsov/node24-appcenter-distribute-v3

Conversation

@yehor-obraztsov
Copy link
Copy Markdown

@yehor-obraztsov yehor-obraztsov commented Apr 8, 2026

Context

Migrate AppCenterDistributeV3 task from Node.js 20 to Node.js 24 as part of the org-wide Node 24 migration effort.


Task Name

AppCenterDistributeV3


Description

  • Added Node24 execution handler alongside existing Node20_1 in task.json
  • Updated dependencies per migration guide: typescript ^5.7.2, @types/node ^24.10.0, azure-pipelines-task-lib ^5.2.6
  • Added DNS (ipv4first) and net (autoSelectFamily) workarounds for Node 24 compatibility (pattern from AzureCLIV1, DotNetCoreCLIV2)
  • Registered task in Node24_overwrite config in make-options.json
  • Task version bumped to 3.273.1
  • Fixed CI validation: added Node24_overwrite to excludedKeys in ci/before-build-check-tasks.js — this config uses inplace mode (mergeToBase: true) and does not generate versionmap files

CI Pipelines:


Risk Assessment (Low / Medium / High)

Low — Standard Node 24 migration following established patterns. Node20_1 handler retained for backward compatibility. No functional logic changes. CI fix is minimal (one line, adding config name to exclusion list).


Change Behind Feature Flag (Yes / No)

No — Using Node24_overwrite (inplace mode). The agent automatically selects the highest supported handler, so older agents will continue using Node20_1.


Tech Design / Approach

  • Followed the recommended Inplace Mode approach from the Node 24 migration PPT
  • Built using node make.js build --task AppCenterDistributeV3 --configs Node24_overwrite --bumpBaseTask
  • DNS/net workaround is a known requirement for tasks making HTTP calls under Node 24 (IPv6/Happy Eyeballs breaking changes)
  • CI fix: Node24_overwrite uses mergeToBase: true and does not produce _generated/*.versionmap.txt, so it must be excluded from versionmap validation

Documentation Changes Required (Yes/No)

No


Unit Tests Added or Updated (Yes / No)

No


Additional Testing Performed

  • Local build: node make.js build --task AppCenterDistributeV3 --configs Node24_overwrite --bumpBaseTask — successful
  • Local tests: node make.js test --task AppCenterDistributeV3 — 30 passing, 1 flaky timeout (same failure on master branch)
  • TypeScript compilation: clean, no type errors
  • Baseline comparison: ran tests on master to confirm the 1 failing test is pre-existing
  • CI pipelines (Windows, macOS, Linux): all passing

Logging Added/Updated (Yes/No)

Yes — Debug logging added for DNS and net workaround activation (via tl.debug).


Telemetry Added/Updated (Yes/No)

No — No new telemetry needed for a runtime migration.


Rollback Scenario and Process (Yes/No)

Yes — Task Override per TSG. Agent will fall back to Node20_1 handler if Node24 is unavailable.


Dependency Impact Assessed and Regression Tested (Yes/No)

Yes — All updated packages (azure-pipelines-task-lib ^5.2.6, typescript ^5.7.2, @types/node ^24.10.0) are the standard versions specified by BuildConfigGen Node24 overrides. No breaking API changes in task-lib 5.x for this task's usage.


Checklist

  • Related issue linked (if applicable)
  • Task version was bumped — see versioning guide
  • Verified the task behaves as expected

@yehor-obraztsov yehor-obraztsov self-assigned this Apr 8, 2026
@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
3 pipeline(s) require an authorized user to comment /azp run to run.

@yehor-obraztsov
Copy link
Copy Markdown
Author

@yehor-obraztsov please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree company="Microsoft"

3 similar comments
@yehor-obraztsov
Copy link
Copy Markdown
Author

@yehor-obraztsov please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree company="Microsoft"

@yehor-obraztsov
Copy link
Copy Markdown
Author

@yehor-obraztsov please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree company="Microsoft"

@yehor-obraztsov
Copy link
Copy Markdown
Author

@yehor-obraztsov please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.

@microsoft-github-policy-service agree [company="{your company}"]

Options:

  • (default - no company specified) I have sole ownership of intellectual property rights to my Submissions and I am not making Submissions in the course of work for my employer.
@microsoft-github-policy-service agree
  • (when company given) I am making Submissions in the course of work for my employer (or my employer has intellectual property rights in my Submissions by contract or applicable law). I have permission from my employer to make Submissions and enter into this Agreement on behalf of my employer. By signing below, the defined term “You” includes me and my employer.
@microsoft-github-policy-service agree company="Microsoft"

Contributor License Agreement

@microsoft-github-policy-service agree company="Microsoft"

@yehor-obraztsov
Copy link
Copy Markdown
Author

Azure Pipelines:
3 pipeline(s) require an authorized user to comment /azp run to run.

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
3 pipeline(s) require an authorized user to comment /azp run to run.

@yehor-obraztsov
Copy link
Copy Markdown
Author

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
Successfully started running 3 pipeline(s).

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
3 pipeline(s) require an authorized user to comment /azp run to run.

@yehor-obraztsov
Copy link
Copy Markdown
Author

/azp run

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
Successfully started running 3 pipeline(s).

@yehor-obraztsov yehor-obraztsov marked this pull request as ready for review April 8, 2026 11:58
@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
3 pipeline(s) require an authorized user to comment /azp run to run.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants