-
Hahn Axel (hahn) authoredHahn Axel (hahn) authored
goto_build_dir.sh 3.40 KiB
#!/bin/bash
# ======================================================================
#
# HELPER :: GO TO A BUILD DIRECTORY
#
# Jump to a build directory to debug build errors.
#
# ----------------------------------------------------------------------
# 2024-01-19 v1.0 <axel.hahn@iml.unibe.ch> first lines
# 2024-07-25 v1.1 <axel.hahn@iml.unibe.ch> deny root access; shell fixes
# ======================================================================
cd "$( dirname "$0" )/.." || exit 1
CI_APPROOT=$( pwd )
# ----------------------------------------------------------------------
# header
# ----------------------------------------------------------------------
cat <<HEADEREND
+----------------------------------------------------------------------
| CI SERVER * helper script
| Jump to a build directory to debug build errors
:
HEADEREND
# ----------------------------------------------------------------------
# deny start as root
# ----------------------------------------------------------------------
if [ "$( id -u )" -eq 0 ]; then
echo "ERROR: do not start this script as root."
exit 1
fi
# ----------------------------------------------------------------------
# detect workdir
# ----------------------------------------------------------------------
datadefault=$( grep "'workDir'.*=>" config/config_defaults.php | cut -f 2 -d '>' | cut -f 2 -d "'" )
datacustom=$( grep "'workDir'.*=>" config/config_custom.php | cut -f 2 -d '>' | cut -f 2 -d "'" )
CI_WORKDIR=${datacustom:-$datadefault}
if [ -z "$CI_WORKDIR" ]; then
echo "ERROR: Unable to parse working dir from config/config_*.php."
echo " Sorry ... it is Bash here :-/"
exit 1
fi
builddir="$CI_WORKDIR/build/"
# ----------------------------------------------------------------------
# detect builds on error
# ----------------------------------------------------------------------
ls "$builddir" >/dev/null || exit 1
echo "Searching for builds im $builddir..."
founddirs=$( find "$builddir" -maxdepth 2 -type d | grep '2[0-1][0-9][0-9][0-1][0-9][0-3][0-9]' | sort )
if [ -z "$founddirs" ]; then
echo "Good news: No build dirs (builds on error) were found. Aborting."
echo
exit 0
fi
# ----------------------------------------------------------------------
# enter my directory
# ----------------------------------------------------------------------
cat <<ENDINFO
Found error builds: $( echo "$founddirs" | wc -l )
The latest error is the last entry per project.
Select a directory to jump in or press just RETURN to abort:
$( echo "$founddirs" | sed 's,^, ,g')
ENDINFO
echo -n "I want to jump to > "
read -r DIR_APPROOT
test -z "$DIR_APPROOT" && exit 1
ls "$DIR_APPROOT" >/dev/null || exit 2
# ----------------------------------------------------------------------
# prepare environment an GO!
# ----------------------------------------------------------------------
export DIR_APPROOT
export GIT_SSH="$CI_APPROOT/shellscripts/gitsshwrapper.sh"
export DIR_SSH_KEYS="$CI_WORKDIR/data/sshkeys"
export NVMINIT="$CI_APPROOT/shellscripts/nvm_init.sh";
export RVMSCRIPT="/usr/local/rvm/scripts/rvm";
cd "$DIR_APPROOT" || exit 1
cat <<EOF
* Switching now into build dir
$( pwd )
* The environment for the CI server is set
You can go to the ./hooks/ directory to execute the command of your onbuild actions.
EOF
echo
bash --rcfile <(cat ~/.bashrc 2>/dev/null; echo 'PS1="CI|$PS1"')
# ----------------------------------------------------------------------