From 5b0c3fcbfaf995d046479cb842201ccf5ded0e3e Mon Sep 17 00:00:00 2001 From: Johan Gunnarsson Date: Thu, 5 Aug 2021 20:01:46 +0200 Subject: [PATCH] Add GitHub Actions test --- .github/workflows/qemu.yml | 78 +++++++++++++++++++++++++++++++++ test/qemu.sh | 89 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 .github/workflows/qemu.yml create mode 100755 test/qemu.sh diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml new file mode 100644 index 0000000..1b16f7e --- /dev/null +++ b/.github/workflows/qemu.yml @@ -0,0 +1,78 @@ +name: sd-card-images CI + +on: + push: + branches: "*" + schedule: + - cron: "00 03 * * 0" + +env: + MAKEFLAGS: -j2 + +jobs: + bullseye-x86: + runs-on: ubuntu-latest + + steps: + - name: Install dependencies + timeout-minutes: 5 + env: + DEBIAN_FRONTEND: noninteractive + run: | + sudo apt-get update + sudo apt-get --assume-yes \ + --no-install-recommends \ + install bc \ + bison \ + bzip2 \ + ca-certificates \ + debian-archive-keyring \ + debootstrap \ + device-tree-compiler \ + dosfstools \ + e2fsprogs \ + flex \ + gcc \ + gcc-arm-none-eabi \ + gcc-i686-linux-gnu \ + git \ + libssl-dev \ + make \ + mtools \ + parted \ + pwgen \ + python2-dev \ + python3-dev \ + python3-pkg-resources \ + qemu-system-x86 \ + ssh \ + sshpass \ + swig + + - name: Checkout + uses: actions/checkout@v2 + + - name: Build qemu_x86_virt + timeout-minutes: 5 + run: | + env PATH=$GITHUB_WORKSPACE/scripts:$PATH \ + ARTIFACTS_DIR=$RUNNER_TEMP \ + build-boot qemu_x86_virt \ + qemu-x86 \ + qemu-x86_defconfig \ + i686-linux-gnu + + - name: Build bullseye i386 + timeout-minutes: 5 + run: | + sudo env PATH=$GITHUB_WORKSPACE/scripts:$PATH \ + ARTIFACTS_DIR=$RUNNER_TEMP \ + build-debian debian \ + i386 \ + bullseye + + - name: Test qemu_x86_virt + bullseye i386 + timeout-minutes: 5 + run: | + ./test/qemu.sh $RUNNER_TEMP/boot-qemu_x86_virt.bin.gz \ + $RUNNER_TEMP/debian-bullseye-i386-*.bin.gz diff --git a/test/qemu.sh b/test/qemu.sh new file mode 100755 index 0000000..bf55cee --- /dev/null +++ b/test/qemu.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# Boot up and shutdown + +BOOT="${1:-boot-qemu_aarch64_virt.bin.gz}" +DEBIAN="${2:-debian-bullseye-arm64-XXXXXX.bin.gz}" + +set -ex + +# Parse out stuff +IFS="-." read -a PARTS1 <<< `basename "${BOOT}"` +BOARD="${PARTS1[1]}" +echo "Using board ${BOARD}" + +# Parse out stuff +IFS="-." read -a PARTS2 <<< `basename "${DEBIAN}"` +ARCH="${PARTS2[2]}" +SSHPASS="${PARTS2[3]}" +echo "Using password ${SSHPASS}" + +# Build image +zcat "${BOOT}" "${DEBIAN}" > image.bin + +# Extract U-Boot (u-boot.rom in x86 case) +dd if=image.bin of=bios.bin count=2048 skip=16 + +case "${BOARD}" in +qemu*) + ;; +*) + echo "Unsupported \$BOARD: ${BOARD}" + exit 1 + ;; +esac + +case "${ARCH}" in +amd64) + QEMU_ARCH="x86_64" + QEMU_MACHINE="pc" + QEMU_CPU="qemu64" + ;; +i386) + QEMU_ARCH="i386" + QEMU_MACHINE="pc" + QEMU_CPU="qemu32" + ;; +arm64) + QEMU_ARCH="aarch64" + QEMU_MACHINE="virt" + QEMU_CPU="cortex-a53" + ;; +armhf) + QEMU_ARCH="arm" + QEMU_MACHINE="virt" + QEMU_CPU="cortex-a9" + ;; +*) + echo "Unknown \$ARCH: ${ARCH}" + exit 1 + ;; +esac + +# Launch QEMU with U-Boot and image +qemu-system-${QEMU_ARCH} -machine ${QEMU_MACHINE} \ + -cpu ${QEMU_CPU} \ + -m 512 \ + -bios bios.bin \ + -serial stdio \ + -no-reboot \ + -display none \ + -drive file=image.bin,format=raw,media=disk \ + -nic user,hostfwd=tcp:127.0.0.1:5555-:22 & + +sleep 15 + +# Pass password to sshpass +export SSHPASS + +# SSH into QEMU and shut it down +until sshpass -e ssh -o "ConnectTimeout=5" \ + -o "StrictHostKeyChecking=no" \ + -o "UserKnownHostsFile=/dev/null" \ + -p 5555 \ + -q \ + root@localhost "sleep 5 && poweroff"; do + sleep 1 +done + +# Wait for QEMU to exit +wait