xonotic/misc/tools/xonotic-map-compiler-autobuild
Rudolf Polzer 316e76ac82 in .options files, change syntax to allow settings on different lines. Syntax rules now are:
any line starting with - specifies options
any other line is a comment
anything from a # in a line to the end of the line is a comment

(Bad) Example:

-bsp -samplesize 16 # do not use default options
-light + -fast # this looks good too, default options are still used
-vis +
-minimap +
Version: 1
2010-06-24 15:53:02 +02:00

188 lines
4.4 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
bspdir="$PWD/data"
url=http://141.2.16.23/~xonotic/bsp-autobuilds/
bspoutdir="$HOME/public_html/bsp-autobuilds/"
allmaps()
{
for F in maps/*.map.options; do
if ! [ -f "$F" ]; then
continue
fi
if ! [ -f "${F%.options}" ]; then
continue
fi
M=${F#maps/}
M=${M%.map.options}
blobhash=`git ls-files -s -- "$F" | cut -d ' ' -f 2`-`git ls-files -s -- "${F%.options}" | cut -d ' ' -f 2`
"$@" "$M" "$blobhash"
done
}
pre2spam()
{
map=$1
url=$2
branch=$3
hash=$4
branch=${branch##refs/heads/}
branch=${branch##refs/remotes/}
branch=${branch##origin/}
hash=`echo "$hash" | cut -c 1-7`
echo "[$branch $hash] starting map compile of $map"
}
log2spam()
{
map=$1
url=$2
branch=$3
hash=$4
branch=${branch##refs/heads/}
branch=${branch##refs/remotes/}
branch=${branch##origin/}
s_time=
s_samplesize=
s_failshaders=
s_leaked=
s_error=
while IFS= read -r L; do
case "$L" in
*\ seconds\ elapsed)
s_time=$(($s_time + ${L%% seconds elapsed}))
;;
WARNING:\ surface\ at\ *\ too\ large\ for\ desired\ samplesize*)
s=${L##* }
if [ -z "$s_samplesize" ] || [ "$s" -gt "$s_samplesize" ]; then
s_samplesize=$s
fi
;;
WARNING:\ Couldn\'t\ find\ image\ for\ shader\ textures/NULL)
# radiant stupid
;;
WARNING:\ Couldn\'t\ find\ image\ for\ shader\ *)
s_failshaders="$s_failshaders ${L##* }"
;;
'******* leaked *******')
s_leaked=1
;;
'************ ERROR ************')
IFS= read -r s_error
;;
esac
done
s_failshaders=`echo "$s_failshaders" | sed "s, textures/, ,g"`
s_failshaders=${s_failshaders# }
if [ -n "$s_error" ]; then
echo -n "[$branch $hash] 4failed"
else
echo -n "[$branch] finished"
fi
echo -n " map compile of $map ($url): $s_time sec"
if [ -n "$s_samplesize" ]; then
echo -n ", FIX samplesize >= $s_samplesize"
fi
if [ -n "$s_failshaders" ]; then
if [ -n "`echo "$s_failshaders" | cut -d ' ' -f 4-`" ]; then
s_failshaders="`echo "$s_failshaders" | cut -d ' ' -f 1-3`..."
fi
echo -n ", FIX shaders $s_failshaders"
fi
if [ -n "$s_leaked" ]; then
echo -n ", FIX LEAK"
fi
if [ -n "$s_error" ]; then
s_error=`echo "$s_error" | sed "s,$PWD/\?,,g"`
echo -n ", ERROR: $s_error"
fi
echo
}
buildthemap()
{
REFNAME=$1
HASH=$2
url=$3
bspdir=$4
M=$5
blobhash=$6
if [ -f "$bspdir/$M-$blobhash.pk3" ]; then
continue
fi
if [ -n "$IRCSPAM" ]; then
pre2spam "$M" "$url$M-$blobhash.pk3" "$REFNAME" "$HASH" | $IRCSPAM
fi
(
cd maps
../../../misc/tools/xonotic-map-compiler "$M" `grep ^- "$M.map.options" | cut -d '#' -f 1` 2>&1 | tee "$M.log"
)
zip -9r "$bspdir/$M-$blobhash.pk3" "maps/$M.bsp" "maps/$M.log" "maps/$M/" "maps/$M.lin" "gfx/${M}_mini.tga"
ln -snf "../$M-$blobhash.pk3" "$bspdir/latest/$M.pk3" # from ALL branches, so beware!
if [ -n "$IRCSPAM" ]; then
cat "maps/$M.log" | log2spam "$M" "$url$M-$blobhash.pk3" "$REFNAME" "$HASH" | $IRCSPAM
fi
}
getthemap()
{
url=$1
bspdir_old=$2
bspdir=$3
M=$4
blobhash=$5
if mv "$bspdir_old/$M-$blobhash.pk3" "$bspdir/$M-$blobhash.pk3"; then
continue
fi
if ! wget -O "$bspdir/$M-$blobhash.pk3" "$url$M-$blobhash.pk3"; then
rm -f "$bspdir/$M-$blobhash.pk3"
echo "WARNING: could not download $url$M-$blobhash.pk3, maybe not ready yet"
return 1
fi
if ! unzip -l "$bspdir/$M-$blobhash.pk3"; then
rm -f "$bspdir/$M-$blobhash.pk3"
echo "WARNING: could not download $url$M-$blobhash.pk3, invalid zip file"
return 1
fi
}
case "$1" in
build)
mkdir -p "$bspoutdir"
mkdir -p "$bspoutdir/latest"
cd data/xonotic-maps.pk3dir
git for-each-ref 'refs/remotes' | while read -r HASH TYPE REFNAME; do
git reset --hard
git clean -xfd
git checkout "$HASH"
allmaps buildthemap "$REFNAME" "$HASH" "$url" "$bspoutdir"
done
git checkout master
;;
download)
mkdir -p "$bspdir" "$bspdir.old"
mv "$bspdir"/*-????????????????????????????????????????-????????????????????????????????????????.pk3 "$bspdir.old"/ || true
cd data/xonotic-maps.pk3dir
allmaps getthemap "$url" "$bspdir.old" "$bspdir"
echo "List of maps that got deleted (if any) and currently are in $bspdir.old:"
ls -l "$bspdir.old"
;;
download-latest)
mkdir -p "$bspdir"
cd "$bspdir"
rm -f *-????????????????????????????????????????-????????????????????????????????????????.pk3
wget -r -l1 -A "*.pk3" -N --no-parent --no-directories "$url""latest"
;;
log2spam-test)
log2spam "mapname" "http://mapurl" "branch" "commit"
;;
esac