guide: document standalone OpenVMM releases - #3988
Conversation
There was a problem hiding this comment.
Pull request overview
Adds Guide documentation for a standalone OpenVMM (pre-1.0) release/support model, splitting it from the existing OpenHCL release-branch process and updating related Guide navigation/reference content.
Changes:
- Adds a new Guide page describing OpenVMM release cadence, tag semantics, and maintainer runbooks.
- Re-scopes the existing release management page to OpenHCL and cross-links between OpenVMM/OpenHCL release guidance.
- Updates the CLI reference and Guide SUMMARY to reflect the new documentation structure.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| Guide/src/SUMMARY.md | Splits the previous combined “Releases” entry into distinct OpenVMM vs OpenHCL pages. |
| Guide/src/reference/openvmm/management/cli.md | Documents --version/-V behavior in the CLI reference. |
| Guide/src/dev_guide/contrib/release.md | Renames/reframes the page as OpenHCL release management and adds cross-links/admonitions. |
| Guide/src/dev_guide/contrib/openvmm_release.md | New OpenVMM standalone release model/support policy + normal/patch runbooks. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
Guide/src/dev_guide/contrib/release.md:19
- The opening sentence is duplicated, which reads like a copy/paste error and makes the paragraph awkward.
Occasionally, the OpenHCL project will declare upcoming release milestones. We
Occasionally, the OpenHCL project will declare upcoming release milestones. We
Guide/src/reference/openvmm/management/cli.md:13
- This
--versionbullet claims a tag/dirty/revision-based version format, but the current CLI uses clap’s built-in--versionoutput (derived from the Cargo package version), which is typically0.0.0for in-repo builds. Either update the implementation or keep the docs generic so they stay accurate.
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
Guide/src/reference/openvmm/management/cli.md:13
- The
--version/-Vdescription doesn't match the current implementation:Optionsis derived withclap::Parserand parsed viaOptions::parse, so clap will print the Cargo package version (it won't include git tag / dirty state / revision metadata as described here). This doc should reflect the actual output, or be softened to avoid specifying git/tag semantics that aren't implemented.
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (3)
Guide/src/reference/openvmm/management/cli.md:13
- The
--versiondescription currently claims tag-derived OpenVMM source identity output, but theopenvmmCLI is clap-derived and (as of current code) reports the Cargo package version rather than a Git tag/revision-derived OpenVMM product version. This makes the CLI reference misleading until the versioning work lands.
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
Guide/src/dev_guide/contrib/openvmm_release.md:85
- This section describes tag-derived build identity as current behavior, but there doesn’t appear to be an implementation in-tree yet (e.g., no
openvmm-v*tag parsing logic, and other code still usesenv!("CARGO_PKG_VERSION")). Please mark this as the intended model (or date-qualify it) so readers don’t assume it already reflectsopenvmm --versiontoday.
OpenVMM resolves its displayed version from source identity:
Guide/src/dev_guide/contrib/openvmm_release.md:98
- This states that
openvmm --versionprints the tag-derived identity, but current code appears to still rely on Cargo package versioning (e.g.,env!("CARGO_PKG_VERSION")in the snapshot manifest). Until the tag-derived identity is implemented, this should be phrased as future/intended behavior (or explicitly note the current behavior).
`openvmm --version` prints the concise displayed version. The full source
revision remains available as separate embedded build information.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
Guide/src/reference/openvmm/management/cli.md:13
- The
--versionbehavior described here (tag-derived version,+dirty, and Git revision) doesn’t match the current CLI implementation.openvmm_entry::cli_args::parse_options()callsOptions::parsewithout overriding clap’s version string, so--versioncomes from Cargo package metadata (seeopenvmm/openvmm_entry/src/cli_args.rs:40-66).
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
Guide/src/dev_guide/contrib/openvmm_release.md:101
- This section describes
openvmm --versionprinting a tag/Git-derived “displayed version”, but the current code uses Cargo package metadata for versioning (e.g.,env!("CARGO_PKG_VERSION")is recorded into snapshot manifests inopenvmm/openvmm_entry/src/vm_controller.rs:477). Unless the implementation has landed elsewhere, this should be phrased as planned/future behavior to avoid misleading readers.
`openvmm --version` prints the concise displayed version. The full source
revision remains available as separate embedded build information.
A source tree with neither Git metadata nor generated release metadata warns
that `0.0.0-dev` is not an official release identity.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (3)
Guide/src/dev_guide/contrib/openvmm_release.md:89
- This section describes a specific source-identity-derived displayed version scheme, but there is no corresponding implementation in the current tree (no
openvmm-v*tag parsing / git-describe logic, and no.openvmm-release.jsonhandling). Since the PR description says planned behavior should be marked as under development, this sentence should be labeled accordingly to avoid implying it is current behavior.
OpenVMM resolves its displayed version from source identity:
Guide/src/dev_guide/contrib/openvmm_release.md:107
- These sentences describe build/CLI behavior (“multiple tags on HEAD fails the build” and
openvmm --versionprinting the concise identity) that is not implemented in the current codebase (openvmm_entry::cli_args::parse_options()just callsOptions::parse, and there is no OpenVMM release identity code to drive--version). Mark these as planned/under-development to keep the Guide accurate until the implementation lands.
More than one OpenVMM release tag on `HEAD` fails the build rather than
selecting an arbitrary version.
`openvmm --version` prints the concise displayed version. The full source
revision remains available as separate embedded build information.
Guide/src/reference/openvmm/management/cli.md:13
- This adds a detailed description of
--version/-Voutput, but the current code path (openvmm_entry::cli_args::parse_options()→Options::parse) does not implement an OpenVMM release-identity scheme (noopenvmm-v*tag parsing / git-describe logic). To avoid documenting behavior that doesn’t exist yet, mark this flag/output as planned (or remove it until the implementation lands).
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (3)
Guide/src/reference/openvmm/management/cli.md:13
- The new
--version/-Vdescription claims Git-tag/dirty/revision-aware output, but the current CLI is parsed viacli_args::Options::parse()(clap derive) without any custom version string. That means--versionprints clap's default version (Cargo metadata), not a Git-derived source identity.
* `--version`, `-V`: Prints the concise OpenVMM source identity and exits. A
clean exact release tag reports `MAJOR.MINOR.PATCH`, a dirty tagged checkout
adds `+dirty`, and an untagged checkout reports a development version
containing the source revision.
Guide/src/dev_guide/contrib/openvmm_release.md:107
- Given the build-identity scheme is described as not yet implemented, this should be phrased in future tense (or otherwise scoped) so it doesn't claim current
openvmm --versionbehavior that isn't present inmain.
`openvmm --version` prints the concise displayed version. The full source
revision remains available as separate embedded build information.
Guide/src/dev_guide/contrib/openvmm_release.md:90
- This section reads like current behavior (specific
0.0.0-dev+g…formats, dirty tagging, andopenvmm --versionoutput), but there is no corresponding git/metadata-based versioning implementation inmaintoday. The PR description says planned automation/artifacts are explicitly marked as under development; this section should be similarly marked or written in future tense to avoid documenting behavior that doesn't exist yet.
## Build identity
OpenVMM resolves its displayed version from source identity:
Describe the source archive as behavior provided once the draft automation lands and align the OpenHCL navigation title with its page heading. Copilot-Session: 13086ab2-fa94-4be1-b276-ee1b96e7caea
Explain pre-1.0 compatibility expectations, Git revision notation, ambiguous release tags, and metadata-free source trees. Copilot-Session: 13086ab2-fa94-4be1-b276-ee1b96e7caea
Use the current OpenHCL Release Management title in the OpenVMM release guide cross-reference. Copilot-Session: 13086ab2-fa94-4be1-b276-ee1b96e7caea
Wrap the two release-guide paragraphs called out in review without changing their content. Copilot-Session: 13086ab2-fa94-4be1-b276-ee1b96e7caea
Scope the Build identity section and the CLI --version reference as the intended (not yet implemented) model, since openvmm --version currently reports the Cargo package version. Addresses recurring review feedback.
Distinguish the nine release archives from the SHA256SUMS checksum file in the release assets intro.
…e doc - Show the cargo build command in 'Building a release from source' and link to the Building OpenVMM page for prerequisites and options. - Add a 'Reporting security issues' section pointing to SECURITY.md/MSRC.
Clarify that pre-1.0 OpenVMM rolls forward from main (fixes, including security, ship in the next release, cut early when urgent) and that the patch-version scheme and Patch release runbook describe a post-1.0 release-branch servicing model. Keeps all sections; adds post-1.0 admonitions and cross-links.
Add a downstream-packaging page covering how to build the `openvmm` gnu binary from the public source release, independent of the in-repo `.packages/` provisioning flow. The page records the empirically validated requirements: the native build dependencies (gcc, glibc-devel, kernel-headers, openssl-devel, a protobuf compiler), the two required environment overrides (PROTOC and OPENSSL_NO_VENDOR), the offline `cargo vendor` build model, and the runtime shared-library set. It clarifies that the gnu build uses the OpenSSL crypto backend and does not link SymCrypt (musl-only), and notes the workspace MSRV caveat. Includes a worked Azure Linux RPM example (BuildRequires/Requires and %build/%install) modeled on the cloud-hypervisor package, and links it from SUMMARY.md. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: a7c0a618-7851-4fa6-9755-24402ff573e0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: a7c0a618-7851-4fa6-9755-24402ff573e0
- Rename release.md to openhcl_release.md (it is OpenHCL-specific); update all inbound links (SUMMARY, openvmm_release, save-state). - Allow patch releases to make a breaking change when a fix genuinely requires one (e.g. an urgent security fix). - Reword the Windows-signing warning as a factual statement instead of a meta-instruction. - Drop OpenHCL servicing mechanics from the OpenVMM 'How fixes flow' section. - Reword the source-archive note in the packaging guide declaratively.
Pre-1.0 OpenVMM rolls forward from main and does not produce patch releases, but the security section still routed confirmed issues through the post-1.0 patch runbook. Point it at the roll-forward path and defer patching to post-1.0 stable release branches. Also record that the openvmm-v* namespace is reserved and a noncanonical tag in it fails the build, reserve the fourth Windows version field for distributors rather than fixing it at zero, and note that Authenticode signing is a committed fast-follow. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
mdbook-admonish rewrites the fenced block into raw HTML, and CommonMark runs an HTML block until a blank line. Without one, the paragraph after the warning was absorbed into that block: it rendered without a <p>, the backticks stayed literal, and <MAJOR>/<MINOR> were emitted as live tags that the browser dropped, so the line read "the `release/.` branch". Add the blank line and rewrap the paragraph to 80 columns. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
Address review feedback on the release documentation: - Drop the `--version` CLI bullet; the implementation PR owns documenting that flag once it actually behaves as described. - Qualify the OpenHCL page's cross-reference so it no longer implies OpenVMM creates patch branches today. - Document that Git identity takes precedence over generated release metadata, so `git init` inside an extracted source archive shadows it. - Stop hardcoding the archive count, which rots when a target is added. - Split the version scheme out of the pre-1.0 cadence section so the page no longer describes patch releases in present tense immediately after saying they do not exist. - Consolidate the scattered "not implemented yet" hedges into one status callout at the top. - Drop "How fixes flow", which restated the cadence and security sections. - Link forward to the packaging page and nest it under this page in the nav. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
Downstream Linux distributions want to build and package OpenVMM from public source before prebuilt binaries exist, so publish source first and defer the binary archives to a later phase. - Split "Release assets" into a source release and a later binary phase. The source archive and `SHA256SUMS` are what the initial releases publish. - Turn the Windows signing gap from a caveat on a shipping artifact into a prerequisite for the binary phase, which is no longer on the critical path. - Rework the release workflow steps and the confirm-the-release checklist for a source-only release, including verifying `.openvmm-release.json` and that a build from the extracted archive reports the release version. - Say that the source archive is source only, and that the packager owns the vendored dependency tarball and its integrity metadata. - Treat an MSRV increase as a breaking change, since it can break downstream builds on distributions whose packaged Rust is older, and call it out in release notes. Stop hardcoding the MSRV in the RPM example. - Note that a distribution sets its own support policy and may service a release this project no longer supports. - Reframe the packaging page so the glibc build reads as the supported path rather than an exception to prebuilt archives that do not exist yet. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
A from-scratch measurement of the distribution build configuration on Ubuntu turned up two inaccuracies in the packaging guide. - The build did not link `libz`, so drop `Requires: zlib` from the worked example and tell packagers to confirm the runtime set for their own build rather than copying a fixed list. RPM derives these from ELF `NEEDED` entries anyway. - Note that `cargo vendor` has no per-package scoping and vendors the whole workspace: 498 crates where the binary needs 254, much of it Windows-only crates a Linux package never compiles. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
The release workflow publishes a draft that a maintainer reviews and publishes by hand, so the runbook gains a publish step and drops the claim that there is no draft-review phase. It also no longer validates commit topology or the number of tags on a commit. The tag format is still enforced, because that string becomes the archive name and the version in the release metadata, but ancestry is now the releasing maintainer's responsibility -- which the draft is there to backstop. Records that a rerun replaces the draft's assets, and that the first job proves the source builds the way a distribution packages it before anything is published. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
The release workflow skips a tag that already has a release rather than replacing its assets, so regenerating a draft means deleting it first. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
The verification commands only existed in the maintainer runbook, so a downstream packager reading the packaging page never saw them -- despite being the party who most needs them before trusting a Source0. Documents SHA256SUMS, provenance attestation, and the fact that the archive is assembled reproducibly. Notes why the attestation is worth checking separately: whoever could replace the archive could regenerate its checksum, but not its attestation. Also promotes the warning about GitHub's automatically generated source links, which are not the OpenVMM source release, from an aside in the worked example to where a packager first obtains the source. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
e6aa096 to
f08f8fa
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
Guide/src/dev_guide/contrib/openvmm_release.md:297
- PR description says publication is automatic after builds/checksums/attestations succeed, but this runbook describes publishing a draft release that a maintainer must review and publish by hand. Please reconcile the Guide text with the intended automation level (or adjust the PR description if the doc is correct).
Tag creation starts the release, but it does not complete it. The workflow
publishes a **draft** GitHub Release, which a maintainer reviews and publishes
by hand. Releasing is new enough that a human should look at the assembled
release before it becomes public.
Guide/src/dev_guide/contrib/openvmm_release.md:252
- PR description mentions Windows release assets being explicitly unsigned initially, but this section says publishing unsigned Windows executables is not acceptable and blocks the binary phase until Authenticode signing exists. Please align the documentation (or PR description) on whether unsigned Windows assets will ever be published in the initial phase.
```admonish warning title="Windows signing is a prerequisite for this phase"
The release workflow cannot Authenticode-sign Windows artifacts today.
Publishing unsigned Windows executables is not acceptable, so Authenticode
signing must land before the binary phase begins. Deferring binaries keeps this
off the critical path for the source release, whose integrity comes from
`SHA256SUMS` and the build provenance attestations.
The claim held only because both jobs happened to assemble the same thing; say that they resolve one identity through one code path, which is what actually makes it true. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0ba1c0df-faf0-4a0e-b39d-c3eb0e363fce
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
Guide/src/dev_guide/contrib/openvmm_release.md:5
Guide/src/dev_guide/contrib/style_guide.mdrecommends keeping Guide pages under 400 lines, but this new page is ~461 lines long. Consider splitting the runbooks (normal/patch) into separate sub-pages to keep the policy overview easier to navigate and maintain.
# OpenVMM Release Model and Support
This page describes standalone OpenVMM releases, support policy, source-build
identity, and the maintainer release runbook. OpenVMM versions are independent
from OpenHCL servicing versions.
Guide/src/dev_guide/contrib/openvmm_packaging.md:16
- This page describes verifying release assets (
openvmm-<VERSION>-source.tar.gz,SHA256SUMS, attestations), butopenvmm_release.mdexplicitly says the release tooling is not implemented yet and no public release tags should be created. Adding a top-level warning here (similar toopenvmm_release.md) would prevent downstream packagers from thinking official release assets already exist.
# Packaging OpenVMM for a Linux Distribution
This page describes building the `openvmm` binary as a Linux distribution
package, from public source only. It is aimed at downstream packagers (for
example, an RPM or `.deb` maintainer) who build from the official OpenVMM source
Summary
Document the standalone pre-1.0 OpenVMM release and support model.
openvmm-vMAJOR.MINOR.PATCHtags are the public version authoritymainfirstThe guide includes normal-release and patch-release maintainer runbooks plus source-consumer verification guidance. Planned artifacts and automation are explicitly marked as under development until the draft implementation lands.
Draft implementation stack: #3989 and benhillis#5, #6, and #7.