serenity/Meta/export-argsparser-manpages.sh
Timothy Flynn 9e9a07415e CI: Ensure the manpage generation step shuts down the VM on failure
Currently, if the script fails, it simply runs "exit 1". This exits the
script, but keeps the VM running, so CI hangs until it times out.

Instead of exiting, write a failure status to an error log and shutdown.
CI can then read that error log and fail the run if needed.
2022-10-31 22:10:14 +00:00

91 lines
2.8 KiB
Bash
Executable file
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
set -e
script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
cd "${script_path}/.."
if ! command -v tar >/dev/null 2>&1 ; then
echo "Please install tar!"
exit 1
fi
if [ "$#" = "0" ]; then
VERIFY_GIT_STATE=n
elif [ "$#" = "1" ] && [ "$1" = "--verify-git-state" ]; then
VERIFY_GIT_STATE=y
else
echo "USAGE: $0 [--verify-git-state]"
echo "This script runs Serenity and exports a set of manpages through ArgsParser,"
echo "and places them in Base/usr/share/man/."
echo "If --verify-git-state is given, this script verifies that this does not modify"
echo "the git state, i.e. that all exported manpages already were in the repository"
echo "with the exact same content."
exit 1
fi
echo "This script assumes passwordless sudo."
sudo true
if [ -z "$BUILD_DIR" ]; then
if [ -z "$SERENITY_ARCH" ]; then
export SERENITY_ARCH="x86_64"
echo "SERENITY_ARCH not given. Assuming ${SERENITY_ARCH}."
fi
BUILD_DIR=Build/"$SERENITY_ARCH"
echo "BUILD_DIR not given. Assuming ${BUILD_DIR}."
fi
if [ -e fsmount ]; then
echo "Directory 'fsmount' already exists."
echo "Manual cleanup needed. You might also need to unmount first."
exit 1
fi
if ! [ -d Base/usr/share/man/ ]; then
echo "Base/usr/share/man/ does not exist. How did that happen?! o.O"
exit 1
fi
echo "Using 'ninja run' to generate manpages ..."
export SERENITY_RUN="ci"
export SERENITY_KERNEL_CMDLINE="graphics_subsystem_mode=off panic=shutdown system_mode=generate-manpages"
# The 'sed' gets rid of the clear-screen escape sequence.
ninja -C "$BUILD_DIR" -- run | sed -re 's,''c,,'
echo
mkdir fsmount
sudo mount -t ext2 -o loop,rw "$BUILD_DIR"/_disk_image fsmount
if sudo test -f "fsmount/root/generate_manpages_error.log"; then
echo ":^( Generating manpages failed, error log:"
sudo cat fsmount/root/generate_manpages_error.log
sudo umount fsmount
rmdir fsmount
exit 1
fi
echo "Extracting generated manpages ..."
# 'cp' would create the new files as root, but we don't want that.
sudo tar -C fsmount/root/generated_manpages --create . | tar -C Base/usr/share/man/ --extract
sudo umount fsmount
rmdir fsmount
echo "Successfully (re-)generated manpages in Base/usr/share/man/"
if [ "$VERIFY_GIT_STATE" = "y" ]; then
echo "Verifying git state ..."
if [ "" != "$(git clean -n Base/usr/share/man)" ] || ! git diff --quiet Base/usr/share/man; then
echo "Failed: There are missing and/or outdated manpages."
echo "$ git status Base/usr/share/man"
git status Base/usr/share/man
echo "$ git diff Base/usr/share/man"
git diff Base/usr/share/man
echo "You may need to run ./Meta/export-argsparser-manpages.sh on your system and commit/squash the resulting changes."
exit 1
else
echo "Verified: No missing or outdated manpages. Great!"
fi
fi