Skip to content

feat: automate calendar-versioned probe binary releases - #105

Merged
MikeGrier merged 2 commits into
mainfrom
mikegrier/publish-probes
Sep 19, 2026
Merged

MikeGrier merged 2 commits into
mainfrom
mikegrier/publish-probes

Conversation

@MikeGrier

Copy link
Copy Markdown
Owner

Summary

Automate binary releases for both probe packages through CI and release-please, so downloads no longer depend on manually versioning and tagging the placement tool or building platform probes from a checkout.

  • Manage both probes with UTC YYYY.MMDD.N versions, including dependency-triggered updates, while retaining ordinary library semver behavior.
  • Preserve placement-probe-v* tags and existing placement EXE downloads. Add x64 and ARM64 platform-probe ZIPs containing every Cargo binary target, documentation, build identity, and SHA-256 sidecars.
  • Build with default features, reject the test-only renderer oracle, and verify executable census, PE architecture, and tag/version agreement.
  • Restrict binary artifact uploads and attestations to tag-push runs. PR and manual-dispatch runs remain validation-only, even when dispatch targets a tag. Preserve release-please release notes when attaching assets.
  • Keep both packages off crates.io; extend publication-route checks and align distribution documentation. Complete PB-1.

Both probe release bumps are intentional: the shared automation adds a release route for each package. No registry-library package path is changed.

Validation

Passed locally:

  • Locked npm installation and release-tooling tests, including real Rust release candidates, dependency-triggered calendar and lockfile updates, ZIP round trips, and rejected unsafe workflow configurations.
  • Actual x64 and ARM64 platform-probe archive builds.
  • Both probe test suites and doctest phases.
  • Rust formatting, Clippy with warnings denied, and default-workspace debug/release checks.
  • Publication-route, workflow-reference, release-scope checker tests, encoding, and staged whitespace checks.

Debug builds emitted non-failing incremental-cache access notes. Hosted token permissions, asset uploads, and attestation issuance have not yet been exercised by this change.

Release Sequence

After merging this PR, release-please proposes the probe versions and changelogs. Merging that release PR creates tags that trigger binary publication. Preserve the feat: subject when squash-merging. RELEASE_PLEASE_TOKEN must be able to create tags that trigger downstream workflows; no release or tag was created locally.

Manage both binary-only probe packages through release-please with UTC
calendar versions for direct and dependency-triggered updates. Preserve
placement's tag prefix and executable assets; package every platform probe
for x64 and ARM64 with default features, checksums and build identity.

Only tag-push runs upload binaries or mint attestations. Preserve generated
release notes and keep both packages off crates.io. Extend publication-route
checks, exercise the real release-please Rust/Cargo implementations and ZIP
contents, and align the distribution docs with the new routes.

Release scope: both probe bumps are intentional. The shared automation is
the feature for both packages, not a docs-only ride-along; no registry library
path is touched. Sweep: corrected checkout-only, manual-version and release-
scope claims across both probes' docs, manifest comments, rustdoc and tools.

Validated npm ci/tests, both platform archive architectures, probe suites and
doctest phases, cargo fmt/clippy, default debug/release checks, publication
routes, workflow references, scope-checker tests and encoding. Hosted upload
and attestation require the eventual tag-push run; no release is created here.

Completed item: PB-1: Automate both probe binary releases through CI and release-please.
Copilot AI lite review requested due to automatic review settings September 19, 2026 21:50

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.

Copilot review overview

🟡 Changes recommended

There is at least one confirmed correctness issue (Windows path case-sensitivity in .scratch validation) and a documented version-format mismatch that should be corrected before merge.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 Medium severity · 2 Low severity

Open (3)
What changed in this PR

This PR integrates both probe packages (windows-placement-probe and windows-platform-probes) into release-please and adds CI workflows + Node-based tooling to produce and attach calendar-versioned, architecture-specific binary artifacts (EXEs and ZIPs) on tag pushes, while keeping probes off crates.io.

Changes:

  • Add custom release-please wrapper/versioning strategy (probe-calver) and register both probe packages in release-please-config.json.
  • Introduce Node-based release/policy tooling under .github/release/ (calver, packaging, publication-guard checks) and run it in CI.
  • Add/adjust GitHub Actions workflows to validate on PRs but only upload/attest/publish on probe tag pushes; update docs/design notes to reflect the binary-only distribution route.
