[ci] Add dnceng/internal pipeline#12101
Merged
Merged
Conversation
Mirror of azure-pipelines-public.yaml retargeted to the dnceng internal instance, using internal (non-open) 1ES pools and CI push triggers. Signing is not enabled yet. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The AcesShared pool does not exist in dnceng/internal, which fails pipeline validation. Switch the macOS build, MSBuild test, and Java.Interop test jobs to the hosted "Azure Pipelines" pool with $(HostedMacImage), matching the package-tests template and MAUI's internal pipeline. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The internal pipeline overrode HostedMacImage to the x64 "macOS-15" image while the public pipeline uses "macOS-15-arm64" (Apple Silicon). On the x64 image the default JDK is x64, but .NET NativeAOT builds an osx-arm64 native library, so the Hello-NativeAOTFromJNI sample failed at runtime with: java.lang.UnsatisfiedLinkError: .../libHello-NativeAOTFromJNI.dylib: dlopen(...) (mach-o architecture mismatch) This surfaced only after the kotlin-gradle Maven-mirror fix let the Mac Java.Interop build progress past the earlier failure. Align HostedMacImage with the public pipeline so the JDK and NativeAOT output share arm64. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
kotlin-gradle.targets is imported by both Xamarin.Android.Tools.Bytecode-Tests
and generator-Tests, which build in parallel during the solution build.
Gradle runs in no-daemon mode but still forks a single-use daemon to honour
the build JVM settings. When both invocations share the default ~/.gradle
user home they race over the same daemon registry and loopback ports,
which surfaces on slower CI agents as:
Timeout waiting to connect to the Gradle daemon.
Give each importing project its own GRADLE_USER_HOME (keyed by project name,
in a stable location so the distribution and dependency caches stay warm)
so the two daemons are fully isolated and cannot contend.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
[System.Environment]::GetFolderPath('UserProfile') is not valid MSBuild
property-function syntax (MSB4186). Derive the per-project GRADLE_USER_HOME
base from $(USERPROFILE) on Windows and $(HOME) elsewhere instead.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
Simplify the per-project GRADLE_USER_HOME isolation by pointing it at each project's obj/ directory instead of a stable \C:\Users\jopepper/.gradle-ji-<project> folder. obj/ is already per-project (so the two parallel Gradle daemons stay isolated) and self-cleaning, and this test project is small enough that losing the warm Gradle/dependency cache on clean builds is negligible. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an internal Azure DevOps pipeline definition for the dnceng/internal mirror of dotnet-android, and hardens Java.Interop Kotlin fixture builds against Gradle daemon registry races when test projects build in parallel.
Changes:
- Add
build-tools/automation/azure-pipelines-internal.yaml, mirroring the public pipeline but retargeted to internal pools and hosted macOS images. - Update the Java.Interop Kotlin/Gradle test fixture build to isolate
GRADLE_USER_HOMEper-project underobj/to avoid parallel-build contention.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| external/Java.Interop/tests/Xamarin.Android.Tools.Bytecode-Tests/kotlin-gradle.targets | Sets a per-project GRADLE_USER_HOME so parallel test projects don’t race on Gradle’s daemon registry/ports. |
| build-tools/automation/azure-pipelines-internal.yaml | Introduces the internal (CI push-triggered) pipeline definition with internal pool/image configuration. |
Azure Repos Git does not honor YAML PR triggers. Document that pull request validation for main, release/*, and feature/* is configured through build-validation branch policies while retaining CI push triggers. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
Internal CI agents cannot resolve repo1.maven.org directly. Exercise MavenDownload against the anonymously readable dotnet-public-maven mirror instead, while retaining artifact and manifest validation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 6cdec623-94aa-4489-88b4-1356b68176fc
simonrozsival
approved these changes
Jul 15, 2026
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.
Why
The
dnceng/internalAzure DevOps project needs a pipeline definition for itsdotnet-androidrepository mirror. The existing public pipeline cannot be used unchanged because internal builds use different Windows/Linux pools and hosted macOS images.What changed
build-tools/automation/azure-pipelines-internal.yaml, based on the public pipeline and configured fordnceng/internalpools.macOS-15-arm64image so the Java.Interop NativeAOT JNI sample runs with matching arm64 Java/native binaries.obj/directory, preventing parallel test projects from racing over Gradle's daemon registry.MavenCentralSuccessagainst the anonymously readabledotnet-public-mavenmirror because internal agents cannot resolverepo1.maven.orgdirectly.prtriggers. Pipeline 1644 is configured as a blocking validation formain,release/*, andfeature/*in the internal mirror.Validation
a50944d68after mirroring bothauto-value-annotations:1.10.4and its parent POMauto-value-parent:1.10.4.CachedMavenRepositoryandResolvedProject.FromArtifactflow asMavenDownload: resolved the JAR, child POM, and parent POM successfully fromdotnet-public-maven.Java.Interop.Tools.Maven-Tests: 106 passed, 0 failed.repo1.maven.org.