xonotic/misc/tools/xonotic-map-compiler-autobuild
2010-09-29 15:35:53 +02:00

316 lines
7.5 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"
http_url=http://beta.xonotic.org/autobuild-bsp/
url_ssh=xonotic-beta:autobuild-bsp/
build_cachedir="$HOME/xonotic-map-compiler.cache/"
screenshot_cachedir="$HOME/xonotic-map-screenshot.cache/"
build_override="-bsp_timeout 900 -vis_timeout 3600 -light_timeout 14400 -minimap_timeout 900 -scale_timeout 900"
screenshot_override="9 300"
getthemap_fail=false
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"
}
ss2spam()
{
map=$1
url=$2
branch=$3
hash=$4
status=$5
branch=${branch##refs/heads/}
branch=${branch##refs/remotes/}
branch=${branch##origin/}
hash=`echo "$hash" | cut -c 1-7`
s_error=
if [ "$status" -ne 0 ]; then
s_error="exited with status $status"
fi
if [ -n "$s_error" ]; then
echo "[$branch $hash] 4screenshots of $map could not be made: $s_error"
else
echo "[$branch $hash] screenshots of $map are available on $url"
fi
}
log2spam()
{
map=$1
url=$2
branch=$3
hash=$4
status=$5
time=$6
hash=`echo "$hash" | cut -c 1-7`
branch=${branch##refs/heads/}
branch=${branch##refs/remotes/}
branch=${branch##origin/}
s_samplesize=
s_failshaders=
s_leaked=
s_error=
if [ "$status" -ne 0 ]; then
s_error="exited with status $status"
fi
while IFS= read -r L; do
case "$L" in
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 $hash] finished"
fi
echo -n " map compile of $map ($url): $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
M=$4
blobhash=$5
if HEAD "$url$M-$blobhash.pk3"; then
continue
fi
if [ -n "$IRCSPAM" ]; then
pre2spam "$M" "$url$M-$blobhash.pk3" "$REFNAME" "$HASH" | $IRCSPAM
fi
t0=`date +%s`
(
cd maps
../../../misc/tools/xonotic-map-compiler "$M" `grep ^- "$M.map.options" | cut -d '#' -f 1` $build_override > "$M.log"
)
t1=`date +%s`
dt=$(($t1 - $t0))
status=$?
if [ -n "$IRCSPAM" ]; then
cat "maps/$M.log" | log2spam "$M" "$url$M-$blobhash.pk3" "$REFNAME" "$HASH" "$status" "$dt" > "maps/$M.irc"
fi
zip -9r "$M-$blobhash.pk3" "maps/$M.bsp" "maps/$M.log" "maps/$M.irc" "maps/$M/" "maps/$M.lin" "gfx/${M}_mini.tga"
ln -snf "../$M-$blobhash.pk3" "$M.pk3" # from ALL branches, so beware!
cp "$M-$blobhash.pk3" "$M-full-$blobhash.pk3"
zip -9r "$M-full-$blobhash.pk3" `git diff --name-only --diff-filter=ACMRTUXB master...HEAD` || true
ln -snf "../$M-full-$blobhash.pk3" "$M-full.pk3" # from ALL branches, so beware!
rsync -vaSHP "$M-$blobhash.pk3" "$M-full-$blobhash.pk3" "$url_ssh"
rsync -vaSHP "$M.pk3" "$M-full.pk3" "$url_ssh""latest/"
if [ -n "$IRCSPAM" ]; then
$IRCSPAM < "maps/$M.irc"
fi
}
screenshotthemap()
{
REFNAME=$1
HASH=$2
url=$3
M=$4
blobhash=$5
if HEAD "$url$M-$blobhash/"; then
continue
fi
rm -rf ~/.xonotic
(
cd ../..
if [ -n "$DISPLAY" ]; then
misc/tools/xonotic-map-screenshot "$M" $screenshot_override +"scr_screenshot_name \"$M-\""
else
startx "$PWD/misc/tools/xonotic-map-screenshot" "$M" $screenshot_override +"scr_screenshot_name \"$M-\"" -- :8
fi
)
if ! mv ~/.xonotic/data/screenshots "$M-$blobhash"; then
if [ -n "$IRCSPAM" ]; then
ss2spam "$M" "$url$M-$blobhash/" "$REFNAME" "$HASH" 1 > "maps/$M.ircss"
fi
return 1
fi
if [ -n "$IRCSPAM" ]; then
ss2spam "$M" "$url$M-$blobhash/" "$REFNAME" "$HASH" 0 > "maps/$M.ircss"
fi
ln -snf "../$M-$blobhash" "$M" # from ALL branches, so beware!
rsync -vaSHP "$M-$blobhash" "$url_ssh"
rsync -vaSHP "$M" "$url_ssh""latest/"
if [ -n "$IRCSPAM" ]; then
$IRCSPAM < "maps/$M.ircss"
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
if ! curl -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"
getthemap_fail=true
return 0
fi
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"
getthemap_fail=true
return 0
fi
}
case "$1" in
build)
cd data/xonotic-maps.pk3dir
git for-each-ref 'refs/remotes' | while read -r HASH TYPE REFNAME; do
case "$REFNAME" in
*/archived/*)
continue
;;
esac
if [ -f "$build_cachedir/$HASH" ]; then
continue
fi
git reset --hard
git clean -xfd
git checkout -f "$HASH"
allmaps buildthemap "$REFNAME" "$HASH" "$http_url"
touch "$build_cachedir/$HASH"
done
git checkout -f master
;;
screenshot)
cd data/xonotic-maps.pk3dir
git for-each-ref 'refs/remotes' | while read -r HASH TYPE REFNAME; do
case "$REFNAME" in
*/archived/*)
continue
;;
esac
if [ -f "$screenshot_cachedir/$HASH" ]; then
continue
fi
git reset --hard
git clean -xfd
git checkout -f "$HASH"
cd ../..
mkdir -p "$bspdir" "$bspdir.old"
for b in "$bspdir"/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
if [ -e "$b" ]; then
mv "$b" "$bspdir.old"/
fi
done
cd data/xonotic-maps.pk3dir
allmaps getthemap "$http_url" "$bspdir.old" "$bspdir"
if ! $getthemap_fail; then
allmaps screenshotthemap "$REFNAME" "$HASH" "$http_url"
touch "$screenshot_cachedir/$HASH"
fi
done
git checkout -f master
;;
download)
mkdir -p "$bspdir" "$bspdir.old"
for b in "$bspdir"/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
if [ -e "$b" ]; then
mv "$b" "$bspdir.old"/
fi
done
cd data/xonotic-maps.pk3dir
allmaps getthemap "$http_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 "$http_url""latest"
;;
log2spam-test)
log2spam "mapname" "http://mapurl" "branch" "commit" "0"
;;
esac