Skip to content

Migrate ToolTask and Al task to TaskEnvironment API#13423

Merged
OvesN merged 20 commits into
dotnet:mainfrom
OvesN:dev/veronikao/migrate-Al-task-to-TaskEnvironment-API
Apr 7, 2026
Merged

Migrate ToolTask and Al task to TaskEnvironment API#13423
OvesN merged 20 commits into
dotnet:mainfrom
OvesN:dev/veronikao/migrate-Al-task-to-TaskEnvironment-API

Conversation

@OvesN

@OvesN OvesN commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

Fixes #13410
Fixes #13447

Context

The ToolTask and AL (Assembly Linker) task were migrated to use TaskEnvironment.

Changes Made

ToolTask.cs

  • Implemented IMultiThreadableTask — all ToolTask children now inherit TaskEnvironment with a default MultiProcessTaskEnvironmentDriver.
  • GetProcessStartInfo — uses TaskEnvironment.GetProcessStartInfo() to create the ProcessStartInfo in both
    multi-process and multithreaded modes. Applies GetWorkingDirectory() override (absolutized via
    TaskEnvironment.GetAbsolutePath()) and task-level EnvironmentVariables/EnvironmentOverride on top.
  • Environment.GetEnvironmentVariable was replaced with the TaskEnvironment API call.
  • Routed file existence checks and path resolution through TaskEnvironment.GetAbsolutePath().

Al.cs

  • Environment.GetEnvironmentVariable was replaced with the TaskEnvironment API call.
  • Routed file existence checks and path resolution through TaskEnvironment.GetAbsolutePath().

Testing

New unit tests in Al_Tests.cs and ToolTask_Tests.cs

Copilot AI review requested due to automatic review settings March 20, 2026 13:25
@OvesN OvesN requested review from AR-May and JanProvaznik March 20, 2026 13:26

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the AL built-in task to the TaskEnvironment API to support thread-safe execution in multithreaded builds, and introduces a reusable ToolTask helper for propagating TaskEnvironment working directory/environment to spawned tool processes.

Changes:

  • Updated AL to implement IMultiThreadableTask, use TaskEnvironment for env var/path resolution, and override process start info creation to flow the virtualized environment/working directory.
  • Refactored ToolTask process start info creation and added GetProcessStartInfoMultiThreaded helper to apply TaskEnvironment settings to child processes.
  • Added/updated unit tests validating AL and ToolTask propagation behavior.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
src/Utilities/ToolTask.cs Extracts base PSI creation and adds a multithreaded helper to apply TaskEnvironment env/working directory.
src/Utilities.UnitTests/ToolTask_Tests.cs Adds coverage for GetProcessStartInfoMultiThreaded propagation and override precedence.
src/Tasks/Al.cs Makes AL multithreadable and routes env/path/process creation through TaskEnvironment.
src/Tasks.UnitTests/Al_Tests.cs Updates existing tests to set TaskEnvironment and adds new tests for tool path + working directory propagation.

Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities.UnitTests/ToolTask_Tests.cs
Comment thread src/Utilities.UnitTests/ToolTask_Tests.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Tasks/Al.cs
Comment thread src/Tasks/Al.cs
Comment thread src/Tasks/Al.cs
Comment thread src/Tasks/Al.cs Outdated

@AR-May AR-May left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, provided that @rainersigwald approves the change of public API in ToolTask. Just one small refactoring idea from me.

Comment thread src/Utilities/ToolTask.cs Outdated

@JanProvaznik JanProvaznik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

extra file slipped in, I deleted it
lgtm let's wait for confirming with Rainer this change to ToolTask is acceptable

