1*cb9d4bb1SMuhammad Moinur Rahman#!/bin/sh 2*cb9d4bb1SMuhammad Moinur Rahman# 3*cb9d4bb1SMuhammad Moinur Rahman# SPDX-License-Identifier: BSD-2-Clause 4*cb9d4bb1SMuhammad Moinur Rahman# 5*cb9d4bb1SMuhammad Moinur Rahman# Copyright (c) 2024 The FreeBSD Foundation 6*cb9d4bb1SMuhammad Moinur Rahman# 7*cb9d4bb1SMuhammad Moinur Rahman# This software was developed by Cybermancer Infosec <bofh@FreeBSD.org> 8*cb9d4bb1SMuhammad Moinur Rahman# under sponsorship from the FreeBSD Foundation. 9*cb9d4bb1SMuhammad Moinur Rahman# 10*cb9d4bb1SMuhammad Moinur Rahman# PROVIDE: freebsdci 11*cb9d4bb1SMuhammad Moinur Rahman# REQUIRE: LOGIN FILESYSTEMS 12*cb9d4bb1SMuhammad Moinur Rahman# KEYWORD: firstboot 13*cb9d4bb1SMuhammad Moinur Rahman 14*cb9d4bb1SMuhammad Moinur Rahman# This script is used to run the firstboot CI tests on the first boot of a 15*cb9d4bb1SMuhammad Moinur Rahman# FreeBSD image. It is automatically disabled after the first boot. 16*cb9d4bb1SMuhammad Moinur Rahman# 17*cb9d4bb1SMuhammad Moinur Rahman# The script will run the firstboot CI tests and then shut down the system. 18*cb9d4bb1SMuhammad Moinur Rahman# The tests are run in the foreground so that the system can shut down 19*cb9d4bb1SMuhammad Moinur Rahman# immediately after the tests are finished. 20*cb9d4bb1SMuhammad Moinur Rahman# 21*cb9d4bb1SMuhammad Moinur Rahman# Default test types are full and smoke. To run only the smoke tests, set 22*cb9d4bb1SMuhammad Moinur Rahman# freebsdci_type="smoke" in /etc/rc.conf.local or /etc/rc.conf. 23*cb9d4bb1SMuhammad Moinur Rahman# To run only the full tests, set freebsdci_type="full" in 24*cb9d4bb1SMuhammad Moinur Rahman# /etc/rc.conf.local or /etc/rc.conf. 25*cb9d4bb1SMuhammad Moinur Rahman 26*cb9d4bb1SMuhammad Moinur Rahman. /etc/rc.subr 27*cb9d4bb1SMuhammad Moinur Rahman 28*cb9d4bb1SMuhammad Moinur Rahman: ${freebsdci_enable:="NO"} 29*cb9d4bb1SMuhammad Moinur Rahman 30*cb9d4bb1SMuhammad Moinur Rahmanname="freebsdci" 31*cb9d4bb1SMuhammad Moinur Rahmandesc="Run FreeBSD CI" 32*cb9d4bb1SMuhammad Moinur Rahmanrcvar=freebsdci_enable 33*cb9d4bb1SMuhammad Moinur Rahmanstart_cmd="firstboot_ci_run" 34*cb9d4bb1SMuhammad Moinur Rahmanstop_cmd=":" 35*cb9d4bb1SMuhammad Moinur Rahmanos_arch=$(uname -p) 36*cb9d4bb1SMuhammad Moinur Rahman 37*cb9d4bb1SMuhammad Moinur Rahmanauto_shutdown() 38*cb9d4bb1SMuhammad Moinur Rahman{ 39*cb9d4bb1SMuhammad Moinur Rahman # XXX: Currently RISC-V kernels lack the ability to 40*cb9d4bb1SMuhammad Moinur Rahman # make qemu exit on shutdown. Reboot instead; 41*cb9d4bb1SMuhammad Moinur Rahman # it makes qemu exit too. 42*cb9d4bb1SMuhammad Moinur Rahman case "$os_arch" in 43*cb9d4bb1SMuhammad Moinur Rahman riscv64) 44*cb9d4bb1SMuhammad Moinur Rahman shutdown -r now 45*cb9d4bb1SMuhammad Moinur Rahman ;; 46*cb9d4bb1SMuhammad Moinur Rahman *) 47*cb9d4bb1SMuhammad Moinur Rahman shutdown -p now 48*cb9d4bb1SMuhammad Moinur Rahman ;; 49*cb9d4bb1SMuhammad Moinur Rahman esac 50*cb9d4bb1SMuhammad Moinur Rahman} 51*cb9d4bb1SMuhammad Moinur Rahman 52*cb9d4bb1SMuhammad Moinur Rahmansmoke_tests() 53*cb9d4bb1SMuhammad Moinur Rahman{ 54*cb9d4bb1SMuhammad Moinur Rahman echo 55*cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 56*cb9d4bb1SMuhammad Moinur Rahman echo "BUILD sequence COMPLETED" 57*cb9d4bb1SMuhammad Moinur Rahman echo "IMAGE sequence COMPLETED" 58*cb9d4bb1SMuhammad Moinur Rahman echo "BOOT sequence COMPLETED" 59*cb9d4bb1SMuhammad Moinur Rahman echo "INITIATING system SHUTDOWN" 60*cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 61*cb9d4bb1SMuhammad Moinur Rahman} 62*cb9d4bb1SMuhammad Moinur Rahman 63*cb9d4bb1SMuhammad Moinur Rahmanfull_tests() 64*cb9d4bb1SMuhammad Moinur Rahman{ 65*cb9d4bb1SMuhammad Moinur Rahman # Currently this is a placeholder. 66*cb9d4bb1SMuhammad Moinur Rahman # This will be used to add the full tests scenario those are run in 67*cb9d4bb1SMuhammad Moinur Rahman # the CI system 68*cb9d4bb1SMuhammad Moinur Rahman echo 69*cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 70*cb9d4bb1SMuhammad Moinur Rahman echo "BUILD sequence COMPLETED" 71*cb9d4bb1SMuhammad Moinur Rahman echo "IMAGE sequence COMPLETED" 72*cb9d4bb1SMuhammad Moinur Rahman echo "BOOT sequence COMPLETED" 73*cb9d4bb1SMuhammad Moinur Rahman echo "TEST sequence STARTED" 74*cb9d4bb1SMuhammad Moinur Rahman echo "TEST sequence COMPLETED" 75*cb9d4bb1SMuhammad Moinur Rahman echo "INITIATING system SHUTDOWN" 76*cb9d4bb1SMuhammad Moinur Rahman echo "--------------------------------------------------------------" 77*cb9d4bb1SMuhammad Moinur Rahman} 78*cb9d4bb1SMuhammad Moinur Rahman 79*cb9d4bb1SMuhammad Moinur Rahmanfirstboot_ci_run() 80*cb9d4bb1SMuhammad Moinur Rahman{ 81*cb9d4bb1SMuhammad Moinur Rahman if [ "$freebsdci_type" = "smoke" ]; then 82*cb9d4bb1SMuhammad Moinur Rahman smoke_tests 83*cb9d4bb1SMuhammad Moinur Rahman elif [ "$freebsdci_type" = "full" ]; then 84*cb9d4bb1SMuhammad Moinur Rahman full_tests 85*cb9d4bb1SMuhammad Moinur Rahman fi 86*cb9d4bb1SMuhammad Moinur Rahman auto_shutdown 87*cb9d4bb1SMuhammad Moinur Rahman} 88*cb9d4bb1SMuhammad Moinur Rahman 89*cb9d4bb1SMuhammad Moinur Rahmanload_rc_config $name 90*cb9d4bb1SMuhammad Moinur Rahmanrun_rc_command "$1" 91