ci: make SynapseML releases approved and resumable - #2628
ci: make SynapseML releases approved and resumable#2628Rana Singh (ranadeepsingh) wants to merge 19 commits into
Conversation
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
|
Hey Rana Singh (@ranadeepsingh) 👋! We use semantic commit messages to streamline the release process. Examples of commit messages with semantic prefixes:
To test your commit locally, please follow our guild on building from source. |
c763701 to
2822d0b
Compare
## Summary Refresh the release automation on current master, align it with the Fabric release guide and the live Publish-Official pipeline, and add proof-oriented coverage for release identifiers, artifact verification, GitHub workflows, and BBC-VHD edits. ## Prompting Intent Refresh microsoft/SynapseML PR microsoft#2628 using the SynapseML PR readiness loop, follow the internal Fabric release guide, and derive automation from actual prior OSS, Internal, Publish-Official, and BBC-VHD releases rather than relying on stale examples. ## Linked Sources - Fabric release guide: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 - Release automation PR: microsoft#2628 - Derivative tag automation: microsoft#2540 - Live v1.1.3 release: https://github.com/microsoft/SynapseML/releases/tag/v1.1.3 - Publish-Official pipeline: https://msdata.visualstudio.com/A365/_build?definitionId=35879 - Historical BBC-VHD release PR: https://msdata.visualstudio.com/A365/_git/BBC-VHD/pullrequest/1805064 ## Rationale Keep ESRP, review, White-Glove, and train decisions human-gated while automating deterministic mechanics. Tag the exact reviewed merge, dispatch downstream GitHub automation explicitly because GITHUB_TOKEN pushes do not recurse, gate release notes on public artifacts, use the live pipeline parameter contract, fail loudly on incomplete network evidence, and roll back paired BBC-VHD writes rather than leaving partial release state. Co-authored-by: Copilot <[email protected]>
|
/azp run |
|
Azure Pipelines: There may be pipelines that require an authorized user to comment /azp run to run. |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Pull request overview
This PR adds release-engineering automation to make SynapseML-to-Fabric releases more deterministic and reviewable, including a GitHub Actions “prepare → tag merged commit → publish notes” flow plus supporting Python tooling to derive/verify release identifiers and safely bump BBC-VHD pins.
Changes:
- Introduces a release matrix generator (
release_matrix.py) and an end-to-end verifier (verify_release.py) with accompanying tests. - Adds
bump_bbcvhd.py(plus tests) to safely update BBC-VHD component pins while preserving line endings and rolling back on failure. - Adds/updates GitHub workflows for release prepare/tagging and manual, artifact-gated release notes; enables
workflow_dispatchfor PR validation so release PRs created viaGITHUB_TOKENcan be validated.
Show a summary per file
| File | Description |
|---|---|
| scripts/test_bump_version.py | Extends bump-version tests for denylisted repo-relative paths; normalizes path keys to POSIX. |
| scripts/bump-version.py | Improves Windows console encoding robustness; adds path-based denylist support; normalizes path handling via as_posix(). |
| scripts/release/release_matrix.py | Adds a single-source-of-truth release matrix for tags and artifact versions + CLI rendering. |
| scripts/release/verify_release.py | Adds live verification of GitHub/ADO tags and Maven/PyPI/UPack/Azure Artifacts presence. |
| scripts/release/bump_bbcvhd.py | Adds deterministic, rollback-safe BBC-VHD component pin updater with CRLF/LF preservation. |
| scripts/release/README.md | Documents how to use the new release tooling and where it fits in the guide. |
| scripts/release/test_release_matrix.py | Adds regression/contract tests for the release matrix derivations and CLI validation. |
| scripts/release/test_verify_release.py | Adds unit tests for verifier networking/error handling and run plan behavior. |
| scripts/release/test_bump_bbcvhd.py | Adds tests for BBC-VHD bump idempotency, rollback, and newline preservation. |
| scripts/release/test_release_workflows.py | Adds tests asserting key workflow contract properties (manual gating, dispatch behavior). |
| scripts/release/test_prev_tag.sh | Adds a repo-taglist regression script for “previous primary tag” selection logic. |
| .github/workflows/release-prepare.yml | Adds a reviewed release PR generator and a merged-commit tagger that dispatches downstream orchestration. |
| .github/workflows/release-notes.yml | Adds a manual, artifact-gated GitHub Release publisher with explicit previous-tag selection. |
| .github/workflows/pr-validation.yml | Enables workflow_dispatch so validations can be dispatched for bot-opened release PR branches. |
Review details
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Suppressed comments (1)
scripts/release/verify_release.py:260
--skip internaldoes not currently skip the internal PyPI feed checks (thesynapseml_internalpackage); it only skips internal git tag checks. This makes--skip internalbehave inconsistently compared with--skip public.
def pip(self, package: str, version: str) -> str:
if "pip" in self.skip or "ado" in self.skip:
return SKIPPED
# Azure Artifacts normalises pypi names: synapseml_internal -> synapseml-internal
return (
OK
if version
in self._feed_versions("Synapse-Conda", "pypi", package.replace("_", "-"))
else MISSING
)
- Files reviewed: 14/14 changed files
- Comments generated: 2
- Review effort level: Lite
## Summary Make --skip internal consistently skip SynapseML-Internal tags, UPacks, and wheels while retaining OSS artifact checks, and document every skip scope with regression coverage. ## Prompting Intent Resolve all current-head automated review findings on microsoft/SynapseML PR microsoft#2628 and preserve an explicit, safe release-verification CLI contract. ## Linked Sources - Release automation PR: microsoft#2628 - Internal artifact skip review: microsoft#2628 (comment) - Skip help review: microsoft#2628 (comment) ## Rationale A release operator who opts out of Internal verification must not still query or fail on Internal packages. Passing artifact scope explicitly keeps OSS checks active, avoids hiding public release gaps, and makes combined skip behavior predictable from both CLI help and maintainer documentation. Co-authored-by: Copilot <[email protected]>
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
scripts/release/verify_release.py:75
- On Windows,
subprocess.run(..., shell=True)expects a command string, but this code passes a list. That combination can fail (or behave differently) on win32, which would break the fallback ADO auth path even whenazis installed. Build a platform-appropriate command (string forshell=True, list otherwise).
out = subprocess.run(
[
"az",
"account",
"get-access-token",
"--resource",
ADO_RESOURCE,
"--query",
"accessToken",
"-o",
"tsv",
],
capture_output=True,
text=True,
shell=(sys.platform == "win32"),
)
- Files reviewed: 14/14 changed files
- Comments generated: 0 new
- Review effort level: Lite
## Summary Build the Azure CLI authentication command as a string only when Windows requires shell execution, while retaining an argument list and shell-free execution on other platforms. Add regression coverage for both command shapes. ## Prompting Intent Resolve the current-head suppressed Copilot review finding on microsoft/SynapseML PR microsoft#2628 and prove the fallback authentication path used by release verification on Windows. ## Linked Sources - Release automation PR: microsoft#2628 - Fabric release guide: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 ## Rationale Windows resolves the Azure CLI through a command shim, so the verifier needs shell execution there; subprocess requires that shell command to be a string. Keeping list-based execution elsewhere preserves safe argument boundaries, while an actual token-less Windows replay proves the fallback can authenticate and inspect the live release. Co-authored-by: Copilot <[email protected]>
|
Addressed the current-head suppressed Windows auth finding in 6e80f27.
|
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Review details
Suppressed comments (1)
Previously missed (1) — in code that hasn't changed since the last review.
scripts/release/verify_release.py:313
- The Maven publication gate here verifies only
synapseml-core_{scala}(viapublic_maven()), but the workflow-generated release notes advertisecom.microsoft.azure:synapseml_2.12:${VERSION}(see.github/workflows/release-notes.yml:137) and the docs use thesynapseml_2.12coordinate (website/doctest.py:25). This can letverify_release.pyreport COMPLETE even if the primary install coordinate is missing (or vice versa). Consider aligning the verification to check the same Maven artifact(s) that users are instructed to consume (e.g., verify bothsynapseml_{scala}andsynapseml-core_{scala}, or switch to the canonical one).
"maven",
tp.key,
f"synapseml-core_{tp.scala}",
tp.oss_maven_version,
c.public_maven(tp.scala, tp.oss_maven_version),
- Files reviewed: 14/14 changed files
- Comments generated: 0 new
- Review effort level: Lite
## Summary Gate release completeness on both the user-facing synapseml_<scala> Maven coordinate and the release-guide synapseml-core_<scala> coordinate for every selected Spark target. Add a failing-install-coordinate regression and document the two-coordinate contract. ## Prompting Intent Resolve the current-head suppressed Copilot review finding on microsoft/SynapseML PR microsoft#2628 by aligning artifact verification with generated release notes, installation docs, and actual published releases. ## Linked Sources - Release automation PR: microsoft#2628 - Fabric release guide: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 - Live v1.1.3 release: https://github.com/microsoft/SynapseML/releases/tag/v1.1.3 ## Rationale The aggregate synapseml artifact is the coordinate users install and the one release notes advertise, while the guide explicitly points maintainers to synapseml-core. Requiring both prevents a GitHub Release from reporting complete when either the public install contract or the guide's Maven evidence is absent. Co-authored-by: Copilot <[email protected]>
## Summary Make the SBT launcher download fail fast with actionable HTTP errors and transient retries, and invoke the release verifier through the guaranteed Python 3 executable on Ubuntu. Lock both workflow contracts with tests. ## Prompting Intent Resolve both current-head suppressed Copilot findings on microsoft/SynapseML PR microsoft#2628 without changing the release approval or publication flow. ## Linked Sources - Release automation PR: microsoft#2628 - Fabric release guide: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 ## Rationale A failed launcher download should stop at the network boundary rather than creating a corrupt tool that fails later, and release publication must not depend on an optional python alias. Explicit curl failure semantics, bounded retries, and python3 make failures early and deterministic while preserving all human gates. Co-authored-by: Copilot <[email protected]>
## Summary Insert the release test directory explicitly before importing verify_release and bump_bbcvhd, matching the existing release-matrix test pattern. This keeps collection independent of pytest's default path-prepend behavior. ## Prompting Intent Resolve both current-head Copilot review threads on microsoft/SynapseML PR microsoft#2628 and prove the release tests collect under alternate pytest import modes. ## Linked Sources - Release automation PR: microsoft#2628 - Verifier import review: microsoft#2628 (comment) - BBC-VHD import review: microsoft#2628 (comment) ## Rationale Relying on pytest's default import mode makes test collection sensitive to runner configuration. Explicitly locating sibling modules is already the repository convention for release_matrix and allows these suites to run consistently from the repository root and under importlib collection. Co-authored-by: Copilot <[email protected]>
## Summary Normalize whitespace around rebuild-counter values and reject empty target keys directly in parse_iterations. Add positive whitespace and negative empty-target regression cases. ## Prompting Intent Resolve the current-head suppressed Copilot finding on microsoft/SynapseML PR microsoft#2628 and make release counter errors actionable at the CLI parsing boundary. ## Linked Sources - Release automation PR: microsoft#2628 - Fabric release guide: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 ## Rationale Rebuild counters are operator-entered recovery controls for immutable artifacts. Empty targets should fail as malformed KEY=N input rather than surfacing later as an unknown target, while spacing around a numeric value should not turn an otherwise valid recovery command into an error. Co-authored-by: Copilot <[email protected]>
## Summary Replace GNU sort -V in the release tag-history regression helper with Python 3 semantic-version ordering, reuse the sorted primary-tag stream, and support environments where the Python 3 executable is named either python3 or python. ## Prompting Intent Resolve the current-head suppressed Copilot portability finding on microsoft/SynapseML PR microsoft#2628 while preserving validation against the repository's complete historical tag list. ## Linked Sources - Release automation PR: microsoft#2628 - Live v1.1.3 release: https://github.com/microsoft/SynapseML/releases/tag/v1.1.3 ## Rationale Contributor-side release evidence should run on macOS/BSD as well as GNU systems. Python 3 is already a release-tooling dependency and provides deterministic numeric tuple ordering without relying on platform-specific sort flags; consuming the full stream also avoids early-pipeline termination behavior. Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
## Summary Make the release matrix the executable contract for Spark 3.5, 4.0, and 4.1; emit explicit public and Internal Maven queue commands; add full versus Internal-only release scopes; propagate rebuild counters; and fail release verification unless every expected Maven, pip, UPack, and tag artifact is present and commit-consistent. ## Prompting Intent Refresh PR microsoft#2628 on current master and make SynapseML-to-Fabric releases easy to operate, complete across supported Spark branches, and verifiably published to Maven. Follow historical releases and the SynapseML Fabric Release Guide v2, while producing an interoperable contract for the SynapseML-Internal follow-up. ## Linked Sources - GitHub pull request: microsoft#2628 - SynapseML Fabric Release Guide v2: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 - Historical release reference: https://github.com/microsoft/SynapseML/releases/tag/v1.1.3 ## Rationale Use one validated matrix instead of hand-maintained branch instructions so Maven, pip, UPack, tags, and BBC-VHD values cannot drift. Queue Maven publication explicitly because the downstream packaging pipeline does not publish Maven. Keep Internal-only hotfixes from republishing immutable public artifacts, and verify live artifact files plus peeled tag commits because green pipelines alone do not prove a complete release. Co-authored-by: Copilot <[email protected]>
## Summary Apply the repository-pinned Black 22.3.0 layout to the Fabric certificate test helper so PR validation accepts the rebased release automation changes. ## Prompting Intent Keep PR microsoft#2628 green after its release hardening update by fixing the exact formatting mismatch reported by the Python Style Check, without changing behavior or formatting unrelated files. ## Linked Sources - GitHub pull request: microsoft#2628 - Failed Python Style Check: https://github.com/microsoft/SynapseML/actions/runs/32958770630/job/98146240564 ## Rationale Apply only the formatter diff emitted by Black 22.3.0 because the local newer Black version accepted a layout that the repository-pinned CI version rejects. A focused follow-up preserves commit history and avoids unrelated repository-wide formatting churn. Co-authored-by: Copilot <[email protected]>
## Summary Probe Maven and PyPI artifact URLs with HEAD first, falling back to GET only when a server reports HEAD as unsupported with HTTP 405 or 501. Add regression coverage for successful HEAD probes, unsupported-method fallback, and missing artifacts in both paths. ## Prompting Intent Address the current-head review finding on PR microsoft#2628 while preserving the verifier's fail-closed semantics and making complete multi-branch Maven verification faster and less bandwidth-intensive. ## Linked Sources - GitHub pull request: microsoft#2628 - Review finding: microsoft#2628 (comment) - SynapseML Fabric Release Guide v2: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 ## Rationale Use HEAD for the common path so large JAR bodies are never opened unnecessarily. Fall back only for the standard unsupported-method responses, rather than masking authentication, server, or network failures, so operational errors remain actionable and missing artifacts still fail release verification. Co-authored-by: Copilot <[email protected]>
## Summary Add a discoverable SynapseML release skill with focused preflight, automation-boundary, recovery, and rollout references. Make the documented dry run work from a fresh checkout, keep historical review evidence out of version replacement, and add scoped verification that reports only Internal rows for an Internal-only patch. ## Prompting Intent The engineer asked to document the current SynapseML-to-Fabric release process through an agent skill in PR microsoft#2628. The skill needed to explain what can be previewed, which actions publish or tag state, where human approval remains mandatory, and how to recover without moving immutable tags or packages. The change also needed to pass the SynapseML PR loop and its six-round review gauntlet. ## Linked Sources - GitHub pull request: microsoft#2628 - Derivative tag automation: microsoft#2540 - SynapseML Fabric Release Guide v2: https://msdata.visualstudio.com/A365/_wiki/wikis/Osmos%20Team%20Wiki/130638/SynapseML-Fabric-Release-Guide-v2 - Public release reference: https://github.com/microsoft/SynapseML/releases/tag/v1.1.3 - Review evidence: reviews/release-skill/ ## Rationale Keep the main skill short and put commands and recovery detail in focused references so agents can load only what a release step needs. Use the release matrix and verifier as executable sources of truth instead of duplicating coordinates. Add an explicit Internal-only verification scope while preserving the previous nonzero-patch inference, and record the resolved scope in output so stored evidence cannot hide omitted OSS rows. Keep tag creation, publication, credentials, and rollout approvals behind explicit human gates. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
## Summary Move the six release-automation review reports into `review/pr-2628/`, rename them with the PR-number prefix, add an index README, and remove machine-local artifact paths. Exclude both the new `review` root and the historical `reviews` root from version replacement, with tests for directory and nested-file paths. ## Prompting Intent The engineer asked to move and rename PR microsoft#2628's review artifacts under `review/pr-2628/` and to follow the organization used by existing checked-in PR review evidence. ## Linked Sources - GitHub pull request: microsoft#2628 - Existing review-layout example: https://github.com/microsoft/SynapseML/tree/master/reviews/pr-2666 - Review evidence index: review/pr-2628/README.md ## Rationale Use the requested singular root while keeping the established PR-numbered subdirectory, filename prefix, and README pattern. Leave the existing `reviews/pr-2666/` history in place to avoid unrelated churn. Denylist both roots because both contain immutable reports with historical version strings that must not be changed by a future release bump. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
## Summary Move PR microsoft#2628 review evidence from the singular `review/pr-2628/` directory to `reviews/pr-2628/`. Add a repository-wide `AGENTS.md` rule for PR-numbered and feature-numbered review directories, and remove the now-unused singular-root version-bump exclusion. ## Prompting Intent The engineer clarified that committed reviews must live under `reviews/pr-<number>/`, or under the defined feature-numbered directory when there is no PR. They also asked to record this rule in `AGENTS.md` so future reviews do not use topic-named or singular-root directories. ## Linked Sources - GitHub pull request: microsoft#2628 - Existing review-layout example: https://github.com/microsoft/SynapseML/tree/master/reviews/pr-2666 - Repository guidance: AGENTS.md ## Rationale Use the plural `reviews` root because it matches the checked-in PR microsoft#2666 precedent and gives every review set a stable work-item identifier. Keep the PR and feature forms explicit in repository guidance, and remove the temporary singular-root handling rather than preserving two accepted layouts. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
## Summary Convert malformed UTF-8 or JSON HTTP 200 responses into verifier runtime errors that name the failing URL. Add regressions for HTML and truncated JSON bodies. ## Prompting Intent Resolve the current-head Copilot finding on PR microsoft#2628. Release operators must be able to identify which GitHub or Azure DevOps endpoint returned a malformed success response instead of receiving a context-free JSON decoder error. ## Linked Sources - GitHub pull request: microsoft#2628 - Copilot review finding: microsoft#2628 (comment) ## Rationale Catch only response-decoding failures at the HTTP helper boundary and retain the existing fail-closed behavior. Including the URL there gives every caller the missing backend context without logging request headers or credentials. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
It introduces and modifies high-impact release workflows and end-to-end publication gates across GitHub and Azure DevOps, which warrants final human review of the automation boundaries and operational safety.
Review tier: Lite
Findings: None
Issues resolved since last review (2)
| Severity | Finding |
|---|---|
scripts/release/verify_release.py — GitHub API calls will not authenticate because the Authorization header is currently set to the… View resolved comment |
|
scripts/release/verify_release.py — ADO-backed checks will never authenticate because the Authorization header is currently the literal… View resolved comment |
## Summary Add sealed source-bound release plans, explicit queue approval, durable recovery state, producer evidence, and guarded notes/BBC-VHD handoffs. Harden tag workflows, release versioning, PyPI collisions and ESRP staging. Keep ordinary CI on snapshot coordinates. Add history-preserving publisher retries, persistent local ledger claims and bounded lock inspection. Keep same-coordinate Maven retries disabled without whole-namespace absence proof. ## Prompting Intent The engineer asked for safer, more effective end-to-end release automation, repeatable command-line steps and a release skill, while allowing Internal to publish independently of new OSS releases. Human approval, reviewed source, immutable packages and existing runtime compatibility must remain intact. ## Linked Sources - Public release automation: microsoft#2628 - Operator commands: scripts/release/README.md - Release skill: .github/skills/synapseml-release/SKILL.md - Review findings and resolutions: reviews/pr-2628/ - Repository rules: AGENTS.md ## Rationale Bind intent once and preserve it through queueing, recovery and verification instead of recalculating package coordinates at every step. Keep inventory separate from producer evidence and require original approvals for staged rollout. This permits independent Internal releases without weakening source, destination or immutability checks. This is release/build infrastructure; no library API or dependency pin changes are included. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
|
/review |
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
It makes broad, high-impact changes to release workflows/policy gates and publication tooling that warrant final human validation beyond automated review.
Review tier: Lite
Findings: 1
New issues introduced by this change (2)
| Severity | Finding |
|---|---|
project/build.scala — refuseExistingReleaseBlob() uses Process(command).!!, which throws on any Azure CLI error… |
|
tools/esrp/prepare_jar.py — collect_artifacts() calls source.resolve() inside the per-module loop and again inside the… |
## Summary Use portable noninteractive SBT probe invocations. Preserve actionable blob inspection failures and cache each ESRP module directory's resolved path. Add failing-before regressions and retain the current-head review resolutions. ## Prompting Intent The engineer asked to continue the coordinated release improvements and commit them. The PR loop requires fixing current-head CI and review findings rather than treating historical passing runs as evidence for new code. ## Linked Sources - Public PR: microsoft#2628 - CI failure: https://github.com/microsoft/SynapseML/actions/runs/33964603972 - Blob diagnostic: microsoft#2628 (comment) - ESRP resolution: microsoft#2628 (comment) - Review and resolution history: reviews/pr-2628/pr-2628-attempt-2-review-6-claude-opus-5.md ## Rationale An explicit SBT task and closed stdin work with both native and wrapper launchers. Keep query failure distinct from artifact absence while preserving the underlying process error. Resolve each admitted source directory once without dropping containment checks. This is release infrastructure, not a library feature or dependency change. Co-authored-by: Copilot <[email protected]> Copilot-Session: 476d113f-dd35-40c6-bc79-005dcccd7b79
|
/azp run |
|
Azure Pipelines will not run the associated pipelines, because the pull request was updated after the run command was issued. Review the pull request again and issue a new run command. |
|
/review |
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
It changes release-critical CI/workflows and publication/immutability guards where mistakes can directly impact tagging and package publication safety.
Review tier: Lite
Findings: None
Issues resolved since last review (2)
| Severity | Finding |
|---|---|
tools/esrp/prepare_jar.py — collect_artifacts() calls source.resolve() inside the per-module loop and again inside the… View resolved comment |
|
project/build.scala — refuseExistingReleaseBlob() uses Process(command).!!, which throws on any Azure CLI error… View resolved comment |
|
/azp run |
|
Azure Pipelines: Successfully started running 1 pipeline(s). |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #2628 +/- ##
==========================================
- Coverage 87.52% 87.48% -0.04%
==========================================
Files 341 341
Lines 21035 21035
Branches 2232 2232
==========================================
- Hits 18410 18403 -7
- Misses 2625 2632 +7 🚀 New features to boost your workflow:
|



