Skip to content

Cloud Hypervisor Linux Release #28

Cloud Hypervisor Linux Release

Cloud Hypervisor Linux Release #28

Workflow file for this run

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 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)
# HOSTLDFLAGS=-static makes scripts tools (modpost, etc.) statically linked
# so they don't depend on the build host's glibc version. -lz needed for objtool.
run: ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- HOSTLDFLAGS="-static -lz" 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)
# HOSTLDFLAGS=-static makes scripts tools (modpost, etc.) statically linked
# so they don't depend on the build host's glibc version. -lz needed for objtool.
run: HOSTLDFLAGS="-static -lz" 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: 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