Skip to content

bug(ci): preserve VM runtime inputs across Rust cache restore #3038

Description

@elezar

User Story

As a contributor, I want VM E2E to run against a driver that contains its required runtime and guest supervisor, so that unrelated pull requests receive reliable CI results.

Problem Statement

The VM artifact pipeline can stage the compressed runtime and bundled sandbox supervisor under target/vm-runtime-compressed, then restore the Rust target cache before the driver build. The cache restore removes those staged inputs. The build script emits warnings and produces a stub openshell-driver-vm binary instead of failing. Both managed and external VM E2E jobs then fail during sandbox provisioning with sandbox supervisor not embedded.

Impact / Why This Matters

Unrelated pull requests, including #3013, fail Core E2E even though they do not modify VM code. The current workaround is to rerun CI and hope for a cache state that preserves the inputs; this is insufficient because the build job itself reports success while packaging an unusable binary.

Acceptance Criteria

  • The VM runtime and supervisor inputs cannot be removed or overwritten by Rust target-cache restoration before openshell-driver-vm is built.
  • The VM-driver build fails immediately if any required embedded input is missing, including openshell-sandbox.zst.
  • The packaged Linux VM driver successfully provisions a sandbox in both managed and external-driver E2E jobs.
  • A regression check covers a build with a restored Rust target cache.

Reproduction Steps

  1. Run the Branch E2E workflow using the binary-artifact pipeline introduced by ci: build release binaries with Nix #2977.
  2. Stage target/vm-runtime-compressed, including openshell-sandbox.zst.
  3. Restore the Rust target cache before the VM driver build.
  4. Build and package openshell-driver-vm, then run VM E2E.
  5. Observe build warnings that compressed artifacts are missing and provisioning failures that report sandbox supervisor not embedded.

Environment

  • OpenShell: CI build 0.0.117-dev.2+ga795360f3
  • OS: GitHub Actions Linux x86_64 runner
  • Runtime: Branch E2E Checks, managed and external VM driver suites

Logs

The VM build generated target/vm-runtime-compressed/openshell-sandbox.zst, then later emitted: Missing compressed artifact: target/vm-runtime-compressed/openshell-sandbox.zst. VM E2E subsequently failed with: sandbox supervisor not embedded. Build openshell-driver-vm with OPENSHELL_VM_RUNTIME_COMPRESSED_DIR set and run mise run vm:setup and mise run vm:supervisor first.

Context

This was observed on #3013 and on unrelated PR branches. The triggering failure is Branch E2E Checks run 33182128484. The artifact pipeline was introduced in #2977. Moving the staged runtime outside target/ is the robust fix; restoring the Rust cache before staging is the minimal fix.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions