Skip to content

nvx-rs: delete the bundled feature and its build script (SL6.6a) - #1524

Merged
Pedro Henrique Penna (ppenna) merged 2 commits into
feature/nvx-refactorfrom
agents/slim-sl6-6a-bundled
Nov 12, 2026
Merged

Pedro Henrique Penna (ppenna) merged 2 commits into
feature/nvx-refactorfrom
agents/slim-sl6-6a-bundled

Conversation

@ppenna

@ppenna Pedro Henrique Penna (ppenna) commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Leaving code only. This PR changes only code that this effort removes from NVX: the bundled feature, with its build script (nvx-rs/build.rs), links = "nvx", nvx-rs/artifacts.json, the bundle variables (NVX_BUNDLE_DIR, NVX_BUNDLE_HYPERVISOR, NVX_BUNDLE=skip and DEP_NVX_ARTIFACTS_DIR) and Artifacts::bundled, with the edits that remove references to them. Nothing that stays changes, and no later PR uses what it changes, so the size limits for kept code don't apply.

Part of #1122 (SL6.6a, "The bundled feature is gone"). Parent #1087, umbrella #1076.

It doesn't depend on SL6.3's deletions, the old configs and launch code: nothing there uses the feature, its build script, its variables or Artifacts::bundled. #1122 lists SL6.3 first, so this PR merges after it.

What and why

The bundled feature staged a pinned NVX release at build time. Its build script downloaded the package that artifacts.json pinned, or copied the release that NVX_BUNDLE_DIR named, for the Linux package that NVX_BUNDLE_HYPERVISOR chose, unless NVX_BUNDLE=skip. It verified the release against its SHA256SUMS and contract::manifest_mismatches, and exported the staged directory to the library and, through links = "nvx", to the build scripts of dependents as DEP_NVX_ARTIFACTS_DIR. Nothing in NVX uses it, and #1076 releases the crate without it. This PR does SL6.6a's Scope:

  • The feature and its build script go: nvx-rs/build.rs, nvx-rs/artifacts.json, the bundled feature, links = "nvx", and the [build-dependencies] that only the build script used. Cargo.lock doesn't change, since host still enables sha2 and serde_json for the library.
  • Artifacts::bundled goes, the public method that returned the staged release (always None without the feature), with the private BUNDLED_DIR (NVX_BUNDLED_ARTIFACTS_DIR) and the bundle parameter of the private discover_with. Artifacts::discover loses its fourth source, the staged directory. Its three other sources, in the same order, stay, and so do their variables and error codes. Its error no longer suggests building the crate with the feature. The public API snapshots lose two lines on each platform, nvx::Artifacts::bundled and nvx::host::artifacts::Artifacts::bundled. Nothing is added. No other crate-private code became unused: the warning-denied builds of each feature set pass.
  • What stays: NVX_OPENVMM, NVX_KERNEL, NVX_INITRD, NVX_ARTIFACTS_DIR, the nvx/ release beside the executable, NVX_AUTO_DOWNLOAD and NVX_RS keep their meaning. contract::manifest_mismatches, with the time ABI's and the restore packet's fields, stays for discovery (check_manifest) and the CLI's downloads. contract.rs only loses the sentence that it had to build alone because the build script included it. BOOT_CONTRACT_VERSION and CONTROL_CONTRACT_REVISION don't change.
  • CI and the tooling stop building, checking or listing bundled and its files:
    • check-nvx-rs drops its Check artifact bundling step, and the NVX_BUNDLE: skip of its Lint, Test, documentation, MSRV and macOS steps, whose --all-features builds now run no build script. The mutants workflow drops its NVX_BUNDLE: skip too.
    • crate_release.py no longer requires build.rs or artifacts.json in the package, and no longer strips the bundle variables from the build's environment. It builds the package once, with every feature, rather than once for each Linux package that it bundled: bundle_hypervisors goes, with the platform parameters of build_package and package_release that only it read.
    • The guest binaries' source inventory (GuestRustBuildConstants.SOURCE_FILES in build_constants.py) and the inventory of the nvx-rs that nvx.py builds (nvx_rs.source_files()) no longer list nvx-rs/build.rs. Both fail on a listed file that is missing. nvx.py still records and checks the provenance of the nvx-rs that it builds (Validation).
  • The docs follow: the rustdoc of the crate's features, host::artifacts and the CLI's downloads; Cargo.toml's comments; nvx-rs/README.md (the layout, host::artifacts, download, the features table, the guest binaries' inputs, the test commands and check-nvx-rs's summary, and the Bundled artifacts section, which goes); doc/ci.md (the guest images' inputs, the crate release's checks and check-nvx-rs); doc/usage.md (the inputs of nvx-rs's provenance and of the guest binaries' identity); doc/distribution.md (the published crate's bundle, and the manual publish snippet's cargo check --features bundled); doc/project-structure.md; and doc/contribute.md.
  • The case matrix: CI's Check artifact bundling step retires, so the CI section counts 69 tests: 42 kept, 3 rewritten and 24 retired. The notes of crate-package and crate-release say that the package holds no build script or artifacts.json, and that crate-package builds it once.

