lists/index-decl.sh
Marco Cawthorne 4a29873423
Some checks failed
Construct / build (push) Has been cancelled
fix missing qhashes.
2025-02-12 02:14:11 -08:00

132 lines
3.3 KiB
Bash
Executable file

#!/bin/sh
# This script takes the path of a .decl file
# and puts information from local mirrors
# of the file into ./index/$PKGNAME/* files
# The files are separated so they can be
# individually checked/regenerated when
# missing as neccessary
# We need to generate the sums and signatures
# somewhere before we let the remote
# CI/build process assemble the package lists
# as the remote has no access to local mirrors
# of the files.
DECL="$1"
DECL_IMG=$(basename "$1" | cut -d '.' -f 1)
DECLDIR=$(dirname "$DECL")
TYPE=$(dirname "$DECLDIR")
TYPE=$(basename "$TYPE")
GAMEDIR=$(basename "$DECLDIR")
# grep the values
NAME=$(grep packageInfo "$DECL" | awk '{ print $2 }')
URL_FALLBACK=$(grep \"url\" "$DECL" | awk -F"\"" '{ print $4 }')
URL=$(grep \"url_archive\" "$DECL" | awk -F"\"" '{ print $4 }')
LOCAL_URL=$(grep \"local_url\" "$DECL" | awk -F"\"" '{ print $4 }')
PKGLIST=$(grep \"gamename\" "$DECL" | awk -F"\"" '{ print $4 }')
PACKPREFIX=$(grep \"packprefix\" "$DECL" | awk -F"\"" '{ print $4 }')
STARTMAP=$(grep \"startmap\" "$DECL" | awk -F"\"" '{ print $4 }')
if [ -z "$URL" ]
then
# If it's public, it has to at least be this.
URL="$URL_FALLBACK"
fi
if [ -z "$LOCAL_URL" ]
then
LOCAL_URL="$(pwd)/_files/$(basename "$URL")"
fi
if [ ! -f "$LOCAL_URL" ]
then
printf "Error: Package %s not on local server.\n" "$NAME" >&2
exit 2
fi
if [ $TYPE = Addons ]
then
PREFIX="addon"
fi
if [ $TYPE = Maps ]
then
PREFIX="map"
fi
GPREFIX=$GAMEDIR
if [ $TYPE = Mods ]
then
PREFIX="mod"
GAMEDIR=$(grep \"gamedir\" "$DECL" | awk -F"\"" '{ print $4 }')
fi
if [ $TYPE = Campaigns ]
then
PREFIX="campaign"
fi
if [ $TYPE = Patches ]
then
PREFIX="patch"
fi
PKGNAME=$(echo "$GPREFIX"-"$PREFIX"-"$NAME" | awk '{print tolower($0)}')
mkdir -p "index/$PKGNAME"
if [ ! -f "./index/$PKGNAME/size" ]
then
FILESIZE=$(du -b "$LOCAL_URL" | awk '{ print $1 }')
echo "$FILESIZE" > ./index/$PKGNAME/size
echo "Recalculated FILESIZE: $FILESIZE"
fi
if [ ! -f "./index/$PKGNAME/sha512" ]
then
SHA512=$(sha512sum "$LOCAL_URL" | awk '{ print $1 }')
echo "$SHA512" > ./index/$PKGNAME/sha512
echo "Recalculated SHA512: $SHA512"
fi
if [ -n "$PACKPREFIX" ]
then
if [ ! -f "./index/$PKGNAME/qhash" ]
then
QHASH=$(./fteqw64 -qhash -prefix "$PACKPREFIX" "$LOCAL_URL")
echo "$QHASH" > ./index/$PKGNAME/qhash
echo "Recalculated QHASH: $QHASH"
fi
if [ ! -f "./index/$PKGNAME/signature" ]
then
SIGNATURE=$(./fteqw64 -privkey ./private-key.pem -pubkey ./public-key.pem -prefix "$PACKPREFIX" -certhost $AUTH_HOST -sign2 "$LOCAL_URL")
echo "$SIGNATURE" > ./index/$PKGNAME/signature
echo "Recalculated SIGNATURE: $SIGNATURE"
fi
else
if [ ! -f "./index/$PKGNAME/qhash" ]
then
QHASH=$(./fteqw64 -qhash "$LOCAL_URL")
echo "$QHASH" > ./index/$PKGNAME/qhash
echo "Recalculated QHASH: $QHASH"
fi
if [ ! -f "./index/$PKGNAME/signature" ]
then
SIGNATURE=$(./fteqw64 -privkey ./private-key.pem -pubkey ./public-key.pem -certhost $AUTH_HOST -sign2 "$LOCAL_URL")
echo "$SIGNATURE" > ./index/$PKGNAME/signature
echo "Recalculated SIGNATURE: $SIGNATURE"
fi
fi
if [ ! -f "./index/$PKGNAME/maplist" ]
then
MAPLIST=$(unzip -l "$LOCAL_URL" | grep \\.bsp | awk '{ print $4 }' | sed 's/maps\//\"map=/g' | sed 's/\.bsp/\"/g' | tr '\n' ' ')
echo "$MAPLIST" > ./index/$PKGNAME/maplist
echo "Recalculated MAPLIST: $MAPLIST"
fi