Skip to content

Surface installer-phase failures in build log analysis#998

Merged
jasonleenaylor merged 3 commits into
mainfrom
fix/analyze-build-log-installer-errors
Jul 10, 2026
Merged

Surface installer-phase failures in build log analysis#998
jasonleenaylor merged 3 commits into
mainfrom
fix/analyze-build-log-installer-errors

Conversation

@jasonleenaylor

@jasonleenaylor jasonleenaylor commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Quick Summary

Base Installer run 28904287229 failed on a bundled-installer 404, but the job summary said "No failed steps detected".

  • Capture code-less MSBuild diagnostics (error : message) and recognize compound targets like BuildInstaller as steps, so installer-phase errors are attributed.
  • Safety net: a log containing Build FAILED. with no attributed step now surfaces the raw MSBuild failure summary and exits non-zero.
  • New DownloadFile enrichment names the missing bundled download and locates the pinned address in Build/*.targets.

Verified against the failing run's build.log artifact: the report now leads with the FLExBridge_Offline_4.3.0.exe 404 as root cause; a green log still exits 0.

🤖 Generated with Claude Code


This change is Reviewable

The Base Installer run 28904287229 failed on a bundled-installer 404,
but the job summary said "No failed steps detected". Four capture-layer
gaps in analyze_build_log.py hid the failure:

- Code-less diagnostics ("error : msg", as logged by custom FwBuildTasks
  via Log.LogError) did not match MSBUILD_DIAGNOSTIC_RX; the error code
  is now optional.
- Compound targets such as BuildInstaller were not recognized as real
  project steps (no word boundary mid-word), so installer-phase output
  had no step to attach to.
- Diagnostics logged without a node prefix were dropped when the default
  node had no open step; they now attribute to the sole open step when
  unambiguous.
- 'Done Building Project ... -- FAILED.' never marked a step failed (the
  optional regex group could not capture after a lazy quantifier); the
  suffix is now checked directly.

Safety net: if a log contains "Build FAILED." but no step was attributed,
the report now quotes the raw MSBuild failure summary, emits an error
annotation, and exits non-zero, so the summary can never claim success
on a failed build. EXIT_CODE_RX also accepts "with exit code N".

Following the enrichment registry design, add a DownloadFile enrichment:
on "Could not retrieve latest <url>. Exceeded retry count", it names the
missing file, greps Build/*.targets for where the address is pinned, and
suggests uploading the file or repointing the pin.

Verified against the actual build.log artifact from run 28904287229:
report now leads with the FLExBridge_Offline_4.3.0.exe 404 as root cause
(179 steps, 1 failed) with pins at Installer.legacy.targets:613 and
Installer.targets:242; a green log still exits 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

NUnit Tests

    1 files  ±0      1 suites  ±0   10m 17s ⏱️ +47s
4 302 tests +3  4 229 ✅ +3  73 💤 ±0  0 ❌ ±0 
4 311 runs  +3  4 238 ✅ +3  73 💤 ±0  0 ❌ ±0 

Results for commit 4dba244. ± Comparison against base commit b7c9ce5.

♻️ This comment has been updated with latest results.

jasonleenaylor and others added 2 commits July 8, 2026 08:43
Tools such as Exec with IgnoreExitCode=true (the VerifyWix3Inputs findstr
probe) log non-zero exit codes on healthy builds. Now that installer
projects are tracked steps, such a mention inside a step would flag a
green build as failed. In boundary mode real failures surface as captured
errors or a "-- FAILED." project marker, so record exit-code mentions as
notable context instead. The synthetic fallback (no project boundaries,
e.g. raw job logs) still fails on exit codes, its only signal there.

Verified: a green log with a benign "exited with code 1" inside a tracked
step exits 0; the failing run's build.log artifact still reports the one
installer failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The duplicate-project merge copied errors, warnings, exit codes, and
notable lines to the canonical record but not explicitly_failed, so a
project built more than once whose later invocation ended with
"-- FAILED." (and no captured errors) reported as succeeded.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jasonleenaylor
jasonleenaylor marked this pull request as ready for review July 8, 2026 21:29
@jasonleenaylor
jasonleenaylor merged commit d4e14ac into main Jul 10, 2026
6 of 7 checks passed
@jasonleenaylor
jasonleenaylor deleted the fix/analyze-build-log-installer-errors branch July 10, 2026 21:16
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.

1 participant