Skip to content

Fix Get-PrBuildIds.ps1 reporting SUCCESS while builds in progress#19313

Merged
T-Gro merged 3 commits intomainfrom
copilot/fix-get-prbuildids-success-status
Mar 2, 2026
Merged

Fix Get-PrBuildIds.ps1 reporting SUCCESS while builds in progress#19313
T-Gro merged 3 commits intomainfrom
copilot/fix-get-prbuildids-success-status

Conversation

Copy link
Contributor

Copilot AI commented Feb 17, 2026

Get-PrBuildIds.ps1 reports incorrect build states because gh pr checks returns one row per job (36+ for fsharp-ci), and Sort-Object -Unique picks an arbitrary row. If a completed job is selected, the build shows SUCCESS despite other jobs still running.

Changes

  • Replace deduplication with aggregation: Sort-Object -UniqueGroup-Object BuildId
  • Worst-case state calculation: FAILURE > IN_PROGRESS/QUEUED > SUCCESS
  • Add Detail field: Job count breakdown per state (e.g., "25 IN_PROGRESS, 1 QUEUED, 10 SUCCESS")
  • Clean URLs: Strip &view=logs&jobId=... to link to build overview

Example

Before:

Pipeline  BuildId State   Link
fsharp-ci 1297255 SUCCESS https://dev.azure.com/.../buildId=1297255&view=logs&jobId=abc

(Build actually had 25 IN_PROGRESS + 1 QUEUED + 10 SUCCESS)

After:

Pipeline  BuildId State       Detail                              Link
fsharp-ci 1297255 IN_PROGRESS 25 IN_PROGRESS, 1 QUEUED, 10 SUCCESS https://dev.azure.com/.../buildId=1297255
Original prompt

This section details on the original issue you should resolve

<issue_title>Get-PrBuildIds.ps1 reports SUCCESS while build is still in progress</issue_title>
<issue_description>## Bug

Get-PrBuildIds.ps1 can report State = SUCCESS for a build that is still running.

Root cause

The script calls gh pr checks which returns one row per job (e.g. 36 rows for fsharp-ci), all sharing the same buildId. It then deduplicates with Sort-Object -Property Pipeline, BuildId -Unique, which picks one arbitrary row. If that row happens to be a completed job (e.g. CheckCodeFormatting), the overall state shows SUCCESS even though 25 other jobs are still IN_PROGRESS.

File: .github/skills/pr-build-status/scripts/Get-PrBuildIds.ps1, final pipeline (~line 55):

} | Sort-Object -Property Pipeline, BuildId -Unique

Repro

  1. Open a PR that triggers fsharp-ci
  2. Wait until the Build stage finishes but test stages are still running
  3. Run: pwsh .github/skills/pr-build-status/scripts/Get-PrBuildIds.ps1 -PrNumber <PR>
  4. Observe State = SUCCESS even though Get-BuildInfo.ps1 -BuildId <id> shows Status = inProgress

Observed on PR #19309, build 1297255: script said SUCCESS, actual state was 10/36 SUCCESS + 25 IN_PROGRESS + 1 QUEUED.

Suggested fix

Replace the Sort-Object -Unique with a Group-Object BuildId and derive worst-case state per build:

$builds = $checks | Where-Object { $_.link -match "dev\.azure\.com" } | ForEach-Object {
    $buildId = if ($_.link -match "buildId=(\d+)") { $matches[1] } else { $null }
    $pipeline = ($_.name -split " ")[0]
    [PSCustomObject]@{
        Pipeline = $pipeline
        BuildId  = $buildId
        State    = $_.state
        Link     = $_.link
    }
} | Group-Object BuildId | ForEach-Object {
    $jobs = $_.Group
    $states = $jobs | Select-Object -ExpandProperty State -Unique
    $overall = if ($states -contains "FAILURE") { "FAILURE" }
               elseif ($states -contains "IN_PROGRESS" -or $states -contains "QUEUED") { "IN_PROGRESS" }
               else { "SUCCESS" }
    $first = $jobs | Select-Object -First 1
    [PSCustomObject]@{
        Pipeline = $first.Pipeline
        BuildId  = $first.BuildId
        State    = $overall
        Detail   = ($jobs | Group-Object State | ForEach-Object { "$($_.Count) $($_.Name)" }) -join ", "
        Link     = ($first.Link -replace "\&view=.*", "")
    }
}

This also trims the job-specific &view=logs&jobId=... suffix from the link so it points to the build overview.</issue_description>

Comments on the Issue (you are @copilot in this section)

Custom agent used: F# agent
Generic agent for F# coding following the coding guidelines of F# from MsLearn


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

