Skip to content

Determinize release: hardcode OptProf baseline + Phase 3.2 baseline resolver - #14222

Merged
JanProvaznik merged 2 commits into
dotnet:mainfrom
JanProvaznik:optprof-baseline-determinization
Jun 30, 2026
Merged

Determinize release: hardcode OptProf baseline + Phase 3.2 baseline resolver#14222
JanProvaznik merged 2 commits into
dotnet:mainfrom
JanProvaznik:optprof-baseline-determinization

Conversation

@JanProvaznik

Copy link
Copy Markdown
Member

Two release-process determinizations, plus re-includes the Phase 3.2 baseline helper that missed the #14220 merge.

1. Hardcode the OptProf baseline (new)

A freshly-cut vs* branch has no OptProf optimization data of its own, so its first official build fails — today handled by the manual Phase 4.4 dance (cancel the auto-build, re-run with an Optional OptProfDrop Override). This makes it automatic:

  • .vsts-dotnet.yml: new OptProfBaselineDrop variable holding the latest known-good main OptimizationData drop. On vs* branches the build seeds OptProfDrop from it (→ /p:VisualStudioIbcDrop) and clears SourceBranch, so the first build of a brand-new branch has valid OptProf data.
    • main is unaffected (still resolves its own OptProf via SourceBranch); the manual OptProfDropName override still wins; existing vs* branches keep their frozen copies (forward-only change).
  • scripts/Get-LatestOptProfDrop.ps1: resolves the value deterministically from the MSBuild-OptProf pipeline (def 17389) latest successful main run, reading the Set PreviousOptimizationInputsDropName step. Validated → OptimizationData/DotNet-msbuild-Trusted/main/20260623.5/14471019/1.
  • Process: new checklist Phase 3.3 refreshes OptProfBaselineDrop in the main-bump PR (API-compat → 3.4, merge → 3.5). Phase 4.4 demoted to a fallback (only if the seeded build still fails).

⚠️ Infra change to the official build — worth a careful review of the ${{ if startsWith(... 'refs/heads/vs') }} seeding block and a validation run on a vs* branch. Trade-off: a vs* branch now uses the OptProf data pinned at cut time (deterministic; fine for a servicing branch) rather than resolving its own over its lifetime.

2. Deterministic Phase 3.2 baseline (re-include)

scripts/Get-PackageValidationBaseline.ps1 + its doc wiring — this was committed after #14220 had already merged at its first commit, so it never landed. Re-included here. Resolves PackageValidationBaselineVersion via git merge-base → pipeline 9434 → dotnet-tools feed. Validated → 18.9.0-preview-26330-01.

Both scripts require az login with devdiv access; the manual procedures remain as fallbacks.

JanProvaznik and others added 2 commits June 30, 2026 16:29
Adds scripts/Get-PackageValidationBaseline.ps1: given the release version, it computes git merge-base(origin/main, origin/vs<ver>), finds the matching successful build in official pipeline 9434, derives the package version from the OfficialBuildId via the Arcade date encoding, and verifies it on the dotnet-tools feed — collapsing the manual Phase 3.2 investigation into one command.

Validated against 18.9: outputs 18.9.0-preview-26330-01 (the branch-point main build 20260630.1 @ 0ac5599). The Arcade date formula (yy*1000 + month*50 + day) was cross-checked against the 18.7 (26230), 18.8 (26276), and 18.9 (26330) baselines.

Wires the script into the checklist Phase 3.2, the skill's baseline procedure (as the preferred path; manual steps kept as fallback), and the Key Files table.

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

Eliminates the recurring Phase 4.4 dance (cancel the failing auto-build, re-run with a manual OptProf override) for freshly-cut release branches.

.vsts-dotnet.yml:
- New OptProfBaselineDrop variable holding the latest known-good main OptimizationData drop.
- On vs* branches, seed OptProfDrop from it (and clear SourceBranch) so the first official build of a brand-new branch has valid OptProf data. main is unaffected (still resolves its own OptProf via SourceBranch); existing vs branches keep their frozen copies.

