gnuboot/website-build/check.sh

130 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright (C) 2022-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/>.
# For compatibility with sysexits.h (see man 3 sysexits.h for more details)
EX_USAGE=64
tarball=""
usage()
{
progname="$1"
echo "Usage: ${progname} <option [ARGUMENT]>"
echo ""
echo "Available options:"
echo -e "\t-h, --help"
echo -e "\t\tDisplay this help and exit."
echo -e "\t-d, --directory DIRECTORY"
echo -e "\t\tCheck DIRECTORY"
echo -e "\t-t, --tarball TARBALL"
echo -e "\t\tCheck TARBALL\n"
}
test_directory_pattern()
{
name="$1"
directory="$2"
pattern="$3"
find "${directory}" -print0 | sed "s#^${directory}/##" | grep -q "${pattern}"
result=$?
if [ ${result} -eq 0 ] ; then
echo "[ OK ] ${name}"
else
echo "[ !! ] ${name} failed"
exit 1
fi
}
test_tarball_pattern()
{
name="$1"
tarball="$2"
pattern="$3"
tar tf "${tarball}" | grep -q "${pattern}"
result=$?
if [ ${result} -eq 0 ] ; then
echo "[ OK ] ${name}"
else
echo "[ !! ] ${name} failed"
exit 1
fi
}
test_tarball_savannah_cvs_constraints()
{
name="$1"
tarball="$2"
nr_files=$(tar tf "${tarball}" | grep -c -v '/')
if [ "${nr_files}" = "1" ] ; then
echo "[ OK ] ${name}"
else
echo "[ !! ] ${name} failed"
exit 1
fi
}
run_directory_tests()
{
directory="$1"
directory_name="$(basename "${directory}")"
test_directory_pattern "${directory_name}: index.html present test" \
"${directory}" \
'software/gnuboot/index.html'
test_directory_pattern "${directory_name}: html test" \
"${directory}" \
'software/gnuboot/web/.*\.html$'
}
run_tarball_tests()
{
tarball="$1"
filename="$(basename "${tarball}")"
test_tarball_pattern "${filename}: html test" "${tarball}" '\.html$'
test_tarball_pattern "${filename}: jpg test" "${tarball}" '\.jpg$'
test_tarball_savannah_cvs_constraints \
"${filename}: Savannah CVS: Only /index.html in root directory" \
"${tarball}"
}
# shellcheck disable=SC2166 # We want to make operator precedence
# clear.
if [ $# -eq 1 ] && [ "$1" = "-h" -o "$1" == "--help" ] ; then
usage "check.sh"
exit 0
elif [ $# -eq 2 ] && [ "$1" = "-d" -o "$1" = "--directory" ] ; then
directory="$(realpath "$2")"
run_directory_tests "${directory}"
elif [ $# -eq 2 ] && [ "$1" = "-t" -o "$1" = "--tarball" ] ; then
tarball="$(realpath "$2")"
run_tarball_tests "${tarball}"
else
usage "check.sh"
exit ${EX_USAGE}
fi