Skip to content

Cloud Hypervisor Linux Release #37

Cloud Hypervisor Linux Release

Cloud Hypervisor Linux Release #37

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]
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