diff --git a/.github/99_autoshutdown.sh b/.github/99_autoshutdown.sh new file mode 100644 index 00000000..ed88b5c4 --- /dev/null +++ b/.github/99_autoshutdown.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# This script shuts down the OS after one minute. +sleep 30 && poweroff & + +cat << CEOF + Minimal Linux Live will shut down in 30 seconds. +CEOF + diff --git a/.github/build_mll.sh b/.github/build_mll.sh new file mode 100644 index 00000000..d30eb56a --- /dev/null +++ b/.github/build_mll.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# This script is supposed to be executed by GitHub workflow. + +set -e + +cd ../src + +sudo apt-get -qq -y install wget make gawk gcc bc xz-utils bison flex xorriso libelf-dev libssl-dev + +PREFIXES="00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16" + +for PREFIX in ${PREFIXES} +do + SCRIPTS=`ls ${PREFIX}_*.sh` + for SCRIPT in ${SCRIPTS} + do + echo "`date` | Running script '${SCRIPT}'." + set +e + ./${SCRIPT} > /tmp/mll.log 2>&1 + set -e + + if [ "$?" = "0" ] ; then + echo "`date` | Success." + tail -n 40 /tmp/mll.log + echo "*** *** ***" + else + echo "`date` | !!! FAILURE !!!" + tail -n 1000 /tmp/mll.log + exit 1 + fi + done +done + +cat << CEOF + + ###################### + # # + # MLL build is OK. # + # # + ###################### + +CEOF + +set +e diff --git a/.github/github-ci.sh b/.github/github-ci.sh new file mode 100644 index 00000000..1e1c992a --- /dev/null +++ b/.github/github-ci.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script is supposed to be executed by GitHub workflow. + +set -e + +# Apply GitHub workflow specific patches +mkdir -p ../src/minimal_overlay/rootfs/etc/autorun +cp 99_autoshutdown.sh ../src/minimal_overlay/rootfs/etc/autorun +chmod +x ../src/minimal_overlay/rootfs/etc/autorun/99_autoshutdown.sh +cp -f syslinux.cfg ../src/minimal_boot/bios/boot/syslinux/syslinux.cfg +sed -i "s|OVERLAY_LOCATION.*|OVERLAY_LOCATION=rootfs|" ../src/.config + +sudo apt-get -qq -y update +sudo apt-get -qq -y upgrade + +set +e diff --git a/.github/syslinux.cfg b/.github/syslinux.cfg new file mode 100644 index 00000000..457e8092 --- /dev/null +++ b/.github/syslinux.cfg @@ -0,0 +1,6 @@ +SERIAL 0 +DEFAULT operatingsystem +LABEL operatingsystem + LINUX /boot/kernel.xz + APPEND console=tty0 console=ttyS0 + INITRD /boot/rootfs.xz diff --git a/.github/test_docker.sh b/.github/test_docker.sh new file mode 100644 index 00000000..e73adbd8 --- /dev/null +++ b/.github/test_docker.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# This script is supposed to be executed by GitHub workflow. + +set -e + +cd ../src + +echo "`date` | *** MLL Docker test - BEGIN ***" + +docker import mll_image.tgz minimal-linux-live:latest +docker run minimal-linux-live /bin/cat /etc/motd + +echo "`date` | *** MLL Docker test - END ***" + +cat << CEOF + + ######################### + # # + # Docker test passed. # + # # + ######################### + +CEOF + +set +e + diff --git a/.github/test_qemu.sh b/.github/test_qemu.sh new file mode 100644 index 00000000..1e350095 --- /dev/null +++ b/.github/test_qemu.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +# This script is supposed to be executed by GitHub workflow. + +set -e + +cd ../src + +sudo apt-get -qq -y install qemu-system-x86-64 + +echo "`date` | *** MLL QEMU test - BEGIN ***" + +qemu-system-x86_64 -m 256M -cdrom minimal_linux_live.iso -boot d -nographic & + +sleep 5 + +if [ "`ps -ef | grep -i [q]emu-system-x86_64`" = "" ] ; then + echo "`date` | !!! FAILURE !!! Minimal Linux Live is not running in QEMU." + exit 1 +else + echo "`date` | Minimal Linux Live is running in QEMU. Waiting 120 seconds for automatic shutdown." +fi + +sleep 120 + +if [ "`ps -ef | grep -i [q]emu-system-x86_64`" = "" ] ; then + echo "`date` | Minimal Linux Live is not running in QEMU." +else + echo "`date` | !!! FAILURE !!! Minimal Linux Live is still running in QEMU." + ps -ef | grep -i [q]emu-system-x86_64 + exit 1 +fi + +echo "`date` | *** MLL QEMU test - END ***" + +cat << CEOF + + ####################### + # # + # QEMU test passed. # + # # + ####################### + +CEOF + +set +e + diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 66819ded..8eb3e05e 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -1,14 +1,23 @@ -name: 'Manual workflow' +name: 'MLL With Integration Tests' on: 'workflow_dispatch' jobs: mll: runs-on: 'ubuntu-latest' steps: - uses: actions/checkout@v2 - - name: 'Install Prerequisites' + - name: 'Apply Workflow Patches' run: | - sudo apt install wget make gawk gcc bc bison flex xorriso libelf-dev libssl-dev - - name: 'Build MLL' + cd .github + bash ./github-ci.sh + - name: 'Build Minimal Linux Live' run: | - cd src - ./build_minimal_linux_live.sh + cd .github + bash ./build_mll.sh + - name: 'Test Docker' + run: | + cd .github + bash ./test_docker.sh + - name: 'Test QEMU' + run: | + cd .github + bash ./test_qemu.sh