systemd-nspawn --version
- name: Build ${{ matrix.distro }}
- run: |
- sudo python3 -m mkosi --build-environment=CI_BUILD=1 --kernel-command-line "${{ env.KERNEL_CMDLINE }}" build
+ run: ./.github/workflows/run_mkosi.sh --build-environment=CI_BUILD=1 --kernel-command-line "${{ env.KERNEL_CMDLINE }}" build
- name: Show ${{ matrix.distro }} image summary
- run: sudo python3 -m mkosi summary
+ run: ./.github/workflows/run_mkosi.sh summary
- name: Boot ${{ matrix.distro }} systemd-nspawn
- run: sudo python3 -m mkosi boot ${{ env.KERNEL_CMDLINE }}
+ run: ./.github/workflows/run_mkosi.sh boot ${{ env.KERNEL_CMDLINE }}
- name: Check ${{ matrix.distro }} systemd-nspawn
- run: sudo python3 -m mkosi shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
+ run: ./.github/workflows/run_mkosi.sh shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
- name: Boot ${{ matrix.distro }} QEMU
- run: sudo python3 -m mkosi qemu
+ run: ./.github/workflows/run_mkosi.sh qemu
- name: Check ${{ matrix.distro }} QEMU
- run: sudo python3 -m mkosi shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
+ run: ./.github/workflows/run_mkosi.sh shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
--- /dev/null
+#!/bin/bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+# shellcheck disable=SC2064
+
+set -eu
+set -o pipefail
+
+EC=0
+TEMPFILE="$(mktemp)"
+trap "rm -f '$TEMPFILE'" EXIT
+
+for ((i = 0; i < 5; i++)); do
+ EC=0
+ (sudo python3 -m mkosi "$@") |& tee "$TEMPFILE" || EC=$?
+ if [[ $EC -eq 0 ]]; then
+ # The command passed - let's return immediatelly
+ break
+ fi
+
+ if ! grep -E "Failed to dissect image .+: Connection timed out" "$TEMPFILE"; then
+ # The command failed for other reason than the dissect-related timeout -
+ # let's exit with the same EC
+ exit $EC
+ fi
+
+ # The command failed due to the dissect-related timeout - let's try again
+ sleep 1
+done
+
+exit $EC