1cb9d4bb1SMuhammad Moinur Rahman#!/bin/sh 2cb9d4bb1SMuhammad Moinur Rahman# 3cb9d4bb1SMuhammad Moinur Rahman# SPDX-License-Identifier: BSD-2-Clause 4cb9d4bb1SMuhammad Moinur Rahman# 5cb9d4bb1SMuhammad Moinur Rahman# Copyright (c) 2024 The FreeBSD Foundation 6cb9d4bb1SMuhammad Moinur Rahman# 7cb9d4bb1SMuhammad Moinur Rahman# This software was developed by Cybermancer Infosec <bofh@FreeBSD.org> 8cb9d4bb1SMuhammad Moinur Rahman# under sponsorship from the FreeBSD Foundation. 9cb9d4bb1SMuhammad Moinur Rahman# 10cb9d4bb1SMuhammad Moinur Rahman# PROVIDE: freebsdci 11cb9d4bb1SMuhammad Moinur Rahman# REQUIRE: LOGIN FILESYSTEMS 12cb9d4bb1SMuhammad Moinur Rahman# KEYWORD: firstboot 13cb9d4bb1SMuhammad Moinur Rahman 14cb9d4bb1SMuhammad Moinur Rahman# This script is used to run the firstboot CI tests on the first boot of a 15cb9d4bb1SMuhammad Moinur Rahman# FreeBSD image. It is automatically disabled after the first boot. 16cb9d4bb1SMuhammad Moinur Rahman# 17cb9d4bb1SMuhammad Moinur Rahman# The script will run the firstboot CI tests and then shut down the system. 18cb9d4bb1SMuhammad Moinur Rahman# The tests are run in the foreground so that the system can shut down 19cb9d4bb1SMuhammad Moinur Rahman# immediately after the tests are finished. 20cb9d4bb1SMuhammad Moinur Rahman# 21cb9d4bb1SMuhammad Moinur Rahman# Default test types are full and smoke. To run only the smoke tests, set 22cb9d4bb1SMuhammad Moinur Rahman# freebsdci_type="smoke" in /etc/rc.conf.local or /etc/rc.conf. 23cb9d4bb1SMuhammad Moinur Rahman# To run only the full tests, set freebsdci_type="full" in 24cb9d4bb1SMuhammad Moinur Rahman# /etc/rc.conf.local or /etc/rc.conf. 25cb9d4bb1SMuhammad Moinur Rahman 26cb9d4bb1SMuhammad Moinur Rahman. /etc/rc.subr 27cb9d4bb1SMuhammad Moinur Rahman 28cb9d4bb1SMuhammad Moinur Rahmanname="freebsdci" 29cb9d4bb1SMuhammad Moinur Rahmandesc="Run FreeBSD CI" 30cb9d4bb1SMuhammad Moinur Rahmanrcvar=freebsdci_enable 31cb9d4bb1SMuhammad Moinur Rahmanstart_cmd="firstboot_ci_run" 32cb9d4bb1SMuhammad Moinur Rahmanstop_cmd=":" 33cb9d4bb1SMuhammad Moinur Rahmanos_arch=$(uname -p) 34f6e5bcd4SSiva Mahadevanparallelism=$(nproc) 35c08f5ad1SMuhammad Moinur Rahmantardev=/dev/vtbd1 36c08f5ad1SMuhammad Moinur Rahmanmetadir=/meta 37c08f5ad1SMuhammad Moinur Rahmanistar=$(file -s ${tardev} | grep "POSIX tar archive" | wc -l) 38cb9d4bb1SMuhammad Moinur Rahman 3957f725a6SSiva Mahadevanload_rc_config $name 4057f725a6SSiva Mahadevan: ${freebsdci_enable:="NO"} 4157f725a6SSiva Mahadevan: ${freebsdci_type:="full"} 42*92a7f2d5SSiva Mahadevan: ${freebsdci_test_filters:=""} 4357f725a6SSiva MahadevanPATH="${PATH}:/usr/local/sbin:/usr/local/bin" 4457f725a6SSiva Mahadevan 45cb9d4bb1SMuhammad Moinur Rahmanauto_shutdown() 46cb9d4bb1SMuhammad Moinur Rahman{ 47c08f5ad1SMuhammad Moinur Rahman # NOTE: Currently RISC-V kernels lack the ability to 48cb9d4bb1SMuhammad Moinur Rahman # make qemu exit on shutdown. Reboot instead; 49cb9d4bb1SMuhammad Moinur Rahman # it makes qemu exit too. 50cb9d4bb1SMuhammad Moinur Rahman case "$os_arch" in 51cb9d4bb1SMuhammad Moinur Rahman riscv64) 52cb9d4bb1SMuhammad Moinur Rahman shutdown -r now 53cb9d4bb1SMuhammad Moinur Rahman ;; 54cb9d4bb1SMuhammad Moinur Rahman *) 55cb9d4bb1SMuhammad Moinur Rahman shutdown -p now 56cb9d4bb1SMuhammad Moinur Rahman ;; 57cb9d4bb1SMuhammad Moinur Rahman esac 58cb9d4bb1SMuhammad Moinur Rahman} 59cb9d4bb1SMuhammad Moinur Rahman 60cb9d4bb1SMuhammad Moinur Rahmansmoke_tests() 61cb9d4bb1SMuhammad Moinur Rahman{ 62cb9d4bb1SMuhammad Moinur Rahman echo 63cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 64cb9d4bb1SMuhammad Moinur Rahman echo "BOOT sequence COMPLETED" 65cb9d4bb1SMuhammad Moinur Rahman echo "INITIATING system SHUTDOWN" 66cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 67cb9d4bb1SMuhammad Moinur Rahman} 68cb9d4bb1SMuhammad Moinur Rahman 69cb9d4bb1SMuhammad Moinur Rahmanfull_tests() 70cb9d4bb1SMuhammad Moinur Rahman{ 71cb9d4bb1SMuhammad Moinur Rahman echo 72cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 73cb9d4bb1SMuhammad Moinur Rahman echo "BOOT sequence COMPLETED" 74cb9d4bb1SMuhammad Moinur Rahman echo "TEST sequence STARTED" 75c08f5ad1SMuhammad Moinur Rahman if [ "${istar}" -eq 1 ]; then 76c08f5ad1SMuhammad Moinur Rahman rm -fr ${metadir} 77c08f5ad1SMuhammad Moinur Rahman mkdir -p ${metadir} 78c08f5ad1SMuhammad Moinur Rahman tar xvf ${tardev} -C ${metadir} 79c08f5ad1SMuhammad Moinur Rahman cd /usr/tests 80c08f5ad1SMuhammad Moinur Rahman set +e 81*92a7f2d5SSiva Mahadevan kyua \ 82*92a7f2d5SSiva Mahadevan -v parallelism=${parallelism} \ 83*92a7f2d5SSiva Mahadevan test ${freebsdci_test_filters} 84c08f5ad1SMuhammad Moinur Rahman rc=$? 85c08f5ad1SMuhammad Moinur Rahman set -e 86c08f5ad1SMuhammad Moinur Rahman if [ ${rc} -ne 0 ] && [ ${rc} -ne 1 ]; then 87c08f5ad1SMuhammad Moinur Rahman exit ${rc} 88c08f5ad1SMuhammad Moinur Rahman fi 89c08f5ad1SMuhammad Moinur Rahman kyua report --verbose --results-filter passed,skipped,xfail,broken,failed --output test-report.txt 90c08f5ad1SMuhammad Moinur Rahman kyua report-junit --output=test-report.xml 91c08f5ad1SMuhammad Moinur Rahman mv test-report.* /${metadir} 92c08f5ad1SMuhammad Moinur Rahman tar cvf ${tardev} -C ${metadir} . 93c08f5ad1SMuhammad Moinur Rahman else 94c08f5ad1SMuhammad Moinur Rahman echo "ERROR: no device with POSIX tar archive format found." 95c08f5ad1SMuhammad Moinur Rahman # Don't shutdown because this is not run in unattended mode 96c08f5ad1SMuhammad Moinur Rahman exit 1 97c08f5ad1SMuhammad Moinur Rahman fi 98cb9d4bb1SMuhammad Moinur Rahman echo "TEST sequence COMPLETED" 99cb9d4bb1SMuhammad Moinur Rahman echo "INITIATING system SHUTDOWN" 100cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 101cb9d4bb1SMuhammad Moinur Rahman} 102cb9d4bb1SMuhammad Moinur Rahman 103cb9d4bb1SMuhammad Moinur Rahmanfirstboot_ci_run() 104cb9d4bb1SMuhammad Moinur Rahman{ 105cb9d4bb1SMuhammad Moinur Rahman if [ "$freebsdci_type" = "smoke" ]; then 106cb9d4bb1SMuhammad Moinur Rahman smoke_tests 107cb9d4bb1SMuhammad Moinur Rahman elif [ "$freebsdci_type" = "full" ]; then 108cb9d4bb1SMuhammad Moinur Rahman full_tests 109cb9d4bb1SMuhammad Moinur Rahman fi 110cb9d4bb1SMuhammad Moinur Rahman auto_shutdown 111cb9d4bb1SMuhammad Moinur Rahman} 112cb9d4bb1SMuhammad Moinur Rahman 113cb9d4bb1SMuhammad Moinur Rahmanrun_rc_command "$1" 114