scripts/Get-LatestOptProfDrop.ps1:
- Resolves the value deterministically from the MSBuild-OptProf pipeline (17389) latest successful run on main, reading the 'Set PreviousOptimizationInputsDropName' step. Validated -> OptimizationData/DotNet-msbuild-Trusted/main/20260623.5/14471019/1.

Process:
- New release-checklist Phase 3.3 refreshes OptProfBaselineDrop in the main-bump PR (renumbered API-compat->3.4, merge->3.5; artifact-table ref updated).
- Phase 4.4 demoted to a fallback (only if the seeded build still fails).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 30, 2026 14:33
@JanProvaznik
JanProvaznik requested a review from a team as a code owner June 30, 2026 14:33
@github-actions

Copy link
Copy Markdown
Contributor

🔍 Skill Validator Results

⚠️ Warnings or advisories found

Scope Checked
Skills 1
Agents 0
Total 1
Severity Count
--- ---:
❌ Errors 0
⚠️ Warnings 1
ℹ️ Advisories 0

Summary

Level Finding
ℹ️ Found 1 skill(s)
ℹ️ [release] 📊 release: 3,668 BPE tokens [chars/4: 3,588] (standard ~), 13 sections, 1 code blocks
ℹ️ [release] ⚠ Skill is 3,668 BPE tokens (chars/4 estimate: 3,588) — approaching "comprehensive" range where gains diminish.
ℹ️ ✅ All checks passed (1 skill(s))
Full validator output ```text Found 1 skill(s) [release] 📊 release: 3,668 BPE tokens [chars/4: 3,588] (standard ~), 13 sections, 1 code blocks [release] ⚠ Skill is 3,668 BPE tokens (chars/4 estimate: 3,588) — approaching "comprehensive" range where gains diminish. ✅ All checks passed (1 skill(s)) ```

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 determinizes two parts of the MSBuild release process: (1) ensuring newly-cut vs* branches have a known-good OptProf baseline so the first official build succeeds without manual intervention, and (2) reintroducing a deterministic resolver script for PackageValidationBaselineVersion (Phase 3.2) and wiring it into the release checklist + release skill docs.

Changes:

  • Add a hardcoded OptProfBaselineDrop in .vsts-dotnet.yml and seed OptProfDrop from it on vs* branches (while keeping main behavior unchanged).
  • Add/re-include two helper scripts to deterministically resolve (a) the latest OptProf drop and (b) the package validation baseline.
  • Update release checklist and release skill documentation to incorporate the new deterministic steps and revised Phase numbering.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/Get-PackageValidationBaseline.ps1 New helper script to compute PackageValidationBaselineVersion via merge-base + pipeline query + dotnet-tools feed verification.
scripts/Get-LatestOptProfDrop.ps1 New helper script to pull the latest OptProf drop from MSBuild-OptProf pipeline logs.
documentation/release-checklist.md Updates Phase 3 to reference the new scripts and documents the new OptProf baseline refresh + fallback behavior.
.vsts-dotnet.yml Adds OptProfBaselineDrop and seeds OptProfDrop for vs* branches to avoid first-build failures.
.github/skills/release/SKILL.md Documents the deterministic baseline resolver and adds OptProf baseline refresh into Phase 3 guidance and quick links.

Comment thread scripts/Get-LatestOptProfDrop.ps1
Comment thread scripts/Get-PackageValidationBaseline.ps1
Comment thread documentation/release-checklist.md
@JanProvaznik
JanProvaznik enabled auto-merge (squash) June 30, 2026 14:43
@JanProvaznik JanProvaznik mentioned this pull request Jun 30, 2026
70 tasks
@JanProvaznik
JanProvaznik merged commit 986ade9 into dotnet:main Jun 30, 2026
21 of 22 checks passed
This was referenced Sep 11, 2026
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.

3 participants