123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- #!/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/
|