One reference removal beyond the Scope's list, in its own commit (30203cfd) so that it can be dropped: scripts/public_api.py, which check-nvx-rs runs, documented the crate "with every feature but bundled" and kept bundled in EXCLUDED_FEATURES. With the feature gone it leaves out only default, and its docs and doc/ci.md say that it documents every feature. The arguments that it passes Cargo, and so the snapshots, don't change. Its test's fixture drops bundled.

Deliberately kept:

  • contract::tests::release_manifests_must_match_every_bundled_contract, a test of the retained manifest check, where "bundled" means the contracts that a release bundles.
  • nvx-rs/build.rs as the path-sorting example of ubuntu.py's comment and of test_ubuntu_input_digest_orders_paths_alike_on_every_os, which name a file in a temporary directory, not an inventory.
  • check_test_changes.py's generic rule for any crate's build.rs, and the generic descriptions of Cargo's dep-info ("each path that the build script watches") in guest_binaries.py, test_guest_binaries.py and doc/usage.md, whose check stays.

Size

Measured as #1076 defines them:

Core lines Counted files
Estimate (#1122) 50 10
Measured 18 11
  • Core lines (18): 2 in host/artifacts/mod.rs (the call of discover_with and the error's last line), 15 in crate_release.py (its one cargo build, re-indented out of the loop over the bundles, with its message, and the call that no longer passes platform), and 1 in public_api.py (EXCLUDED_FEATURES). The rest are deletions, comments and docs.
  • Counted files (11): the 10 of the estimate, nvx-rs/Cargo.toml, src/lib.rs, src/contract.rs, src/host/artifacts/mod.rs, src/host/cli/download.rs, .github/actions/check-nvx-rs/action.yml, .github/workflows/nvx-rs-mutants.yml, scripts/nvx_tools/crate_release.py, build_constants.py and nvx_rs.py, and scripts/public_api.py. nvx-rs/build.rs is only deleted, and doesn't count.

Old tests of the area

  • Retired:
    • host::artifacts::tests::the_bundle_is_a_compatible_release (built only with bundled): the staged release.
    • scripts/test_crate_release.py::ReleaseTests.test_windows_builds_its_one_bundle: the per-platform bundles of the package's build.
    • scripts/test_nvx_tools.py::CiConfigurationTests.test_nvx_rs_bundles_a_release_in_the_current_layout: the Check artifact bundling step, which goes.
    • CI's check-nvx-rs step Check artifact bundling, the synthetic-release test of the feature (the case matrix's row).
  • Rewritten: host::artifacts::tests::the_bundle_is_the_last_resort becomes discovery_fails_when_no_source_is_present. It keeps its check that a discovery without any source fails with Unavailable and names NVX_ARTIFACTS_DIR. Its check that the bundle comes last retires with the bundle. It checks instead that the error no longer suggests the feature, which fails before this PR.
  • Kept: the other discovery, layout, identity and manifest tests of host::artifacts and contract, the image-staging tests and the CLI's download tests. Those that the report lists below change only to stop naming what left.

Test changes

python scripts/check_test_changes.py --base origin/feature/nvx-refactor lists 58 changes to existing tests, hence tests-modified:

  • nvx-rs/src/host/artifacts/tests.rs:
    • removed helper no_bundle, the empty bundle source that the discovery tests passed;
    • modified the_directory_variable_accepts_a_repository_checkout, explicit_variables_win_and_must_be_complete and the_directory_variable_precedes_the_executable_directory, which no longer pass that source to discover_with, which no longer takes one; rustfmt joins one call that now fits a line;
    • modified the_bundle_is_the_last_resort, renamed to discovery_fails_when_no_source_is_present (rewritten, above);
    • removed the_bundle_is_a_compatible_release (retired, above).
  • scripts/test_crate_release.py:
    • modified helper CRATE_FILES, whose fixture crate no longer holds build.rs and artifacts.json, as the package no longer must;
    • modified helpers ReleaseTests.setUp, which no longer puts the bundle variables in the job's environment, and ReleaseTests.package, which no longer takes a platform;
    • modified ReleaseTests.test_the_first_version_is_the_declared_one, which expects one cargo build --locked --all-features of the packed sources in place of one per KVM and MSHV bundle, without its checks of the bundle variables;
    • removed ReleaseTests.test_windows_builds_its_one_bundle (retired, above).
  • scripts/test_guest_binaries.py:
    • modified helper _fake_guest_build, whose default dep-info no longer lists nvx-rs/build.rs, which the identity no longer covers;
    • modified GuestBinaryBuildTests.test_source_identity_covers_the_guest_build_inputs_only and test_source_identity_changes_only_with_the_guest_build_inputs, which no longer expect nvx-rs/build.rs in the identity or name nvx-rs/artifacts.json among the files outside it;
    • modified test_source_inventory_preserves_the_callers_root_spelling, test_source_identity_follows_a_content_preserving_module_move and test_build_uses_fresh_remapped_target_and_writes_manifest, whose fixture checkouts and dep-info no longer hold build.rs;
    • modified test_build_refuses_inputs_that_the_source_identity_omits, whose "file in the checkout" case names nvx-rs/README.md in place of the deleted nvx-rs/artifacts.json.
  • scripts/test_nvx_tools.py:
    • modified NvxRsTests.test_source_digest_covers_the_build_inputs_in_any_line_endings, which no longer expects nvx-rs/build.rs in the inventory or writes it in its fixtures, and no longer checks that the deleted artifacts.json is outside the inventory;
    • modified CiConfigurationTests.test_only_guest_binary_inputs_rebuild_the_guest_images, which no longer copies the deleted nvx-rs/artifacts.json and nvx-rs/build.rs into its fixture checkout;
    • modified BuildTests.test_device_io_provenance_uses_shared_rust_source_digest, whose fixture checkout no longer holds build.rs;
    • removed CiConfigurationTests.test_nvx_rs_bundles_a_release_in_the_current_layout (retired, above).
  • scripts/test_public_api.py: modified ListingTests.test_lists_feature_gated_items_as_any_other, whose features no longer include bundled (commit 30203cfd).
  • CI test wiring, .github/actions/check-nvx-rs/action.yml: 35 removed lines, the Check artifact bundling step (retired, above), and the env: and NVX_BUNDLE: skip lines of the Lint, Test, Build documentation, MSRV and macOS steps, which check the same as before.

Validation

local_gates.py --files (from dev) selects, for these files, test-changes, markdown-links, test-layout, quality-code, the check-nvx-rs steps and nvx-cli (validate-nvx) on both systems, and openvmm-ci. I ran them from this branch's action definitions, which no longer have the bundling step or the runtime adapter's steps. quality-code's ShellCheck and shfmt, and .github/specula, cover no file that this PR changes. openvmm-ci checks the unchanged openvmm pin, and is left to CI.

The tables below ran on 683f85a9, before the restack onto feature/nvx-refactor at baf560d1 (#1520, SL6.1). The restack had no conflicts and changed no line of these commits: git range-diff shows = for both. After the restack, at 30203cfd:

  • Windows: cargo fmt --all --check, every clippy of check-nvx-rs with -D warnings, cargo test --locked --all-features (lib 1183 passed, 12 ignored, and every integration and doc test), cargo test --locked, the build and tests without default features, cargo doc with -D warnings, cargo package --locked (552 files) and public_api.py: passed. The validate-nvx unittest list passed, 1822 tests with 73 skipped.
  • Linux, nvx-kvm-test: the validate-nvx unittest list (1822 tests, 38 skipped), public_api.py, build-guest-binaries and test-guest-binaries, cargo fmt, every clippy of check-nvx-rs, the integration and doc tests with every feature, the default and no-default-feature tests, and cargo package --locked: passed. The lib's tests with every feature: 2005 passed, and the same 28 guest:: tests failed as before the restack, below.
  • check_matrix.py <worktree> 99d2022085f passed: the CI section's 69 rows match its counts. check_test_changes.py --base origin/feature/nvx-refactor lists the same 58 changes.

At the merge turn, rebased onto 9b8f35e0 (#1530, SL6.3), at 58681a95. Two text conflicts came up: the case matrix's summary table, which keeps SL6.3's counts with this PR's CI row (69 tests: 42 kept, 3 rewritten, 24 retired, recounted), and doc/project-structure.md's tree, which keeps SL6.3's tests/ line. git range-diff shows no other change, and nothing on the new base uses what this PR deletes. Results:

  • Windows: every clippy of check-nvx-rs and cargo fmt, the tests with every, the default and no default features (lib 1051 passed, 15 ignored), cargo doc, MSRV 1.89, cargo package --locked (527 files), public_api.py, ruff, the test-layout and link checks, and the validate-nvx unittest list (1833 tests, 73 skipped): passed.
  • Linux, nvx-kvm-test: the validate-nvx unittest list (1833 tests, 38 skipped), public_api.py, the guest binaries' build and test, cargo fmt, every clippy, the integration and doc tests with every feature, the default and no-default-feature tests and cargo package --locked: passed. The lib with every feature: 1857 passed, and the same 28 guest:: tests as before failed, by name.
  • check_matrix.py <worktree> 99d2022085f passed, and check_test_changes.py lists the same 58 changes.
  • CI: run 43206127370 passed, with 34 jobs, including the microVM tests on KVM, MSHV and WHP.

Windows, this workstation (Rust 1.95.0):

Check Result
cargo fmt --all --check passed
cargo clippy --locked with -D warnings: --all-targets --all-features, --lib, --lib --no-default-features, and serde, cli and testing alone passed
cargo test --locked --all-features passed: lib 1183 passed, 12 ignored, and every integration and doc test
cargo test --locked, cargo build --locked --lib --no-default-features, cargo test --locked --lib --no-default-features passed
RUSTDOCFLAGS=-D warnings cargo doc --locked --no-deps --all-features passed
cargo +1.89 check --locked --all-targets --all-features (MSRV) passed
cargo check --locked --all-targets --all-features --target aarch64-apple-darwin passed
cargo package --locked passed: 552 files, no build.rs or artifacts.json, and the packed crate builds
python scripts/public_api.py --update only the two Artifacts::bundled lines leave each snapshot
ruff check scripts .github/specula, ruff format --check ..., pyright --pythonplatform Linux, --pythonplatform Windows passed, 0 errors
python -m compileall -q scripts, and validate-nvx's python -m unittest scripts/test_*.py ... list passed: 1822 tests, 73 skipped
python scripts/check_test_layout.py, python scripts/check_markdown_links.py passed
nvx-rs provenance: cargo build --release --locked --features cli --manifest-path nvx-rs/Cargo.toml --target-dir nvx-rs/target, python scripts/nvx.py record-nvx-rs-provenance, then release._validate_nvx_rs_provenance passed: the record describes the build from the current sources, and nvx_rs.source_files() lists no build.rs
Case matrix check (SL5.2's check_matrix.py) the CI section's 69 rows match its counts. Before the restack, the check reported 7 problems, all present at the old base: Docs rows that named host/store and host/template files that SL6.1 and SL6.2 deleted, and Python tests that its base revision lacked. After the restack it passes, above

Linux, nvx-kvm-test (Azure Linux 3, kernel 6.6, KVM, virtual machine), in a worktree of this branch with its own target directory, every signal at its default disposition:

Check Result
python3 scripts/nvx.py verify, python3 -m compileall -q scripts, validate-nvx's unittest list passed: 1822 tests, 38 skipped
python3 scripts/public_api.py passed: the snapshots match
python3 scripts/nvx.py build-guest-binaries, test-guest-binaries passed: Cargo's dep-info lists no file outside the identity, without build.rs
python3 scripts/nvx.py check-guest-binaries --toolchain 1.95.0 the musl lint passes. The musl tests fail 26 guest:: tests (1115 passed), the identical 26 at 5bffcd7f, this PR's base before the restack, on this host
cargo fmt, and every clippy of check-nvx-rs with -D warnings passed
cargo test --locked --all-features lib: 2004 passed, 28 guest:: tests failed, the identical 28 at 5bffcd7f on this host (2005 passed there, with the retired the_bundle_is_a_compatible_release). --test '*' --no-fail-fast and --doc, which the lib's failure stops: passed
cargo test --locked, build/test --lib --no-default-features, doc with -D warnings, MSRV 1.89, macOS check passed

The failing guest:: tests (guest::entry, guest::exec, guest::init::tests::exec, guest::managed_agent::dispatch and its loopback tests) fail alike at the base on this host's kernel 6.6. This PR changes no guest code.

Not run, left to CI: microVM scenarios on KVM, MSHV and WHP. The runtime doesn't change: the CLI never used Artifacts::bundled, and discovery's other sources stay as they are. CI also covers the guest images, which rebuild because their identity's inventory and Cargo.toml change, and crate-package and crate-release, which run only on dev's full runs and whose logic test_crate_release.py and cargo package cover here.

@ppenna Pedro Henrique Penna (ppenna) added tests-modified Changes existing tests, test data, or test wiring feat-nvx-refactor labels Nov 12, 2026
@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

This pull request changes existing tests

It modifies or removes 58 existing test asset(s), listed below. Review each with care: a change to a test can hide a regression that the test caught. See doc/contribute.md#changes-to-existing-tests.

Test code

Change What Before After
modified helper assignment CRATE_FILES in scripts/test_crate_release.py scripts/test_crate_release.py:70 scripts/test_crate_release.py:70
modified helper def ReleaseTests.setUp in scripts/test_crate_release.py scripts/test_crate_release.py:901 scripts/test_crate_release.py:899
modified helper def ReleaseTests.package in scripts/test_crate_release.py scripts/test_crate_release.py:922 scripts/test_crate_release.py:917
modified helper def _fake_guest_build in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:62 scripts/test_guest_binaries.py:62
modified test fn the_directory_variable_accepts_a_repository_checkout in host::artifacts::tests nvx-rs/src/host/artifacts/tests.rs:99 nvx-rs/src/host/artifacts/tests.rs:95
modified test fn explicit_variables_win_and_must_be_complete in host::artifacts::tests nvx-rs/src/host/artifacts/tests.rs:126 nvx-rs/src/host/artifacts/tests.rs:118
modified test fn the_directory_variable_precedes_the_executable_directory in host::artifacts::tests nvx-rs/src/host/artifacts/tests.rs:153 nvx-rs/src/host/artifacts/tests.rs:139
modified test fn the_bundle_is_the_last_resort in host::artifacts::tests (renamed to discovery_fails_when_no_source_is_present) nvx-rs/src/host/artifacts/tests.rs:180 nvx-rs/src/host/artifacts/tests.rs:165
modified test def ReleaseTests.test_the_first_version_is_the_declared_one in scripts/test_crate_release.py scripts/test_crate_release.py:977 scripts/test_crate_release.py:971
modified test def GuestBinaryBuildTests.test_source_identity_covers_the_guest_build_inputs_only in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:109 scripts/test_guest_binaries.py:106
modified test def GuestBinaryBuildTests.test_source_identity_changes_only_with_the_guest_build_inputs in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:177 scripts/test_guest_binaries.py:172
modified test def GuestBinaryBuildTests.test_source_inventory_preserves_the_callers_root_spelling in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:256 scripts/test_guest_binaries.py:250
modified test def GuestBinaryBuildTests.test_source_identity_follows_a_content_preserving_module_move in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:287 scripts/test_guest_binaries.py:280
modified test def GuestBinaryBuildTests.test_build_uses_fresh_remapped_target_and_writes_manifest in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:326 scripts/test_guest_binaries.py:318
modified test def GuestBinaryBuildTests.test_build_refuses_inputs_that_the_source_identity_omits in scripts/test_guest_binaries.py scripts/test_guest_binaries.py:490 scripts/test_guest_binaries.py:477
modified test def NvxRsTests.test_source_digest_covers_the_build_inputs_in_any_line_endings in scripts/test_nvx_tools.py scripts/test_nvx_tools.py:2023 scripts/test_nvx_tools.py:2023
modified test def CiConfigurationTests.test_only_guest_binary_inputs_rebuild_the_guest_images in scripts/test_nvx_tools.py scripts/test_nvx_tools.py:8060 scripts/test_nvx_tools.py:8032
modified test def BuildTests.test_device_io_provenance_uses_shared_rust_source_digest in scripts/test_nvx_tools.py scripts/test_nvx_tools.py:17464 scripts/test_nvx_tools.py:17434
modified test def ListingTests.test_lists_feature_gated_items_as_any_other in scripts/test_public_api.py scripts/test_public_api.py:260 scripts/test_public_api.py:260
removed helper fn no_bundle in host::artifacts::tests nvx-rs/src/host/artifacts/tests.rs:36
removed test fn the_bundle_is_a_compatible_release in host::artifacts::tests nvx-rs/src/host/artifacts/tests.rs:759
removed test def ReleaseTests.test_windows_builds_its_one_bundle in scripts/test_crate_release.py scripts/test_crate_release.py:1022
removed test def CiConfigurationTests.test_nvx_rs_bundles_a_release_in_the_current_layout in scripts/test_nvx_tools.py scripts/test_nvx_tools.py:6524

CI test wiring

Change What Before After
removed line env: .github/actions/check-nvx-rs/action.yml:43
removed line NVX_BUNDLE: skip .github/actions/check-nvx-rs/action.yml:45
removed line env: .github/actions/check-nvx-rs/action.yml:67
removed line NVX_BUNDLE: skip .github/actions/check-nvx-rs/action.yml:69
removed line - name: Check artifact bundling .github/actions/check-nvx-rs/action.yml:80
removed line shell: bash .github/actions/check-nvx-rs/action.yml:81
removed line working-directory: nvx-rs .github/actions/check-nvx-rs/action.yml:82
removed line run: | .github/actions/check-nvx-rs/action.yml:83
removed line set -euo pipefail .github/actions/check-nvx-rs/action.yml:84
removed line bundle=$(mktemp -d) .github/actions/check-nvx-rs/action.yml:85
removed line executable=openvmm .github/actions/check-nvx-rs/action.yml:86
removed line cli=nvx-rs .github/actions/check-nvx-rs/action.yml:87
removed line bundle_dir="${bundle}" .github/actions/check-nvx-rs/action.yml:88
removed line if [[ "${RUNNER_OS}" == Windows ]]; then .github/actions/check-nvx-rs/action.yml:89
removed line executable=openvmm.exe .github/actions/check-nvx-rs/action.yml:90
removed line cli=nvx-rs.exe .github/actions/check-nvx-rs/action.yml:91
removed line bundle_dir=$(cygpath -w "${bundle}") .github/actions/check-nvx-rs/action.yml:92
removed line fi .github/actions/check-nvx-rs/action.yml:93
removed line mkdir -p "${bundle}/bin" "${bundle}/guest" "${bundle}/provenance" .github/actions/check-nvx-rs/action.yml:94
removed line printf openvmm > "${bundle}/bin/${executable}" .github/actions/check-nvx-rs/action.yml:95
removed line printf nvx-rs > "${bundle}/bin/${cli}" .github/actions/check-nvx-rs/action.yml:96
removed line printf '{}' > "${bundle}/provenance/nvx-rs.provenance.json" .github/actions/check-nvx-rs/action.yml:97
removed line printf kernel > "${bundle}/guest/vmlinux" .github/actions/check-nvx-rs/action.yml:98
removed line printf initramfs > "${bundle}/guest/initramfs.cpio.gz" .github/actions/check-nvx-rs/action.yml:99
removed line cp ../SOURCE-MANIFEST.json "${bundle}/" .github/actions/check-nvx-rs/action.yml:100
removed line (cd "${bundle}" && sha256sum "bin/${executable}" "bin/${cli}" guest/vmlinux \ .github/actions/check-nvx-rs/action.yml:101
removed line guest/initramfs.cpio.gz provenance/nvx-rs.provenance.json \ .github/actions/check-nvx-rs/action.yml:102
removed line SOURCE-MANIFEST.json > SHA256SUMS) .github/actions/check-nvx-rs/action.yml:103
removed line NVX_BUNDLE_DIR="${bundle_dir}" cargo "+${{ steps.toolchains.outputs.toolchain }}" test --locked --lib \ .github/actions/check-nvx-rs/action.yml:104
removed line --features bundled artifacts .github/actions/check-nvx-rs/action.yml:105
removed line NVX_BUNDLE: skip .github/actions/check-nvx-rs/action.yml:111
removed line env: .github/actions/check-nvx-rs/action.yml:127
removed line NVX_BUNDLE: skip .github/actions/check-nvx-rs/action.yml:129
removed line env: .github/actions/check-nvx-rs/action.yml:138
removed line NVX_BUNDLE: skip .github/actions/check-nvx-rs/action.yml:140

Relocated unchanged: 0; added: 0. Compared the merge base 9b8f35e03b66 with 58681a959491.

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.

🟢 Approval recommended

No active review issues block approval of the build-time artifact bundling removal.

No open issues 🎉

What changed in this PR

Removes build-time artifact bundling from nvx as SL6.6a of the library-slimming workstream (#1122). Artifact discovery retains its explicit paths, environment-selected directory, and release directory beside the executable.

Changes:

  • Deletes the bundled feature, build script, release pin, and Artifacts::bundled API.
  • Simplifies crate packaging and removes bundling-specific CI checks and source-inventory entries.
  • Updates tests, public API snapshots, and documentation to match the removal.
File Description
scripts/​test_public_api.py Removes bundled from the feature-selection fixture.
scripts/​test_nvx_tools.py Removes bundling coverage and deleted-file fixtures.
scripts/​test_guest_binaries.py Updates source-identity and dependency fixtures.
scripts/​test_crate_release.py Expects one package build without bundle settings.
scripts/​public_api.py Removes the obsolete feature exclusion.
scripts/​nvx_tools/​nvx_rs.py Removes the build script from executable inputs.
scripts/​nvx_tools/​crate_release.py Builds the package once without bundling logic.
scripts/​nvx_tools/​build_constants.py Removes the build script from guest inputs.
nvx-rs/​src/​lib.rs Removes bundling feature documentation.
nvx-rs/​src/​host/​cli/​download.rs Removes the documentation comparison with bundling.
nvx-rs/​src/​host/​artifacts/​tests.rs Retires bundle tests and updates discovery checks.
nvx-rs/​src/​host/​artifacts/​mod.rs Removes the bundled API and discovery fallback.
nvx-rs/​src/​contract.rs Removes the obsolete build-script documentation constraint.
nvx-rs/​README.md Removes bundling instructions and updates build documentation.
nvx-rs/​public-api/​windows.txt Removes both Windows listings of Artifacts::bundled.
nvx-rs/​public-api/​linux.txt Removes both Linux listings of Artifacts::bundled.
nvx-rs/​Cargo.toml Removes the feature, links, and build dependencies.
nvx-rs/​build.rs Deletes build-time release staging.
nvx-rs/​artifacts.json Deletes the bundled release pin.
doc/​usage.md Updates provenance and guest-source input descriptions.
doc/​project-structure.md Removes deleted files and staging descriptions.
doc/​distribution.md Removes bundled-release publication requirements.
doc/​contribute.md Removes the bundling check from validation guidance.
doc/​ci.md Updates packaging, input, and feature-check documentation.
doc/​acceptance-case-matrix.md Records bundling retirement and revised CI counts.
.github/​workflows/​nvx-rs-mutants.yml Removes the bundle-skip environment setting.
.github/​actions/​check-nvx-rs/​action.yml Removes the bundling check and bundle-skip settings.

Review effort: Balanced

Base automatically changed from agents/slim-sl6-1-sandbox-store to feature/nvx-refactor November 12, 2026 08:12
The bundled feature staged a pinned NVX release at build time: its
build script downloaded the package that artifacts.json pinned, or
copied the release that NVX_BUNDLE_DIR named, for the Linux package
that NVX_BUNDLE_HYPERVISOR chose, unless NVX_BUNDLE=skip. It exported
the staged directory to the library as NVX_BUNDLED_ARTIFACTS_DIR, and
to the build scripts of dependents as DEP_NVX_ARTIFACTS_DIR, through
links = "nvx". Nothing in NVX uses it, and #1076 releases the crate
without it, so the feature, the build script, links = "nvx",
artifacts.json and the four variables go.

Artifacts::bundled, which returned the staged release, goes with the
feature, and Artifacts::discover loses its fourth source, the staged
directory: a discovery that finds no source suggests the variables and
a release beside the executable, but no longer the feature. The public
API snapshots lose Artifacts::bundled on each platform. NVX_OPENVMM,
NVX_KERNEL, NVX_INITRD, NVX_ARTIFACTS_DIR, the release beside the
executable, NVX_AUTO_DOWNLOAD and NVX_RS keep their meaning, and
contract::manifest_mismatches, which the build script also called,
stays for discovery and downloads, with the time ABI's and the restore
packet's fields. contract.rs no longer has to build alone, since no
build script includes it any more.

The tooling stops building, checking or listing the feature and its
files: check-nvx-rs drops its bundling step and NVX_BUNDLE=skip, and so
does the mutants workflow; the crate release no longer requires the
build script or artifacts.json in the package, and builds the package
once, with every feature, rather than once for each Linux package that
it bundled; and the inventories of the guest binaries' sources and of
the nvx-rs that nvx.py builds, which fail on a listed file that is
missing, no longer list nvx-rs/build.rs. The README, the docs and the
case matrix follow, where CI's bundling step retires.

The bundle's tests retire: the_bundle_is_a_compatible_release, the
crate release's test_windows_builds_its_one_bundle, and
test_nvx_rs_bundles_a_release_in_the_current_layout, which checked the
bundling step. the_bundle_is_the_last_resort becomes
discovery_fails_when_no_source_is_present, which keeps its check of
the error and checks that the error no longer suggests the feature.
The other discovery tests stop passing a bundle source, the release
test expects one build, and the guest-binary and provenance fixtures
no longer hold build.rs or artifacts.json; one case of an input that
the guest identity omits names nvx-rs/README.md in place of the
deleted artifacts.json.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
public_api.py documented the crate with every feature but bundled,
whose build script downloaded a release, and default, which only names
others. With bundled deleted, only default remains to leave out, so
the listing names no feature that no longer exists, and its docs and
doc/ci.md say that it documents every feature. The arguments that it
passes Cargo, and so the snapshots, stay the same.

test_lists_feature_gated_items_as_any_other drops bundled from the
features that it gives feature_arguments, which still enables each of
the others by name, without default.

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

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.

🟢 Approval recommended

No active review issues remain for the removal of build-time artifact bundling.

No open issues 🎉

Review effort: Balanced

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat-nvx-refactor tests-modified Changes existing tests, test data, or test wiring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants