Cloud Hypervisor Linux Release #37
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] | |
| env: | |
| # Static link host tools so they don't depend on build host's glibc version | |
| HOSTLDFLAGS: "-static -lz" | |
| 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 zlib1g-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: Build kernel modules (aarch64) | |
| run: ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make modules -j `nproc` | |
| - name: Package kernel headers (aarch64) | |
| run: | | |
| KVER=$(ARCH=arm64 make -s kernelrelease) | |
| HEADERS_DIR="$(pwd)/kernel-headers-arm64" | |
| # Use the kernel's built-in script via make run-command to ensure proper env vars | |
| mkdir -p "${HEADERS_DIR}" | |
| ARCH=arm64 make run-command KBUILD_RUN_COMMAND="\${srctree}/scripts/package/install-extmod-build ${HEADERS_DIR}" | |
| # Add System.map and .config | |
| cp System.map "${HEADERS_DIR}/" | |
| cp .config "${HEADERS_DIR}/" | |
| # Package just the headers contents (flat structure) | |
| tar czf kernel-headers-aarch64.tar.gz -C "${HEADERS_DIR}" . | |
| echo "Kernel headers packaged for ${KVER} (aarch64):" | |
| du -sh kernel-headers-aarch64.tar.gz | |
| - 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: Package kernel headers (x86-64) | |
| run: | | |
| KVER=$(make -s kernelrelease) | |
| HEADERS_DIR="$(pwd)/kernel-headers-x86" | |
| # Use the kernel's built-in script via make run-command to ensure proper env vars | |
| mkdir -p "${HEADERS_DIR}" | |
| make run-command KBUILD_RUN_COMMAND="\${srctree}/scripts/package/install-extmod-build ${HEADERS_DIR}" | |
| # Add System.map and .config (useful for debugging and some build scenarios) | |
| cp System.map "${HEADERS_DIR}/" | |
| cp .config "${HEADERS_DIR}/" | |
| # Package just the headers contents (flat structure) | |
| tar czf kernel-headers-x86_64.tar.gz -C "${HEADERS_DIR}" . | |
| echo "Kernel headers packaged for ${KVER}:" | |
| du -sh kernel-headers-x86_64.tar.gz | |
| - name: Verify tools are statically linked | |
| run: | | |
| echo "Checking that host tools are statically linked..." | |
| FAILED=0 | |
| for tool in kernel-headers-x86/scripts/basic/fixdep \ | |
| kernel-headers-x86/scripts/mod/modpost \ | |
| kernel-headers-x86/tools/objtool/objtool; do | |
| if [ -f "$tool" ]; then | |
| if file "$tool" | grep -q "statically linked"; then | |
| echo "✓ $tool: statically linked" | |
| else | |
| echo "✗ $tool: DYNAMICALLY LINKED - this will cause glibc compatibility issues!" | |
| file "$tool" | |
| FAILED=1 | |
| fi | |
| fi | |
| done | |
| if [ $FAILED -eq 1 ]; then | |
| echo "ERROR: Some tools are dynamically linked. Check HOSTLDFLAGS setting." | |
| exit 1 | |
| fi | |
| echo "All tools verified as statically linked." | |
| - 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 kernel headers 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: kernel-headers-x86_64.tar.gz | |
| asset_name: kernel-headers-x86_64.tar.gz | |
| asset_content_type: application/gzip | |
| - name: Upload kernel headers 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: kernel-headers-aarch64.tar.gz | |
| asset_name: kernel-headers-aarch64.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 |