From ce7fd754a3d831c563a8589f1cc35e55ce027814 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Fri, 26 Apr 2024 19:41:00 +0100 Subject: build/roms: report status when building images export LBMK_VERSION_TYPE=x x can be: stable, unstable in target.cfg files, specify: status=x x can be: stable, unstable, broken, untested if unset, lbmk defaults to "unknown" if LBMK_VERSION_TYPE is set, no confirmation is asked if the given target matches what's set (but what's set in that environmental variable can only be stable or unstable) if LBMK_RELEASE="y", no confirmation is asked, unless the target is something other than stable/unstable "unstable" means it works, but has a few non-breaking bugs, e.g. broken s3 on dell e6400 whereas, if raminit regularly fails or it is so absolutely unreliable as to be unusable, then the board should be declared "broken" untested means: it has not been tested With this change, it should now be easier to track whether a given board is tested, in preparation for releases. When working on trees/boards, status can be set for targets. Also: in the board directory, you can add a "warn.txt" file which will display a message. For example, if a board has a particular quirk to watch out for, write that there. The message will be printed during the build process, to stdout. If status is anything *other* than stable, or it is unstable but LBMK_VERSION_TYPE is not set to "unstable", and not building a release, a confirmation is passed. If the board is not specified as stable or unstable, during a release build, the build is skipped and the ROM is not provided in that release; this is in *addition* to release="n" or release="y" that can be set in target.cfg, which will skip the release build for that target if "n" Signed-off-by: Leah Rowe --- script/build/roms | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 6 deletions(-) (limited to 'script') diff --git a/script/build/roms b/script/build/roms index 5fdc05c9..2269e714 100755 --- a/script/build/roms +++ b/script/build/roms @@ -21,9 +21,10 @@ cfgsdir="config/coreboot" pv="payload_grub payload_grub_withseabios payload_seabios payload_memtest t" pv="${pv} payload_seabios_withgrub payload_seabios_grubonly payload_uboot memtest_bin" v="romdir cbrom initmode displaymode cbcfg targetdir tree keymaps release" -v="${v} grub_timeout ubdir board grub_scan_disk uboot_config" +v="${v} grub_timeout ubdir board grub_scan_disk uboot_config status" eval "$(setvars "n" ${pv})" -eval "$(setvars "" ${v} boards _displaymode _payload _keyboard all targets)" +eval "$(setvars "" ${v} boards _displaymode _payload _keyboard all targets \ + skipped)" main() { @@ -55,20 +56,31 @@ main() eval "$(setvars "n" ${pv}) $(setvars "" ${v})" grub_background="background1280x800.png" board="${x}" + configure_target + [ "$board" = "$tree" ] && \ + return 1 + + handle_status # exclude certain targets from the release - if [ "$release" = "n" ] && [ "$lbmk_release" = "y" ]; then - printf "Skipping target: %s\n" "$x" - continue - fi + skip_board && \ + printf "Skip target %s(%s)\n" "$board" "$status" && \ + skipped="* $board($status)\n$skipped" && continue build_payloads build_target_mainboard + [ -d "bin/${board}" ] || continue targets="* bin/${board}\n${targets}" done + if [ -n "$skipped" ]; then + printf "\nThese targets were skipped:\n" + eval "printf \"${skipped}\"" + printf "^^ These targets were skipped.\n\n" + fi + [ -z "${targets}" ] && $err "No ROM images were compiled" printf "\nROM images available in these directories:\n" eval "printf \"${targets}\"" @@ -125,6 +137,48 @@ configure_target() eval "payload_${_payload}=y" } +handle_status() +{ + [ "$status" = "stable" ] || [ "$status" = "unstable" ] || \ + [ "$status" = "broken" ] || [ "$status" = "untested" ] || \ + status="unknown" + + printf "Handling target: %s (status=%s)\n" "$board" "$status" + + [ "$status" = "broken" ] && release="n" + [ "$status" = "unknown" ] && release="n" + [ "$status" = "untested" ] && release="n" + + [ "$status" != "stable" ] && [ "$status" != "$release_type" ] && \ + printf "WARNING: %s not marked stable (status=%s):\n\n" \ + "$board" "$status"; return 0 +} + +skip_board() +{ + [ "$release" = "n" ] && [ "$lbmk_release" = "y" ] && \ + return 0 + [ -n "$release_type" ] && [ "$status" = "$release_type" ] && \ + return 1 + + if [ "$lbmk_release" != "y" ] && [ "$status" != "stable" ] && \ + [ "$status" != "$release_type" ]; then + if [ -f "$targetdir/warn.txt" ]; then + printf "Regarding board '%s' (status '%s'):\n" \ + "$board" "$status" + cat -u "$targetdir/warn.txt" || \ + $err "!cat $targetdir/warn.txt" + fi + while true; do + printf "Board %s has status '%s'. Skip? [y/n]" \ + "$board" "$status" + read -r skip + [ "$skip" = "y" ] && return 0 + [ "$skip" = "n" ] && return 1; continue + done + fi; return 1 +} + build_payloads() { romdir="bin/${board}" -- cgit v1.2.1