Skip to content

CI: unify arm64 && amd64 integration test #377

CI: unify arm64 && amd64 integration test

CI: unify arm64 && amd64 integration test #377

Workflow file for this run

name: 'per x86_64 kernel integration test'
on:
schedule:
# Run job once a week on saturday at 8:15 AM.
- cron: '15 8 * * 6'
push:
branches: [ main ]
pull_request:
branches: [ '**' ]
# Set default permissions as read only.
permissions: read-all
jobs:
build-initramfs:
runs-on: ubuntu-latest
strategy:
matrix:
target_arch: ["amd64", "arm64"]
steps:
- name: checkout
uses: actions/checkout@v4
- name: set up Go
uses: actions/setup-go@v5
with:
go-version: 1.23
id: go
- name: compile tests
# bluebox works best with statically linked binaries. So we compile all the tests in this
# code base into a statically linked executable.
run: |
GOARCH=${{ matrix.target_arch }} go test -ldflags='-extldflags=-static' -trimpath -tags 'osusergo netgo static_build linux integration' -c
- name: build initramfs
# Install bluebox and generate a initramfs.cpio with the previously created statically linked
# tests embedded.
run: |
go install github.com/florianl/bluebox@latest
bluebox -a=${{ matrix.target_arch }} -e go-tc.test
- name: upload initramfs for tests
# Upload the generated initramfs.cpio and make it available for the parallel per-kernel tests.
uses: actions/upload-artifact@v4
with:
name: initramfs-${{ matrix.target_arch }}
path: |
initramfs.cpio
per-kernel-tests:
needs: build-initramfs
runs-on: ubuntu-latest
strategy:
matrix:
target_arch: ["amd64", "arm64"]
kernel-version: ["6.8", "6.9", "6.10", "6.11"]
steps:
- name: add Docker repo
run: |
# From https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- name: install dependencies
# Make sure required software packages are available.
run: |
sudo apt --yes update
sudo apt --yes install --no-install-recommends qemu-system-aarch64 qemu-system-x86 docker-buildx-plugin
- name: get initramfs
# Fetch the initramfs.cpio that was created in the previous step.
uses: actions/download-artifact@v4
with:
name: initramfs-${{ matrix.target_arch }}
- name: fetch and unpack Linux kernel
# Fetch the public kernel image that will be used in this test run.
# Inspired by extract_oci_image from cilium/ebpf.
run: |
mkdir /tmp/ci-kernel
echo "FROM ghcr.io/cilium/ci-kernels:${{ matrix.kernel-version }}" | docker buildx build --platform linux/${{ matrix.target_arch }} --quiet --pull --output="/tmp/ci-kernel/${{ matrix.target_arch }}/${{ matrix.kernel-version }}/" -
- name: DEBUG
run: |
ls -liahp
file initramfs.cpio
ls -liahp /tmp/ci-kernel/${{ matrix.target_arch }}/${{ matrix.kernel-version }}/
echo "boot"
ls -liahp /tmp/ci-kernel/${{ matrix.target_arch }}/${{ matrix.kernel-version }}/boot
- name: run tests on kernel x86
if: matrix.target_arch == 'amd64'
# Run the tests.
run: |
qemu-system-x86_64 -nographic -append "console=ttyS0" -m 2G -kernel /tmp/ci-kernel/${{ matrix.target_arch }}/${{ matrix.kernel-version }}/boot/vmlinuz -initrd initramfs.cpio | tee log.txt
grep PASS log.txt
- name: run tests on kernel arm64
if: matrix.target_arch == 'arm64'
# Run the tests.
run: |
qemu-system-aarch64 -nographic -append "console=ttyAMA0" -M virt -cpu cortex-a57 -m 4G -kernel /tmp/ci-kernel/${{ matrix.target_arch }}/${{ matrix.kernel-version }}/boot/vmlinuz -initrd initramfs.cpio | tee log.txt
grep PASS log.txt