Cloud Hypervisor Linux Release #13
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Cloud Hypervisor Linux Release | |
| on: [create] | |
| permissions: | |
| contents: write | |
| jobs: | |
| release: | |
| if: github.event_name == 'create' && github.event.ref_type == 'tag' | |
| name: Release | |
| runs-on: [self-hosted, linux, x64, kvm] | |
| steps: | |
| - name: Code checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 1 | |
| - name: Install build tools | |
| run: sudo apt install -y build-essential flex bison libssl-dev libelf-dev bc gcc-aarch64-linux-gnu gcc-riscv64-linux-gnu | |
| - name: Configure (aarch64) | |
| run: ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make ch_defconfig | |
| - name: Build (aarch64) | |
| run: ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make Image.gz -j `nproc` | |
| - name: Configure (riscv64) | |
| run: ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- make ch_defconfig | |
| - name: Build (riscv64) | |
| run: ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- make Image.gz -j `nproc` | |
| - name: Configure (x86-64) | |
| run: make ch_defconfig | |
| - name: Build kernel (x86-64) | |
| run: CFLAGS="-Wa,-mx86-used-note=no" make bzImage -j `nproc` | |
| - name: Build kernel modules (x86-64) | |
| run: make modules -j `nproc` | |
| - name: Clone NVIDIA open-gpu-kernel-modules | |
| run: git clone --depth 1 --branch 570.86.16 https://github.com/NVIDIA/open-gpu-kernel-modules.git | |
| - name: Build NVIDIA modules (x86-64) | |
| run: | | |
| cd open-gpu-kernel-modules | |
| make modules KERNEL_UNAME=$(cd .. && make -s kernelrelease) SYSSRC=$(pwd)/.. -j $(nproc) | |
| - name: Download NVIDIA driver for firmware | |
| run: | | |
| DRIVER_VERSION=570.86.16 | |
| wget -q https://download.nvidia.com/XFree86/Linux-x86_64/${DRIVER_VERSION}/NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run | |
| chmod +x NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run | |
| ./NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run --extract-only --target nvidia-driver | |
| - name: Package NVIDIA modules (x86-64) | |
| run: | | |
| KVER=$(make -s kernelrelease) | |
| DRIVER_VERSION=570.86.16 | |
| mkdir -p nvidia-modules/lib/modules/$KVER/kernel/drivers/gpu | |
| mkdir -p nvidia-modules/lib/firmware/nvidia/${DRIVER_VERSION} | |
| cp open-gpu-kernel-modules/kernel-open/*.ko nvidia-modules/lib/modules/$KVER/kernel/drivers/gpu/ | |
| cp nvidia-driver/firmware/*.bin nvidia-modules/lib/firmware/nvidia/${DRIVER_VERSION}/ | |
| tar czf nvidia-modules-x86_64.tar.gz -C nvidia-modules . | |
| # ============================================================ | |
| # NVIDIA DRIVER USERSPACE LIBRARIES | |
| # ============================================================ | |
| # These libraries are injected into containers at VM boot time by hypeman, | |
| # eliminating the need for containers to bundle matching NVIDIA drivers. | |
| # | |
| # When upgrading the driver version: | |
| # 1. Check NVIDIA release notes: https://download.nvidia.com/XFree86/Linux-x86_64/ | |
| # 2. Ensure compatibility with the kernel version being built | |
| # 3. Update DRIVER_VERSION in ALL places in this file (search for 570.86.16) | |
| # 4. Update NvidiaDriverVersion in hypeman/lib/system/versions.go | |
| # 5. Test GPU passthrough thoroughly before deploying | |
| # ============================================================ | |
| - name: Package NVIDIA driver libraries (x86-64) | |
| run: | | |
| DRIVER_VERSION=570.86.16 | |
| mkdir -p nvidia-driver-libs/usr/lib/nvidia | |
| mkdir -p nvidia-driver-libs/usr/bin | |
| # Core libraries for CUDA/compute workloads | |
| cp nvidia-driver/libcuda.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-ml.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-ptxjitcompiler.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-nvvm.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-gpucomp.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| # Additional libraries for broader compatibility | |
| cp nvidia-driver/libnvidia-allocator.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-cfg.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-opencl.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvcuvid.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| cp nvidia-driver/libnvidia-encode.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ | |
| # Binaries | |
| cp nvidia-driver/nvidia-smi nvidia-driver-libs/usr/bin/ | |
| cp nvidia-driver/nvidia-modprobe nvidia-driver-libs/usr/bin/ | |
| # Version file for runtime verification | |
| echo "${DRIVER_VERSION}" > nvidia-driver-libs/usr/lib/nvidia/version | |
| tar czf nvidia-driver-libs-x86_64.tar.gz -C nvidia-driver-libs . | |
| echo "Driver libraries packaged:" | |
| ls -lah nvidia-driver-libs/usr/lib/nvidia/ | |
| ls -lah nvidia-driver-libs/usr/bin/ | |
| - name: Create release | |
| id: create_release | |
| uses: actions/create-release@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ github.ref }} | |
| release_name: ${{ github.ref }} | |
| draft: true | |
| - name: Upload bzImage for x86_64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: arch/x86/boot/bzImage | |
| asset_name: bzImage-x86_64 | |
| asset_content_type: application/octet-stream | |
| - name: Upload vmlinux for x86_64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: vmlinux | |
| asset_name: vmlinux-x86_64 | |
| asset_content_type: application/octet-stream | |
| - name: Upload NVIDIA modules for x86_64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: nvidia-modules-x86_64.tar.gz | |
| asset_name: nvidia-modules-x86_64.tar.gz | |
| asset_content_type: application/gzip | |
| - name: Upload NVIDIA driver libraries for x86_64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: nvidia-driver-libs-x86_64.tar.gz | |
| asset_name: nvidia-driver-libs-x86_64.tar.gz | |
| asset_content_type: application/gzip | |
| - name: Upload Image.gz for aarch64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: arch/arm64/boot/Image.gz | |
| asset_name: Image-arm64.gz | |
| asset_content_type: application/octet-stream | |
| - name: Upload Image for aarch64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: arch/arm64/boot/Image | |
| asset_name: Image-arm64 | |
| asset_content_type: application/octet-stream | |
| - name: Upload Image.gz for riscv64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: arch/riscv/boot/Image.gz | |
| asset_name: Image-riscv.gz | |
| asset_content_type: application/octet-stream | |
| - name: Upload Image for riscv64 | |
| uses: actions/upload-release-asset@v1 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| upload_url: ${{ steps.create_release.outputs.upload_url }} | |
| asset_path: arch/riscv/boot/Image | |
| asset_name: Image-riscv | |
| asset_content_type: application/octet-stream |