@AR-May AR-May left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like there is a bug in mt route, @OvesN can you please take a look?

Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs
@OvesN OvesN changed the title Migrate Al task to TaskEnvironment API Migrate ToolTask and Al task to TaskEnvironment API Mar 26, 2026
@OvesN OvesN marked this pull request as draft March 26, 2026 15:52
OvesN and others added 3 commits March 26, 2026 16:54
The test relied on FileAttributes.ReadOnly to force File.Delete to throw,
but this is not cross-platform - Unix read-only attributes don't prevent deletion.
@OvesN OvesN marked this pull request as ready for review March 27, 2026 16:22
@OvesN OvesN requested a review from rainersigwald March 27, 2026 17:28
rainersigwald
rainersigwald previously approved these changes Mar 27, 2026
Comment thread src/Utilities/ToolTask.cs
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Utilities/ToolTask.cs Outdated
Comment thread src/Tasks.UnitTests/Al_Tests.cs Outdated
github-actions Bot pushed a commit to IntelliTect/Multitool that referenced this pull request Jun 29, 2026
Updated [Microsoft.Build](https://github.com/dotnet/msbuild) from 18.6.3
to 18.7.1.

<details>
<summary>Release notes</summary>

_Sourced from [Microsoft.Build's
releases](https://github.com/dotnet/msbuild/releases)._

## 18.7.1

## What's Changed
* Fix TraceEngine file contention deadlock in multithreaded mode by
@​JanProvaznik in dotnet/msbuild#13446
* Remove duplicate test cases in MultithreadableTaskAnalyzer by
@​Youssef1313 in dotnet/msbuild#13483
* Ensure ThreadSafeTaskAnalyzer.Tests is considered as a unit test
project by @​Youssef1313 in dotnet/msbuild#13481
* Fix MSBuildTask0002 analyzer warnings in already-migrated tasks by
@​JanProvaznik in dotnet/msbuild#13466
* Fix race conditions in task host path resolution by @​AR-May in
dotnet/msbuild#13485
* Migrate ToolTask and Al task to TaskEnvironment API by @​OvesN in
dotnet/msbuild#13423
* Bump main to 18.7, add vs18.6 to merge flow by @​MichalPavlik in
dotnet/msbuild#13472
* Avoid allocations in GetHashCode implementations by @​DustinCampbell
in dotnet/msbuild#13475
* Add PATs rotation to agentic workflow(s) by @​JanKrivanek in
dotnet/msbuild#13496
* Fix ASP.NET WebSite projects to copy netstandard.dll facade when
required by @​JanProvaznik in
dotnet/msbuild#13058
* Migrate AspNetCompiler to TaskEnvironment API by @​OvesN in
dotnet/msbuild#13424
* Add review workflow by @​JanKrivanek in
dotnet/msbuild#13503
* Strengthen reviewer skill: add step-back analysis dimensions by
@​JanProvaznik in dotnet/msbuild#13504
* Add 'Request Speedometer Perf Run' to VS experimental insertion build
policies by @​Copilot in dotnet/msbuild#13505
* Remove duplicate @ prefix from issueAuthor in GitOps by @​akoeplinger
in dotnet/msbuild#13492
* Improve review aw by @​JanKrivanek in
dotnet/msbuild#13510
* Migrates unit tests to use RoslynCodeTaskFactory to enable running
tests under .NET Core by @​jankratochvilcz in
dotnet/msbuild#13500
* Fix cross-AppDomain TaskItem modifier cache regression by
@​DustinCampbell in dotnet/msbuild#13493
* Discourage review agent from approving PRs by @​JanKrivanek in
dotnet/msbuild#13512
* Stop trying to deploy ValueTuple by @​rainersigwald in
dotnet/msbuild#13507
* Ad-hoc re-sign bootstrap dotnet on macOS to prevent SIGKILL by
@​jankratochvilcz in dotnet/msbuild#13513
* RoslynCodeTaskFactory: Log MSB3753 when task class does not implement
ITask by @​jankratochvilcz in
dotnet/msbuild#13517
* Update gh-aw (upon mcp policy changes) by @​JanKrivanek in
dotnet/msbuild#13526
* Eliminate XmlChildNodes allocations in GetXmlNodeInnerContents by
@​nareshjo in dotnet/msbuild#13509
* Fix telemetry allocation regression: per-engine collector ownership by
@​JanProvaznik in dotnet/msbuild#13516
* Migrate to xunit.v3 by @​Youssef1313 in
dotnet/msbuild#13482
* Fix stray brace in HandleBuildCancel trace string causing MSB1025 by
@​Copilot in dotnet/msbuild#13535
* Bumping to 10.0.4 runtime packages by @​MichalPavlik in
dotnet/msbuild#13533
* Remove early return in GetCanonicalForm, always call System.IO.Path by
@​OvesN in dotnet/msbuild#13532
* Do not overwrite GetCopyToOutputDirectoryItemsDependsOn, just add new…
by @​snechaev in dotnet/msbuild#13474
* Migrate GetReferenceAssemblyPaths task to TaskEnvironment API by
@​OvesN in dotnet/msbuild#13495
* Stabilize ToolTaskThatTimeoutAndRetry test by @​rainersigwald in
dotnet/msbuild#13489
* [automated] Merge branch 'vs18.6' => 'main' by @​github-actions[bot]
in dotnet/msbuild#13506
* Add extra test assertions around tests by @​Youssef1313 in
dotnet/msbuild#13536
* Add static eval for repo skills/agents via skill-validator by
@​JanKrivanek in dotnet/msbuild#13537
* Migrate SGen task to Task environment API by @​OvesN in
dotnet/msbuild#13457
* Fix TerminalLogger assert failure for metaproj files and cached
project eval ID by @​OvesN in
dotnet/msbuild#13480
* Filter out approving review from pr-reviewer agent by @​JanKrivanek in
dotnet/msbuild#13553
* Use a unique task name per invocation to tabilize
RoslynCodeTaskFactory_ReuseCompilation test by @​huulinhnguyen-dev in
dotnet/msbuild#13551
* Brief doc on feedback/logging/data systems by @​rainersigwald in
dotnet/msbuild#13554
* Localized file check-in by OneLocBuild Task: Build definition ID 9434:
Build ID 13881982 by @​dotnet-bot in
dotnet/msbuild#13437
* Stage 3: Forward BuildProjectFile* callbacks from OOP TaskHost to
worker node by @​JanProvaznik in
dotnet/msbuild#13350
* Enable TaskHost Callbacks by default by @​JanProvaznik in
dotnet/msbuild#13579
* Remove unactionable info from reviewer agent by @​JanKrivanek in
dotnet/msbuild#13578
* Enlighten RequiresFramework35SP1Assembly task for multithreaded mode
by @​jankratochvilcz in dotnet/msbuild#13575
* Make SdkResolver-provided environment variables take precedence over
ambient environment by @​Copilot in
dotnet/msbuild#12655
* Add dotnet/skills marketplace and enable plugins by @​Evangelink in
dotnet/msbuild#13582
* The skills/agents check filters-in only touched files by @​JanKrivanek
in dotnet/msbuild#13586
* Fix skill-validation workflow failing when agents directory is deleted
by @​JeremyKuhne in dotnet/msbuild#13592
 ... (truncated)

Commits viewable in [compare
view](dotnet/msbuild@v18.6.3...v18.7.1).
</details>

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This was referenced Jun 29, 2026
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.

Migrate ToolTask task to TaskEnvironment API Migrate Al task to TaskEnvironment API

5 participants