Regression matrix: build unmodified repos against local FSharp.Core - #20240
Open
T-Gro wants to merge 2 commits into
Open
Regression matrix: build unmodified repos against local FSharp.Core#20240T-Gro wants to merge 2 commits into
T-Gro wants to merge 2 commits into
Conversation
Contributor
✅ No release notes required |
T-Gro
force-pushed
the
t-gro-regression-local-fsharpcore
branch
from
August 10, 2026 12:08
1939c61 to
6a9e1c6
Compare
Gate 1 (LoadLocalFSharpBuild): redirect compiler/build tasks/targets to the local build and carry --nowarn:75 --times (moved from the prepare fsx). Gate 2 (RegressionLocalCore, matrix-only): serve the locally built FSharp.Core the SDK's own way via FSCorePackageVersion plus a staged library-packs restore source, so each repo resolves the ns2.0/ns2.1 core it would normally get. Only engages when the repo has not pinned FSharp.Core (FSharpCoreImplicitPackageVersion empty and FSCorePackageVersionSet not already set), so pinned/CPM/Update repos are untouched. We deliberately don't set FSharpCoreImplicitPackageVersion so a repo's own conditional pin keeps working. Gate 3 (LoadLocalFSharpBuild without the matrix, i.e. CompilerCompat/VS): keep the direct local FSharp.Core reference. Previously this and DisableImplicitFSharpCoreReference were unconditional, which suppressed the implicit reference for the matrix too. Set LoadLocalFSharpBuild=True in the VS integration standalone project so it keeps using the local compiler now that the redirect is gated. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add eng/scripts/BuildWithLocalFSharp.fsx, an OS-agnostic runner (dotnet fsi is
the only dependency) that CI and a contributor invoke identically: it discovers
the freshly packed FSharp.Core, exports the environment the 3-gate
UseLocalCompiler props reads, then runs the repo's own build command from its
own directory (';;'-separated, fail-fast; per-OS shell; never chmod or edit the
checkout). With --verify it asserts the local core was actually restored. A
failed regression therefore reproduces locally with one command, no pipeline.
- Delete eng/scripts/PrepareRepoForRegressionTesting.fsx: nothing rewrites the
target repo anymore; the shim is injected only via CustomAfterDirectoryBuildProps.
- eng/templates/regression-test-jobs.yml: replace the inline build logic with a
single fsx call, pin global.json to the exact compiler SDK, and on failure
print an OS-agnostic local-repro block. No pwsh-specific build logic remains.
- azure-pipelines-PR.yml: stage the packed FSharp.Core into the existing
UseLocalCompilerProps artifact and mark the implicit-core matrix entries
expectLocalCore: true; 120-minute timeout.
- docs + compiler-perf-investigator agent: document the fsx-based OS-agnostic
local workflow.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 39f45ce2-37e7-4026-b55a-e09360417611
T-Gro
force-pushed
the
t-gro-regression-local-fsharpcore
branch
from
August 10, 2026 12:22
6a9e1c6 to
1077063
Compare
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.
Reworks the local-compiler regression shim so an unmodified repo builds against the locally built compiler and FSharp.Core, still resolving the right FSharp.Core flavor (
netstandard2.0vsnetstandard2.1) per target framework.It supplies FSharp.Core as the packed
.nupkgthrough a local NuGet feed, not as a rawFSharp.Core.dll<Reference>. A.dllforces one flavor on every project and clashes with package references; the.nupkglets restore pick the matchinglib/netstandard2.xasset per project.Supersedes #20072. Adds Lanayx/Oxpecker (#20065) to the matrix.