mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-15 05:09:44 +08:00
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
222 lines
7.8 KiB
YAML
222 lines
7.8 KiB
YAML
name: Driver VM Linux
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
cargo-version:
|
|
required: false
|
|
type: string
|
|
default: ""
|
|
image-tag:
|
|
required: true
|
|
type: string
|
|
checkout-ref:
|
|
required: true
|
|
type: string
|
|
runtime-platforms:
|
|
description: "Comma-separated VM runtime platforms to download: linux-aarch64,linux-x86_64"
|
|
required: false
|
|
type: string
|
|
default: "linux-aarch64,linux-x86_64"
|
|
driver-targets:
|
|
description: "JSON matrix entries for Linux VM driver targets"
|
|
required: false
|
|
type: string
|
|
default: >-
|
|
[{"arch":"arm64","runner":"linux-arm64-cpu8","target":"aarch64-unknown-linux-gnu","zig_target":"aarch64-unknown-linux-gnu.2.28","platform":"linux-aarch64","guest_arch":"aarch64"},{"arch":"amd64","runner":"linux-amd64-cpu8","target":"x86_64-unknown-linux-gnu","zig_target":"x86_64-unknown-linux-gnu.2.28","platform":"linux-x86_64","guest_arch":"x86_64"}]
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: read
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
download-kernel-runtime:
|
|
name: Download Kernel Runtime
|
|
runs-on: linux-amd64-cpu8
|
|
timeout-minutes: 10
|
|
container:
|
|
image: ghcr.io/nvidia/openshell/ci:latest
|
|
credentials:
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
ref: ${{ inputs['checkout-ref'] }}
|
|
|
|
- name: Download Linux runtime tarballs
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
RUNTIME_PLATFORMS: ${{ inputs['runtime-platforms'] }}
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p runtime-artifacts
|
|
|
|
runtime_platforms="${RUNTIME_PLATFORMS//[[:space:]]/}"
|
|
IFS=',' read -r -a platforms <<< "$runtime_platforms"
|
|
if [ "${#platforms[@]}" -eq 0 ]; then
|
|
echo "::error::No VM runtime platforms requested"
|
|
exit 1
|
|
fi
|
|
for platform in "${platforms[@]}"; do
|
|
case "$platform" in
|
|
linux-aarch64 | linux-x86_64) ;;
|
|
*)
|
|
echo "::error::Unsupported VM runtime platform '$platform' in runtime-platforms"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
printf '%s\n' "${platforms[@]}" > runtime-artifacts/platforms.txt
|
|
|
|
for platform in "${platforms[@]}"; do
|
|
asset="vm-runtime-${platform}.tar.zst"
|
|
echo "Downloading ${asset}..."
|
|
if ! gh release download vm-runtime \
|
|
--repo "${GITHUB_REPOSITORY}" \
|
|
--pattern "${asset}" \
|
|
--dir runtime-artifacts \
|
|
--clobber; then
|
|
echo "::error::No ${asset} asset found on vm-runtime release"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
ls -lah runtime-artifacts/
|
|
|
|
- name: Verify downloads
|
|
run: |
|
|
set -euo pipefail
|
|
while IFS= read -r platform; do
|
|
test -f "runtime-artifacts/vm-runtime-${platform}.tar.zst"
|
|
done < runtime-artifacts/platforms.txt
|
|
|
|
- name: Upload runtime artifacts
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: vm-driver-kernel-runtime-tarballs
|
|
path: runtime-artifacts/vm-runtime-*.tar.zst
|
|
retention-days: 1
|
|
|
|
build-driver-vm-linux:
|
|
name: Build Driver VM (Linux ${{ matrix.arch }})
|
|
needs: [download-kernel-runtime]
|
|
strategy:
|
|
matrix:
|
|
include: ${{ fromJSON(inputs['driver-targets']) }}
|
|
runs-on: ${{ matrix.runner }}
|
|
timeout-minutes: 30
|
|
container:
|
|
image: ghcr.io/nvidia/openshell/ci:latest
|
|
credentials:
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
options: --privileged
|
|
env:
|
|
MISE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
OPENSHELL_IMAGE_TAG: ${{ inputs['image-tag'] }}
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
ref: ${{ inputs['checkout-ref'] }}
|
|
fetch-depth: 0
|
|
|
|
- name: Mark workspace safe for git
|
|
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
|
|
- name: Fetch tags
|
|
run: git fetch --tags --force
|
|
|
|
- name: Install tools
|
|
run: mise install --locked
|
|
|
|
- name: Cache Rust target and registry
|
|
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2
|
|
with:
|
|
shared-key: driver-vm-linux-${{ matrix.arch }}
|
|
cache-directories: .cache/sccache
|
|
cache-targets: "true"
|
|
|
|
- name: Install zstd
|
|
run: apt-get update && apt-get install -y --no-install-recommends zstd && rm -rf /var/lib/apt/lists/*
|
|
|
|
- name: Download kernel runtime tarball
|
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
with:
|
|
name: vm-driver-kernel-runtime-tarballs
|
|
path: runtime-download/
|
|
|
|
- name: Stage compressed runtime for embedding
|
|
run: |
|
|
set -euo pipefail
|
|
COMPRESSED_DIR="${PWD}/target/vm-runtime-compressed"
|
|
VM_RUNTIME_TARBALL="${PWD}/runtime-download/vm-runtime-${{ matrix.platform }}.tar.zst" \
|
|
VM_RUNTIME_PLATFORM="${{ matrix.platform }}" \
|
|
OPENSHELL_VM_RUNTIME_COMPRESSED_DIR="$COMPRESSED_DIR" \
|
|
tasks/scripts/vm/compress-vm-runtime.sh
|
|
|
|
- name: Build bundled supervisor
|
|
run: |
|
|
set -euo pipefail
|
|
OPENSHELL_VM_RUNTIME_COMPRESSED_DIR="${PWD}/target/vm-runtime-compressed" \
|
|
tasks/scripts/vm/build-supervisor-bundle.sh --arch "${{ matrix.guest_arch }}"
|
|
|
|
- name: Verify embedded driver inputs
|
|
run: |
|
|
set -euo pipefail
|
|
for file in libkrun.so.zst libkrunfw.so.5.zst gvproxy.zst umoci.zst openshell-sandbox.zst; do
|
|
test -s "target/vm-runtime-compressed/${file}"
|
|
done
|
|
|
|
- name: Scope workspace to driver-vm crates
|
|
run: |
|
|
set -euo pipefail
|
|
sed -i 's|members = \["crates/\*"\]|members = ["crates/openshell-driver-vm", "crates/openshell-core"]|' Cargo.toml
|
|
|
|
- name: Patch workspace version
|
|
if: ${{ inputs['cargo-version'] != '' }}
|
|
run: |
|
|
set -euo pipefail
|
|
sed -i -E '/^\[workspace\.package\]/,/^\[/{s/^version[[:space:]]*=[[:space:]]*".*"/version = "'"${{ inputs['cargo-version'] }}"'"/}' Cargo.toml
|
|
|
|
- name: Build openshell-driver-vm with glibc 2.28 floor
|
|
run: |
|
|
set -euo pipefail
|
|
mise x -- rustup target add ${{ matrix.target }}
|
|
OPENSHELL_VM_RUNTIME_COMPRESSED_DIR="${PWD}/target/vm-runtime-compressed" \
|
|
mise x -- cargo zigbuild --release --target ${{ matrix.zig_target }} -p openshell-driver-vm --bin openshell-driver-vm
|
|
mkdir -p artifacts/bin
|
|
install -m 0755 target/${{ matrix.target }}/release/openshell-driver-vm artifacts/bin/openshell-driver-vm
|
|
|
|
- name: Verify packaged binary
|
|
run: |
|
|
set -euo pipefail
|
|
OUTPUT="$(artifacts/bin/openshell-driver-vm --version)"
|
|
echo "$OUTPUT"
|
|
grep -q '^openshell-driver-vm ' <<<"$OUTPUT"
|
|
|
|
- name: Verify glibc symbol floor
|
|
run: tasks/scripts/verify-glibc-symbols.sh 2.28 artifacts/bin/openshell-driver-vm
|
|
|
|
- name: sccache stats
|
|
if: always()
|
|
run: mise x -- sccache --show-stats
|
|
|
|
- name: Package binary
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p artifacts
|
|
tar -czf "artifacts/openshell-driver-vm-${{ matrix.target }}.tar.gz" \
|
|
-C artifacts/bin openshell-driver-vm
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: driver-vm-linux-${{ matrix.arch }}
|
|
path: artifacts/*.tar.gz
|
|
retention-days: 5
|