From 448d3462b0f85c0f70ce67f7684497247b34c3d8 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Mon, 30 Nov 2020 20:57:52 +0000 Subject: [PATCH] CI: Add mkosi boot tests Using the new mkosi Github Action, we can add some simple boot tests for the systemd mkosi configs. This makes sure these keep working as expected. --- .github/workflows/mkosi.yml | 42 ++++++++++++++++++++++++++++ .github/workflows/test_mkosi_boot.py | 27 ++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 .github/workflows/mkosi.yml create mode 100755 .github/workflows/test_mkosi_boot.py diff --git a/.github/workflows/mkosi.yml b/.github/workflows/mkosi.yml new file mode 100644 index 0000000000..7c55d7dc1b --- /dev/null +++ b/.github/workflows/mkosi.yml @@ -0,0 +1,42 @@ +name: mkosi + +# Simple boot tests that build and boot the mkosi images generated by the mkosi config files in .mkosi. + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + ci: + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + distro: + - arch + - debian + - ubuntu + - fedora + + steps: + - uses: actions/checkout@v2 + - uses: systemd/mkosi@v8 + + - name: Install + run: sudo apt-get update && sudo apt-get install --no-install-recommends + ovmf + python3-pexpect + qemu-system-x86-64 + + - name: Build ${{ matrix.distro }} + run: sudo python3 -m mkosi --default .mkosi/mkosi.${{ matrix.distro }} --password= --qemu-headless build + + - name: Boot ${{ matrix.distro }} systemd-nspawn + run: sudo ./.github/workflows/test_mkosi_boot.py python3 -m mkosi --default .mkosi/mkosi.${{ matrix.distro }} --password= --qemu-headless boot + + - name: Boot ${{ matrix.distro }} QEMU + run: sudo ./.github/workflows/test_mkosi_boot.py python3 -m mkosi --default .mkosi/mkosi.${{ matrix.distro }} --password= --qemu-headless qemu diff --git a/.github/workflows/test_mkosi_boot.py b/.github/workflows/test_mkosi_boot.py new file mode 100755 index 0000000000..37904eb059 --- /dev/null +++ b/.github/workflows/test_mkosi_boot.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1-or-later + +import pexpect +import sys + + +def run() -> None: + p = pexpect.spawnu(" ".join(sys.argv[1:]), logfile=sys.stdout, timeout=300) + + p.expect("login:") + p.sendline("root") + + p.expect("#") + p.sendline("systemctl poweroff") + + p.expect(pexpect.EOF) + + +try: + run() +except pexpect.EOF: + print("UNEXPECTED EOF") + sys.exit(1) +except pexpect.TIMEOUT: + print("TIMED OUT") + sys.exit(1)