… jobs

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix Get-PrBuildIds.ps1 reporting SUCCESS while build is in progress Fix Get-PrBuildIds.ps1 reporting SUCCESS while builds in progress Feb 17, 2026
Copilot AI requested a review from T-Gro February 17, 2026 12:58
@T-Gro T-Gro marked this pull request as ready for review February 18, 2026 14:43
@T-Gro T-Gro requested a review from a team as a code owner February 18, 2026 14:43
@T-Gro T-Gro requested a review from abonie February 18, 2026 14:43
@github-actions
Copy link
Contributor

✅ No release notes required

@T-Gro T-Gro enabled auto-merge (squash) February 18, 2026 15:16
@T-Gro T-Gro merged commit 3fd40e8 into main Mar 2, 2026
4 checks passed
T-Gro added a commit that referenced this pull request Mar 6, 2026
* Type checker: recover on argument/overload checking (#19314)

* [main] Update dependencies from dotnet/arcade (#19333)

* Update dependencies from https://github.com/dotnet/arcade build 20260219.2
On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.26117.6 -> To Version 10.0.0-beta.26119.2

* Update dependencies from https://github.com/dotnet/arcade build 20260223.2
On relative base path root
Microsoft.DotNet.Arcade.Sdk From Version 10.0.0-beta.26117.6 -> To Version 10.0.0-beta.26123.2

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* [main] Source code updates from dotnet/dotnet (#19343)

* Backflow from https://github.com/dotnet/dotnet / 854c152 build 302768

[[ commit created by automation ]]

* Update dependencies from build 302768
No dependency updates to commit
[[ commit created by automation ]]

* Backflow from https://github.com/dotnet/dotnet / 51587e2 build 302820

[[ commit created by automation ]]

* Update dependencies from build 302820
No dependency updates to commit
[[ commit created by automation ]]

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>

* Update image used for insert into VS step (#19357)

* Fix :: FAR :: Remove corrupted .ctor symbol reference (#19358)

* DotNetBuildUseMonoRuntime stackguard (#19360)

* Fsharp.Core :: {Array;List;Set;Array.Parallel} partitionWith (taking Choice<T,U> partitioner) (#19335)

* Sort out some outstanding issues after xUnit upgrade  (#19363)

* Improve collection comparison diagnostics in tests (#19365)

Added shouldBeEqualCollections to Assert.fs for detailed collection comparison, including reporting missing/unexpected items and positional differences. Updated Project25 symbol uses test to use this helper and print actual/expected values for easier debugging.

* Enhance the compiler to produce a FS0750 error on let! or use! outside a CE (#19347)

* Update to latest .NET 10 SDK patch (#19350)

* Feature: `#elif` preprocessor directive (#19323)

* Support #exit;; as alias to #quit;; in fsi (#19329)

* Checker: prevent reporting optional parameter rewritten tree symbols (#19353)

* Improve static compilation of state machines (#19297)

* Add FSC compiler options tests (#19348)

* Update dependencies from https://dev.azure.com/dnceng/internal/_git/dotnet-optimization build 20260226.1 (#19366)

On relative base path root
optimization.linux-arm64.MIBC.Runtime , optimization.linux-x64.MIBC.Runtime , optimization.windows_nt-arm64.MIBC.Runtime , optimization.windows_nt-x64.MIBC.Runtime , optimization.windows_nt-x86.MIBC.Runtime From Version 1.0.0-prerelease.26117.2 -> To Version 1.0.0-prerelease.26126.1

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>

* Fix Get-PrBuildIds.ps1 reporting SUCCESS while builds in progress (#19313)

* Fix flaky Project25 TP test by replacing FSharp.Data NuGet with TestTP (#19364) (#19373)

Replace FSharp.Data (resolved via NuGet at runtime) with the built-in
TestTP type provider for the Project25 symbol API tests. This fixes
non-deterministic test failures on Linux CI caused by
Directory.GetFiles returning DLLs in random inode order on ext4,
which varied whether the FSharp.Data namespace was tagged as
'provided' or not.

Changes:
- Replace 70-line NuGet restore/staging setup with 2-line TestTP reference
- Update source to use ErasedWithConstructor.Provided.MyType instead
  of FSharp.Data.XmlProvider
- Replace brittle exact-match symbol list with targeted assertions
  for provided types, methods, and namespaces
- Remove FactSkipOnSignedBuild (TestTP is always available after build)
- Rename test variables to match the types being tested

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

* Add automatic merge flow from main to feature/net11-scouting (#19283)

* Optimize Set.intersect symmetry and add release notes (#19292)

Co-authored-by: Ahmed <w0lf@192.168.1.8>

* Fix strong name signature size to align with Roslyn for public signing (#11887) (#19242)

* Use culture-independent `IndexOf` in interpolated string parsing (#19370)

* Rename "inline hints" to "inlay hints" (#19318)

* Rename "inline hints" to "inlay hints" for LSP consistency

Aligns F#-owned terminology with LSP and VS Code conventions.
The Roslyn ExternalAccess types (IFSharpInlineHintsService, etc.)
are left unchanged as they are owned by Roslyn.

Fixes #16608

* Add release note for inline-to-inlay hints rename

---------

Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>

* FCS: capture additional types during analysis (#19305)

* remove duplicate FlatErrors file (#19383)

* Update dependencies from https://github.com/dotnet/arcade build 20260302.1 (#19379)

[main] Update dependencies from dotnet/arcade

* [main] Update dependencies from dotnet/msbuild (#19021)

* Update dependencies from https://github.com/dotnet/msbuild build 20251021.3
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25521-03

* Update dependencies from https://github.com/dotnet/msbuild build 20251023.2
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25523-02

* Update dependencies from https://github.com/dotnet/msbuild build 20251024.3
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25524-03

* Update dependencies from https://github.com/dotnet/msbuild build 20251027.5
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25527-05

* Update dependencies from https://github.com/dotnet/msbuild build 20251027.6
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25527-06

* Update dependencies from https://github.com/dotnet/msbuild build 20251104.4
On relative base path root
Microsoft.Build , Microsoft.Build.Framework , Microsoft.Build.Tasks.Core , Microsoft.Build.Utilities.Core From Version 18.1.0-preview-25515-01 -> To Version 18.1.0-preview-25554-04

* Bump dependency versions in Version.Details.props

Updated package versions for several dependencies.

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>

* Add fsharp-release-announcement agent (#19390)

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

* Fix Seq.empty rendering as "EmptyEnumerable" in serializers (#19317)

* Update FileContentMapping.fs (#19391)

* Fix flaky help_options test: restore enableConsoleColoring after mutation (#19385)

* Initial plan

* Fix flaky help_options test by saving/restoring enableConsoleColoring global

The `fsc --consolecolors switch` test mutates the global
`enableConsoleColoring` via `--consolecolors-`. When help_options tests
run after this test, the help output says "(off by default)" instead of
"(on by default)", causing baseline mismatches.

Fix: save and restore `enableConsoleColoring` around the test.

Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>

* isolate checker (#19393)

Isolate type-provider tests with dedicated FSharpChecker

Introduce Project25.checker to avoid shared state races in type-provider tests. All relevant test cases now use this dedicated instance, improving test isolation, reliability, and determinism without changing test functionality.

* Introduce CallRelatedSymbolSink to avoid affect name resolution with related symbols (#19361)

* Add RelatedSymbolUseKind flags enum and separate sink for related symbols

Address auduchinok's review comments on PR #19252: related symbols (union case
testers, copy-and-update record types) are now reported via a separate
NotifyRelatedSymbolUse sink instead of abusing NotifyNameResolution.

- Add [<Flags>] RelatedSymbolUseKind enum (None/UnionCaseTester/CopyAndUpdateRecord/All)
- Add NotifyRelatedSymbolUse to ITypecheckResultsSink interface
- Refactor RegisterUnionCaseTesterForProperty to use the new sink
- Refactor copy-and-update in TcRecdExpr to use CallRelatedSymbolSink
- Add ?relatedSymbolKinds parameter to GetUsesOfSymbolInFile (default: None)
- Wire up VS FAR to pass relatedSymbolKinds=All
- Write related symbols to ItemKeyStore for background FAR
- Update semantic classification tests: tester properties now classified as
  Property (not UnionCase) since they're no longer in capturedNameResolutions

* Add release notes for FSharp.Compiler.Service 11.0.100

---------

Co-authored-by: Eugene Auduchinok <eugene.auduchinok@gmail.com>
Co-authored-by: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
Co-authored-by: Tomas Grosup <Tomas.Grosup@gmail.com>
Co-authored-by: Adam Boniecki <20281641+abonie@users.noreply.github.com>
Co-authored-by: Jakub Majocha <1760221+majocha@users.noreply.github.com>
Co-authored-by: Evgeny Tsvetkov <61620612+evgTSV@users.noreply.github.com>
Co-authored-by: Youssef Victor <youssefvictor00@gmail.com>
Co-authored-by: Bozhidar Batsov <bozhidar@batsov.dev>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ahmed Waleed <ahmedwalidahmed.0@gmail.com>
Co-authored-by: Ahmed <w0lf@192.168.1.8>
Co-authored-by: Brian Rourke Boll <brianrourkeboll@users.noreply.github.com>
Co-authored-by: Apoorv Darshan <ad13dtu@gmail.com>
Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

Get-PrBuildIds.ps1 reports SUCCESS while build is still in progress

3 participants