#!/usr/bin/env bash # Copyright (C) 2023 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. . resources/scripts/misc/sysexits.sh topdir="$(realpath "$(dirname "$(dirname "$(dirname "$(dirname "$0")")")")")" progname="resources/packages/tests/test-release" rev="$("${topdir}"/resources/git/git describe --tags HEAD)" usage() { progname="$1" printf "Usage: %s [options]\n\n" "${progname}" printf "Available options:\n" printf "\t-h, --help\n" printf "\t\tDisplay this help and exit.\n" } test_file() { path="$1" test -f "${path}" ; ret=$? if [ ${ret} -eq 0 ] ; then echo "[ OK ] ${path}" else echo "[ !! ] ${path} is missing" exit ${ret} fi } test_qemu_rom_archive() { target="qemu-pc_2mb" dir="release" keyboard_layouts=" \ colemak \ deqwertz \ esqwerty \ frazerty \ frdvbepo \ itqwerty \ svenska \ trqwerty \ ukdvorak \ ukqwerty \ usdvorak \ usqwerty \ " archive_files="" for kb in ${keyboard_layouts} ; do cbfb="corebootfb" txtmode="txtmode" archive_files="${archive_files} \ ${target}/grub_${target}_${cbfb}_${kb}.rom \ ${target}/grub_${target}_${txtmode}_${kb}.rom \ ${target}/seabios_${target}_${cbfb}_${kb}.rom \ ${target}/seabios_${target}_${txtmode}_${kb}.rom \ " done archive_files="${archive_files} qemu-pc_2mb/version" archive_files="${archive_files} qemu-pc_2mb/versiondate" archive_files="${archive_files} qemu-pc_2mb/projectname" archive="${dir}"/roms/gnuboot-"${rev}"_"${target}".tar.xz for path in $(tar tf "${archive}" | grep -v '/$') ; do found=0 for archive_file in ${archive_files} ; do if [ "${path}" = "${archive_file}" ] ; then found=1 fi done if [ $found -eq 0 ] ; then echo "[ !! ] $path" fi done } test_release_dir() { dir="release" targets="\ d510mo \ d510mo_16mb \ d945gclf \ d945gclf_16mb \ g43t-am3 \ g43t-am3_16mb \ ga-g41m-es2l \ kcma-d8-rdimm_16mb \ kcma-d8-rdimm_2mb \ kcma-d8-udimm_16mb \ kcma-d8-udimm_2mb \ kfsn4-dre_1mb \ kfsn4-dre_2mb \ kgpe-d16-rdimm_16mb \ kgpe-d16-rdimm_2mb \ kgpe-d16-udimm_16mb \ kgpe-d16-udimm_2mb \ macbook11 \ macbook11_16mb \ macbook21 \ macbook21_16mb \ qemu-pc_2mb \ r400_16mb \ r400_4mb \ r400_8mb \ r500_4mb \ t400_16mb \ t400_4mb \ t400_8mb \ t500_16mb \ t500_4mb \ t500_8mb \ t60_16mb_intelgpu \ t60_intelgpu \ w500_16mb \ w500_4mb \ w500_8mb \ x200_16mb \ x200_4mb \ x200_8mb \ x301_16mb \ x301_4mb \ x301_8mb \ x60 \ x60_16mb \ " release_files="" for target in ${targets} ; do archive_path="${dir}"/roms/gnuboot-"${rev}"_"${target}".tar.xz release_files="${release_files}"" ""${archive_path}" done release_files="${release_files}"" ""${dir}"/gnuboot-"${rev}"_src.tar.xz release_files="${release_files}"" ""${dir}"/gnuboot-source-"${rev}".bundle release_files="${release_files}"" ""${dir}"/untitled-"${rev}".bundle release_files="${release_files}"" ""${dir}"/gnuboot-website-"${rev}".tar.gz release_files="${release_files}"" ""${dir}"/i945-thinkpads-install/i945-thinkpads-install-utilities-deb-pack.deb release_files="${release_files}"" ""${dir}"/i945-thinkpads-install/packages_src.tar release_files="${release_files}"" ""${dir}"/i945-thinkpads-install/gnuboot_src.tar release_files="${release_files}"" ""${dir}"/i945-thinkpads-install/i945-thinkpads-install-utilities-tarball-pack.tar.gz for path in ${release_files} ; do test_file "${path}" done missing_in_release_files=0 while IFS= read -r -d '' path ; do found=0 for release_file in ${release_files} ; do if [ "${path}" = "${release_file}" ] ; then found=1 fi done if [ $found -eq 0 ] ; then echo "[ !! ] $path missing in \${release_files}" missing_in_release_files=$(expr $missing_in_release_files + 1) fi done < <(find "${dir}" -type f -print0) if [ ${missing_in_release_files} -gt 0 ] ; then exit 1 fi } test_release() { test_release_dir test_qemu_rom_archive } if [ $# -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" == "--help" ] ;} ; then usage "${progname}" exit 0 elif [ $# -eq 0 ] ; then test_release else usage "${progname}" exit ${EX_USAGE} fi