What changed
This PR turns a calculated release checklist into an approved, resumable
release process. One sealed plan records the reviewed commits, selected
repositories and runtimes, package versions, rebuild counters, and feeds.
The driver queues only the selected work and saves its build IDs.
Internal can release against an existing OSS base without rebuilding or
republishing OSS. New-base releases publish the OSS dependencies first, so
Internal CI no longer has to pass before its dependency exists.
full,repositories=ossfull,repositories=internal, patch0internal-only, nonzero patchImportant safeguards
preflight,status, and a plainresumemake no remote writes. Queueingrequires
--applyand the exact human-approved--approve-plan.submissions. A persistent same-directory claim rejects a second state
filename. Explicit pip/UPack retries preserve history and require complete
absence for the original failed group. Maven retries remain unsupported;
a failed Maven publication needs a new coordinate and approved plan.
the exact source and refuse immutable-package overwrites. Public PyPI
collisions remain failures, and primary Maven evidence includes the wheel.
complete, fresh producer evidence with matching source, request, and output
hashes. GitHub receives only bounded public Maven evidence, never Internal
bindings or Azure credentials.
using their original evidence. Internal hotfixes preserve the exact OSS pin.
inside a production feed is not a rehearsal.
Release workflows also enforce the full target policy, push tag families
atomically, and preserve the reviewed merge commit. ESRP staging is explicit
and nondestructive for both supported Scala lines.
Commands and documentation
Start with the release command guide. It includes
plan generation, no-write previews, approved execution, status, adoption,
guarded retries, read-only lock inspection, evidence, notes, and BBC-VHD handoff.
The release skill links focused
preflight, recovery, and approval-boundary references.
AGENTS.mdlinks theskill and requires review reports under
reviews/pr-<number>/or a definedfeature directory.
Companion changes cover Internal publication, the official publisher, and the
canonical release guide.
These must land before operators use the complete cross-repository procedure.
Validation and remaining gates
Review findings and resolutions are retained in reviews/pr-2628.
All six implementation review rounds are complete.
Follow-up fixes make SBT probes portable, add blob-inspection failure context,
and resolve each ESRP module directory once. Both follow-up review threads are
resolved.
On head
4c166c4928, GitHub run 33965780135passed all 584 release cases and compilation, Scala style, and Python formatting
checks. Separate Linux/JDK11 runs exercised the native SBT probes. The publisher's
four real-driver consumer cases also passed. The current-head Copilot Lite
review reports no findings but still calls for human review of release-critical
changes.
Azure run 234655017
hit a hostname/certificate mismatch during task authentication, before the NN
test and artifact-publication scripts ran.
Retry 234665132
finished on the same merge commit and exact reviewed source. Publish succeeded,
all 40 NN tests passed, and every other job except the advisory Spark 4.1 replay
succeeded, including Databricks GPU E2E. Azure reports
partiallySucceeded;the advisory replay is still a failed check, not a fully green run.
The advisory Spark 4.1 replay conflicts only in
tools/esrp/prepare_jar.py,where the new explicit-Scala implementation replaces the old hardcoded suffix.
In isolated full checkouts of port
06897e5b27, both the baseline with thethree CI prerequisites and the PR replay with that one manual resolution passed
sbt test:compileon JDK17, Scala 2.13.17, and Spark 4.1.1. An independent replaymatched every staged source byte. No shared port branch was changed.
The automatic replay still needs that resolution; compilation is not runtime
validation.
No production release, approval click, merge, or Fabric rollout has been
performed. ESRP/SAW approval, PR merges, White-Glove, and release-train selection
remain with authorized people.
Does this PR change any dependencies?
Does this PR add a user-facing library feature?