File Description
tools/​check-publishable.ps1 Excludes binary-only probe packages from crates.io publishability checks and runs the Node publication-route checker.
tools/​check-commit-scope.ps1 Updates documentation/comments to reflect probes being release-please managed (binary releases).
release-please-config.json Adds both probes as managed packages using probe-calver versioning.
DEVELOPMENT.md Documents binary-only probe release routes, tags/assets, and local validation commands.
DESIGN-RATIONALE.md Adds rationale section for probe release automation decision D-PB.
DESIGN-NOTES.md Adds root decision D-PB describing probe release automation contract.
crates/​windows-platform-probes/​src/​lib.rs Updates crate-level docs to reflect binary distribution despite publish = false.
crates/​windows-platform-probes/​README.md Adds download instructions and attestation verification guidance.
crates/​windows-platform-probes/​DESIGN-NOTES.md Updates distribution decision text and marks supersedence by D-PB.
crates/​windows-platform-probes/​CHECKLIST.md Updates checklist commentary to reflect the new binary-release reality.
crates/​windows-platform-probes/​Cargo.toml Updates dependency/distribution commentary for binary builds vs registry publication.
crates/​windows-placement-probe/​README.md Updates download link and documents new release-please managed distribution.
crates/​windows-placement-probe/​DESIGN-NOTES.md Updates design note to reflect release-please-managed calendar versioning.
COMPLETED-PLANS.md Records completion of PB-1 plan in the repository plan archive.
COMPLETED-CHECKLIST.md Archives the PB-1 checklist item and its verification notes.
.release-please-manifest.json Seeds release-please manifest with probe version baseline(s).
.gitignore Ignores .github/release/node_modules/ for the new Node tooling.
.github/​workflows/​release-please.yml Replaces release-please-action usage with a Node wrapper that runs tests then executes release automation.
.github/​workflows/​release-platform-probes.yml New workflow to build, package, upload, attest, and attach platform probe ZIPs on tag pushes.
.github/​workflows/​release-placement-probe.yml Updates placement probe workflow to integrate with new release flow and preserve release-please notes.
.github/​workflows/​ci.yml Adds probe-release tests and ensures Node tooling is available for publishability checks.
.github/​release/​release.test.cjs Adds tests validating calendar versioning and release/proposal sequencing behavior.
.github/​release/​release.cjs Implements the release-please wrapper and registers probe-calver + workspace behavior.
.github/​release/​package.json Introduces Node package definition for release tooling and its dependencies.
.github/​release/​package-probes.test.cjs Adds unit tests for probe packaging and PE architecture/census checks.
.github/​release/​package-probes.cjs Implements metadata-driven probe packaging and SHA-256 sidecar generation.
.github/​release/​package-lock.json Locks Node dependencies for reproducible CI/tooling runs.
.github/​release/​check-publication.test.cjs Adds tests asserting publication guards reject unsafe/misconfigured workflows/routes.
.github/​release/​check-publication.cjs Implements publication-route consistency checks across manifests, workflows, and config.
.github/​release/​calver.test.cjs Adds tests for calver rollover/increment semantics and invalid input rejection.
.github/​release/​calver.cjs Implements calver bump logic used by the release-please wrapper.
.github/​release/​binary-packages.json Declares the registry of binary-only packages and their associated workflows/components.
Files not reviewed (1)
  • .github/release/package-lock.json: Generated file

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/release/package-probes.cjs Outdated
Comment thread DESIGN-NOTES.md Outdated
Comment thread DEVELOPMENT.md Outdated
Update error handling for output directory validation and clarify versioning format in documentation.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings September 19, 2026 21:56

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.

Copilot review overview

🔵 Needs a closer look

The new release-please wrapper code includes a risky option-merging pattern that should be corrected before relying on it for automated releases.

Review effort: Lite
Findings: None

Resolved since last review (3)
Files not reviewed (1)
  • .github/release/package-lock.json: Generated file
Previously missed (2)

In code that hasn't changed since last review

Medium severity Guard options.type spread to merge only object overrides

.github/​release/​release.cjs:27

In registerCalendarVersions, the registerPlugin('cargo-workspace', ...) factory spreads options.type into the options object. options.type can be a string (e.g. 'cargo-workspace'), and spreading a string produces numeric character keys (and is generally unintended), which risks surprising behavior if release-please starts validating/iterating option keys more strictly. Guard the spread so only object-type overrides are merged.

Low severity Validate required files before invoking publication checks

tools/​check-publishable.ps1:58

binary-packages.json and check-publication.cjs are now required inputs for this script, but they are read/invoked before any Test-Path validation. If either file is missing (or node fails to execute), this will fail with a less actionable exception than the script’s existing "cannot check publication" guard. Consider adding these paths to the required-file check before invoking/reading them.

@MikeGrier
MikeGrier merged commit ce1ec46 into main Sep 19, 2026
36 checks passed
@MikeGrier
MikeGrier deleted the mikegrier/publish-probes branch September 19, 2026 22:13
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.

2 participants