281 lines
13 KiB
Bash
281 lines
13 KiB
Bash
#!/bin/bash
|
|
|
|
# Before creating compressed package complete this checklist (main points):
|
|
# * Patch the source code/package with any relevant materials.
|
|
# * Set the makefile to strip symbols.
|
|
# * Compile new 32/64-bit binaries and put them in their appropriate ./bin_unix location.
|
|
# * Delete all unnecessary files/folders.
|
|
|
|
# ** CHANGE THE BELOW VARIABLES BEFORE EXECUTING THE SCRIPT ** #
|
|
|
|
#PATHTOACDEV=$(dirname $(cd ../ && pwd))
|
|
# Please ensure this path is NOT inside your "ACDIR" folder, as
|
|
# this will be the place the tarball package gets saved.
|
|
SAVETARBALLPATH=~/AssaultCube
|
|
# This will be the directory that gets packaged:
|
|
ACDIR=$SAVETARBALLPATH/AC
|
|
ACDIRTESTING=$SAVETARBALLPATH/AC_testing
|
|
ACDOCSDIR=$ACDIR/docs
|
|
NEWACTAG=$(git describe --tags --abbrev=0)
|
|
NEWACVERSION=$(echo $NEWACTAG |awk '{ print substr($0,2)}')
|
|
|
|
# KSH won't work, as this script uses echo throughout it, echo's options are shell-specific:
|
|
if [ -z "$BASH" ]; then
|
|
echo "FAILURE: Please run this script with BASH (bash $0), not SH/KSH/ZSH, etc."
|
|
exit
|
|
fi
|
|
|
|
# Set auto-aliases:
|
|
ACDIRFOLDERNAME=`basename $ACDIR`
|
|
|
|
# Create folder for new AC release:
|
|
if [ ! -d "$ACDIR" ]; then
|
|
mkdir -p "$ACDIR"
|
|
else
|
|
rm -r "$ACDIR"
|
|
mkdir -p "$ACDIR"
|
|
fi
|
|
|
|
# Create folder for compiling binaries for new AC release:
|
|
if [ ! -d "$ACDIRTESTING" ]; then
|
|
mkdir "$ACDIRTESTING"
|
|
else
|
|
rm -r "$ACDIRTESTING"
|
|
mkdir "$ACDIRTESTING"
|
|
fi
|
|
|
|
# Get AC files from latest local release tag:
|
|
cd ../../
|
|
git archive --format=tar.gz --output "$ACDIR/$NEWACTAG.tar.gz" $NEWACTAG
|
|
cd "$ACDIR"
|
|
tar -zxf "$ACDIR/$NEWACTAG.tar.gz"
|
|
tar -zxf "$ACDIR/$NEWACTAG.tar.gz" -C "$ACDIRTESTING"
|
|
rm -r "$ACDIR/$NEWACTAG.tar.gz"
|
|
|
|
# Use new, "portable" profile in "$ACDIRTESTING":
|
|
sed -i 's/--home=.*\s/--home=profile /' $ACDIRTESTING/assaultcube.sh
|
|
|
|
# Get documentation files from latest remote release tag:
|
|
svn export --force https://github.com/assaultcube/assaultcube.github.io/tags/$NEWACTAG/htdocs/docs/ $ACDOCSDIR
|
|
|
|
# Start of the script, so remind the user of things we can't check:
|
|
echo -e "\033[1mIf required, did you patch the source with any relevant materials?\033[0m"
|
|
echo " * Press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
echo -e "\033[1mDid you compile 32- and 64-bit binaries in $ACDIRTESTING and strip symbols when compiling?\033[0m"
|
|
echo " * If so, press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
echo -e "\033[1mDid you renamed filenames of created binaries to linux_* and linux_64_*?\033[0m"
|
|
echo " * If so, press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
echo -e "\033[1mDid you generate fresh config/mapmodelattributes.cfg (/loadallmapmodels)?\033[0m"
|
|
echo " * If so, press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
echo -e "\033[1mIs the save-path in assaultcube.sh correct?\033[0m"
|
|
echo " * If so, press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
echo -e "\033[1mHave you checked all following variables in this script are set correctly?\033[0m"
|
|
echo -e " * The packages created by this script will be saved to this folder:\n $SAVETARBALLPATH"
|
|
echo -e " * The absolute-path to your AssaultCube directory is set as:\n $ACDIR"
|
|
echo -e " * The absolute-path to your AssaultCube \"docs\" directory is set as:\n $ACDOCSDIR"
|
|
echo -e " * Your new AssaultCube version will become:\n $NEWACVERSION\n"
|
|
echo -e "\033[1mIf these are correct, press ENTER to continue, otherwise press ctrl+c to exit.\033[0m"
|
|
read DUMMY
|
|
|
|
# Still at the start of the script, so find user-errors that we can check:
|
|
# Checking "$ACDIR" is set correctly:
|
|
if [ -e $ACDIR/source/src/main.cpp ]; then
|
|
echo "Stated path to AssaultCube contains \"source/src/main.cpp\""
|
|
echo "Hopefully this means the path is correct and contained files are good."
|
|
echo -e "Proceeding to the next step...\n"
|
|
else
|
|
echo -e "\033[1;31mERROR:\033[0m \"source/src/main.cpp\" did NOT exist at the ACDIR alias."
|
|
echo "Open this shell file and modify that alias to fix it."
|
|
exit
|
|
fi
|
|
|
|
# Checking "$ACDOCSDIR" is set correctly:
|
|
if [ -e $ACDOCSDIR/reference.xml ]; then
|
|
echo "Stated path to AssaultCube's documentation contains \"reference.xml\""
|
|
echo "Hopefully this means the path is correct and contained files are good."
|
|
echo -e "Proceeding to the next step...\n"
|
|
else
|
|
echo -e "\033[1;31mERROR:\033[0m \"reference.xml\" does NOT exist in %ACDOCSDIR."
|
|
echo "Copy documentation to that folder to fix it."
|
|
exit
|
|
fi
|
|
|
|
# Check that linux binaries have been created today:
|
|
cp -v -i $ACDIRTESTING/bin_unix/linux* $ACDIR/bin_unix
|
|
checkbinaries() {
|
|
BINARYFILES=`cd $ACDIR/bin_unix && find ./linux_* -mtime 0 | sort | xargs`
|
|
}
|
|
checkbinaries
|
|
until [ "$BINARYFILES" = "./linux_64_client ./linux_64_server ./linux_client ./linux_server" ]; do
|
|
echo -e "\033[1;31mERROR:\033[0m Timestamps on binary files are older than 24 hours or they're missing."
|
|
echo "Please add new 32/64-bit binaries."
|
|
read DUMMY
|
|
checkbinaries
|
|
done
|
|
echo "All binaries have been compiled in the last 24 hours. Hopefully this means they're up to date!"
|
|
echo -e "Proceeding to the next step...\n"
|
|
|
|
# Check that config/mapmodelattributes.cfg has been created today:
|
|
cp -v -i $ACDIRTESTING/profile/config/mapmodelattributes.cfg $ACDIR/config
|
|
checkmapmodelsattr() {
|
|
MAPMODELATTRFILE=`cd $ACDIR/config && find ./mapmodelattributes.cfg -mtime 0 | xargs`
|
|
}
|
|
checkmapmodelsattr
|
|
until [ "$MAPMODELATTRFILE" = "./mapmodelattributes.cfg" ]; do
|
|
echo -e "\033[1;31mERROR:\033[0m Timestamp on config/mapmodelattributes.cfg is older than 24 hours or it's missing."
|
|
echo "Please add fresh config/mapmodelattributes.cfg file."
|
|
read DUMMY
|
|
checkmapmodelsattr
|
|
done
|
|
echo "config/mapmodelattributes.cfg has been generated in the last 24 hours. Hopefully this means it's up to date!"
|
|
echo -e "Proceeding to the next step...\n"
|
|
|
|
# Check that shadows.dat files exist. To grab a list of shadows.dat files:
|
|
# cd ./packages/models && find . -name "shadows.dat" | sort
|
|
echo -e "\033[1mDid you copy shadow files (*.dat) from another working AC installation into $ACDIR?\033[0m"
|
|
echo -e " * If not, they will be automatically copied from $ACDIRTESTING"
|
|
echo " * Press ENTER to continue, otherwise press ctrl+c to exit."
|
|
read DUMMY
|
|
cd $ACDIR/packages/models/
|
|
ACDIRMODELS_SHADOWS=$ACDIRTESTING/profile/packages/models
|
|
if [ ! -e ./misc/gib01/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/misc/gib01/shadows.dat $(pwd)/misc/gib01/shadows.dat; fi
|
|
if [ ! -e ./misc/gib02/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/misc/gib02/shadows.dat $(pwd)/misc/gib02/shadows.dat; fi
|
|
if [ ! -e ./misc/gib03/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/misc/gib03/shadows.dat $(pwd)/misc/gib03/shadows.dat; fi
|
|
if [ ! -e ./pickups/akimbo/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/akimbo/shadows.dat $(pwd)/pickups/akimbo/shadows.dat; fi
|
|
if [ ! -e ./pickups/ammobox/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/ammobox/shadows.dat $(pwd)/pickups/ammobox/shadows.dat; fi
|
|
if [ ! -e ./pickups/health/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/health/shadows.dat $(pwd)/pickups/health/shadows.dat; fi
|
|
if [ ! -e ./pickups/helmet/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/helmet/shadows.dat $(pwd)/pickups/helmet/shadows.dat; fi
|
|
if [ ! -e ./pickups/kevlar/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/kevlar/shadows.dat $(pwd)/pickups/kevlar/shadows.dat; fi
|
|
if [ ! -e ./pickups/nade/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/nade/shadows.dat $(pwd)/pickups/nade/shadows.dat; fi
|
|
if [ ! -e ./pickups/pistolclips/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/pickups/pistolclips/shadows.dat $(pwd)/pickups/pistolclips/shadows.dat; fi
|
|
if [ ! -e ./playermodels/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/playermodels/shadows.dat $(pwd)/playermodels/shadows.dat; fi
|
|
if [ ! -e ./weapons/assault/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/assault/world/shadows.dat $(pwd)/weapons/assault/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/carbine/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/carbine/world/shadows.dat $(pwd)/weapons/carbine/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/grenade/static/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/grenade/static/shadows.dat $(pwd)/weapons/grenade/static/shadows.dat; fi
|
|
if [ ! -e ./weapons/grenade/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/grenade/world/shadows.dat $(pwd)/weapons/grenade/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/knife/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/knife/world/shadows.dat $(pwd)/weapons/knife/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/pistol/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/pistol/world/shadows.dat $(pwd)/weapons/pistol/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/shotgun/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/shotgun/world/shadows.dat $(pwd)/weapons/shotgun/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/sniper/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/sniper/world/shadows.dat $(pwd)/weapons/sniper/world/shadows.dat; fi
|
|
if [ ! -e ./weapons/subgun/world/shadows.dat ]; then cp -v $ACDIRMODELS_SHADOWS/weapons/subgun/world/shadows.dat $(pwd)/weapons/subgun/world/shadows.dat; fi
|
|
|
|
until [ -f ./misc/gib01/shadows.dat ] \
|
|
&& [ -f ./misc/gib02/shadows.dat ] \
|
|
&& [ -f ./misc/gib03/shadows.dat ] \
|
|
&& [ -f ./pickups/akimbo/shadows.dat ] \
|
|
&& [ -f ./pickups/ammobox/shadows.dat ] \
|
|
&& [ -f ./pickups/health/shadows.dat ] \
|
|
&& [ -f ./pickups/helmet/shadows.dat ] \
|
|
&& [ -f ./pickups/kevlar/shadows.dat ] \
|
|
&& [ -f ./pickups/nade/shadows.dat ] \
|
|
&& [ -f ./pickups/pistolclips/shadows.dat ] \
|
|
&& [ -f ./playermodels/shadows.dat ] \
|
|
&& [ -f ./weapons/assault/world/shadows.dat ] \
|
|
&& [ -f ./weapons/carbine/world/shadows.dat ] \
|
|
&& [ -f ./weapons/grenade/static/shadows.dat ] \
|
|
&& [ -f ./weapons/grenade/world/shadows.dat ] \
|
|
&& [ -f ./weapons/knife/world/shadows.dat ] \
|
|
&& [ -f ./weapons/pistol/world/shadows.dat ] \
|
|
&& [ -f ./weapons/shotgun/world/shadows.dat ] \
|
|
&& [ -f ./weapons/sniper/world/shadows.dat ] \
|
|
&& [ -f ./weapons/subgun/world/shadows.dat ]; do
|
|
echo -e "\033[1;31mERROR:\033[0m Some shadows.dat files are missing."
|
|
echo "Please run AssaultCube to generate these files."
|
|
read DUMMY
|
|
done
|
|
echo "All known shadows.dat files exist."
|
|
echo -e "Proceeding to the next step...\n"
|
|
|
|
# Check that map previews are all available:
|
|
MAPSPATH="$ACDIR/packages/maps/official"
|
|
MAPSCGZ=`cd $MAPSPATH && find ./*.cgz | xargs -i basename {} .cgz | sort -u | xargs`
|
|
MAPSJPG=`cd $MAPSPATH/preview && find ./*.jpg | xargs -i basename {} .jpg | sort -u | xargs`
|
|
if [ "$MAPSCGZ" = "$MAPSJPG" ]; then
|
|
echo "All map \"previews\" are available!"
|
|
echo -e "Proceeding to the next step...\n"
|
|
else
|
|
echo -e "\033[1;31mERROR:\033[0m Some map previews are missing."
|
|
echo "Please go to $MAPSPATH/preview and create the ones that are missing!"
|
|
exit
|
|
fi
|
|
|
|
# Check that bot waypoints are all available:
|
|
MAPSCGZ2=`cd $MAPSPATH && find ./*.cgz | xargs -i basename {} .cgz | sort -u | xargs`
|
|
MAPSBOTS=`cd $ACDIR/bot/waypoints && find ./*.wpt | xargs -i basename {} .wpt | sort -u | xargs`
|
|
if [ "$MAPSBOTS" = "$MAPSCGZ2" ]; then
|
|
echo "All bot waypoints are available!"
|
|
echo -e "Proceeding to the next step...\n"
|
|
else
|
|
echo -e "\033[1;31mERROR:\033[0m Some bot waypoints are missing."
|
|
echo "Please go generate the ones that are missing!"
|
|
exit
|
|
fi
|
|
|
|
# Delete stuff related to git and GitHub:
|
|
rm -rf ./.git
|
|
rm -f ./.gitattributes
|
|
rm -f ./.travis.yml
|
|
find . -type f -name ".gitignore" -delete
|
|
# Delete gedit backups:
|
|
find . -type f -name "*~" -delete
|
|
|
|
# Create config template for release:
|
|
cd $ACDIR/config
|
|
zip configtemplates.zip autoexec.cfg favourites.cfg pcksources.cfg
|
|
|
|
# Clean out crufty files:
|
|
echo "Please wait: Cleaning out some crufty files..."
|
|
cd $ACDIR/source/enet && make distclean
|
|
cd ../src && make clean
|
|
rm -f init*.cfg saved*.cfg servervita*.cfg servers.cfg history
|
|
rm -f ./clientlog*.txt
|
|
rm -f ./bin_unix/native_*
|
|
rm -f ./bin_unix/ac_*
|
|
rm -f ./packages/maps/dev_*.cgz
|
|
rm -f ./packages/maps/dev_*.cfg
|
|
rm -f ./packages/maps/servermaps/incoming/*.cgz
|
|
rm -f ./packages/maps/servermaps/incoming/*.cfg
|
|
rm -f ./screenshots/*
|
|
# Leave tutorial code here, just in case of future use:
|
|
cd $ACDIR && rm -f `(find ./demos/* -type f | grep -v "tutorial_demo.dmo")`
|
|
|
|
# Set up ./config/securemaps.cfg - just in-case:
|
|
echo "... Generating ./config/securemaps.cfg"
|
|
echo "resetsecuremaps" > ./config/securemaps.cfg
|
|
find ./packages/maps/official/*.cgz | \
|
|
xargs -i basename {} .cgz | \
|
|
xargs -i echo -e "securemap" {} | \
|
|
sort -u >> ./config/securemaps.cfg
|
|
|
|
# update checksum file:
|
|
sh $ACDIR/source/dev_tools/generate_md5_checksums.sh
|
|
|
|
# Create the linux tarball:
|
|
echo "\n... Creating the Linux tarball..."
|
|
cd $SAVETARBALLPATH
|
|
if [ -d "AssaultCube_v$NEWACVERSION" ]; then
|
|
rm -r "AssaultCube_v$NEWACVERSION"
|
|
fi
|
|
mv $ACDIRFOLDERNAME AssaultCube_v$NEWACVERSION
|
|
tar cjvf $SAVETARBALLPATH/AssaultCube_v$NEWACVERSION.tar.bz2 \
|
|
--exclude=".*" \
|
|
--exclude=*.bat \
|
|
--exclude=*bin_win32* \
|
|
--exclude=*doxygen* \
|
|
--exclude="*source/lib*" \
|
|
--exclude=*vcpp* \
|
|
--exclude=*xcode* \
|
|
--exclude=*AssaultCube.cbp \
|
|
--exclude=*autoexec.cfg \
|
|
--exclude=*favourites.cfg \
|
|
--exclude=*pcksources.cfg \
|
|
--exclude=*new_content.cfg \
|
|
--exclude=*new_content.cgz \
|
|
--exclude-vcs \
|
|
AssaultCube_v$NEWACVERSION/
|