xref: /freebsd/tests/ci/tools/freebsdci (revision 92a7f2d577630d670643f855a1d123a2260102af)
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