Skip to content

[release/8.0-staging] Skip empty iOS NativeAOT Helix submission - #131209

Merged
akoeplinger merged 1 commit into
dotnet:release/8.0-stagingfrom
davidnguyen-tech:fix/skip-empty-ios-nativeaot-helix
Aug 12, 2026
Merged

[release/8.0-staging] Skip empty iOS NativeAOT Helix submission#131209
akoeplinger merged 1 commit into
dotnet:release/8.0-stagingfrom
davidnguyen-tech:fix/skip-empty-ios-nativeaot-helix

Conversation

@davidnguyen-tech

@davidnguyen-tech davidnguyen-tech commented Jul 22, 2026

Copy link
Copy Markdown
Member

Fixes #130860

main PR N/A — servicing-only. main has the Exists(...) guards (#121927) and its iOS device tests are still enabled.

Description

#130473 marked the only two test projects this leg selects as IgnoreForCI, since the servicing test infra isn't being updated for newer macOS:

  • iOS.Device.Aot.Test
  • iOS.Device.ExportManagedSymbols.Test

That suppresses ArchiveTests/_CopyTestArchive, so the leg no longer produces artifacts/helix/tests — and release/8.0's sendtohelix-mobile.targets:87 enumerates that directory unguarded:

error MSB4184: The expression "[System.IO.Directory]::GetDirectories(.../artifacts/helix/tests/, *.app, ...)"
cannot be evaluated. Could not find a part of the path '.../artifacts/helix/tests'

This keeps the iOS NativeAOT build and skips only its now-empty Send to Helix step. tvOS is untouched. Both call sites are updated — runtime.yml duplicates the block, so fixing only the extra-platforms template would leave the runtime definition red.

Backporting just the Exists(...) guard doesn't work: it trades MSB4184 for No helix work items at sendtohelixhelp.proj:304, since the leg still has nothing to submit.

Customer Impact

None to customers — CI infrastructure only, no shipping bits change.

The leg currently fails on every rolling build and every PR touching libraries or coreclr, which keeps .NET 8 servicing CI red (blocking-clean-ci) and buries real regressions in noise.

Regression

Yes, from #130473 — which correctly disabled unrunnable device tests but left the Helix submission leg scheduled with nothing to send. CI-only; no shipped code involved.

Testing

Send to Helix step results on this PR:

Build Definition Job Result
1541064 runtime-extra-platforms ios-arm64 Release AllSubsets_NativeAOT skipped
1541064 runtime-extra-platforms tvos-arm64 Release AllSubsets_NativeAOT succeeded
1541066 runtime ios-arm64 Release AllSubsets_NativeAOT skipped
1541066 runtime tvos-arm64 Release AllSubsets_NativeAOT succeeded

All four parent jobs succeeded, so iOS build coverage is retained. The tvOS step log confirms a real submission (1 work item, 3.3M payload, Helix job completing with 2 finished work items) — it isn't silently skipping too.

Also verified locally with a harness importing the real sendtohelix-mobile.targets at the #130473 commit, which reproduces the MSB4184 and the guard-only follow-on failure. The equivalent leg on release/10.0 is green, so no change is needed elsewhere.

Risk

Low.

  • Pipeline YAML only — no product, package, or test source touched.
  • Scoped by osGroup, so only the iOS NativeAOT leg changes; verified in CI rather than assumed.
  • Existing librariesContainsChange/coreclrContainsChange/isRollingBuild gating is preserved, just wrapped in and(...).
  • Uses the existing condition hook in eng/pipelines/libraries/helix.yml instead of loosening shared Helix behavior for all mobile lanes.
  • Worst case: iOS NativeAOT test coverage stays absent — already the status quo, since both tests are disabled.

Both call sites carry a comment to remove the exclusion if these tests are re-enabled.

Note

This pull request description was generated with GitHub Copilot.

The servicing branch no longer has enabled iOS NativeAOT device tests, so preserve build coverage while skipping the empty Helix submission. Keep tvOS behavior unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 332b1207-8473-4b2b-8864-30da72ee4f6b
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@davidnguyen-tech

Copy link
Copy Markdown
Member Author

/azp run runtime-extra-platforms

Note

This command was posted by GitHub Copilot at the user's request.

@azure-pipelines

Copy link
Copy Markdown
No pipelines are associated with this pull request.

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

This PR updates the .NET 8 staging Azure Pipelines definitions to skip the libraries “Send to Helix” step for the iOS NativeAOT device leg when it would be empty (due to the device test projects being marked IgnoreForCI), while preserving the iOS NativeAOT build coverage and the tvOS Helix submission.

Changes:

  • Update the libraries Helix submission condition in runtime.yml to exclude osGroup == ios while keeping the existing change-detection gating.
  • Add an explicit osGroup != ios condition to the iOS-like extra-platforms libraries Helix submission.
  • Add inline comments documenting that the iOS exclusion must be removed if iOS NativeAOT device tests are re-enabled.

Reviewed changes

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

File Description
eng/pipelines/runtime.yml Wrap the existing libraries Helix submission condition with ne(osGroup, 'ios') so tvOS still submits but iOS doesn’t.
eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml Add condition: ne(variables['osGroup'], 'ios') to skip iOS libraries Helix submission in the iOS-like extra-platforms pipeline.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@davidnguyen-tech

Copy link
Copy Markdown
Member Author

/azp run runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 1 pipeline(s).

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 3 pipeline(s).
13 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

@davidnguyen-tech

Copy link
Copy Markdown
Member Author

/azp run

@azure-pipelines

Copy link
Copy Markdown
You have several pipelines (over 10) configured to build pull requests in this repository. Specify which pipelines you would like to run by using /azp run [pipelines] command. You can specify multiple pipelines using a comma separated list.

@davidnguyen-tech

Copy link
Copy Markdown
Member Author

/azp run runtime,runtime-extra-platforms

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 2 pipeline(s).

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/runtime-infrastructure
See info in area-owners.md if you want to be subscribed.

@davidnguyen-tech

Copy link
Copy Markdown
Member Author

/ba-g Unrelated failures

@davidnguyen-tech
davidnguyen-tech requested a review from agocke August 6, 2026 12:59
@akoeplinger akoeplinger added the Servicing-approved Approved for servicing release label Aug 12, 2026
@akoeplinger
akoeplinger merged commit acfd1e4 into dotnet:release/8.0-staging Aug 12, 2026
259 of 293 checks passed
@davidnguyen-tech

Copy link
Copy Markdown
Member Author

Thanks for approving @akoeplinger :)

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

Labels

area-Infrastructure Servicing-approved Approved for servicing release

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants