1
0

Merge pull request #2 from GenZmeY/dev

v1.1.0
This commit is contained in:
GenZmeY 2022-01-24 06:24:20 +03:00 committed by GitHub
commit 3d96a1e6c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

132
builder
View File

@ -4,7 +4,6 @@
# https://git-scm.com/download/win # https://git-scm.com/download/win
set -Eeuo pipefail set -Eeuo pipefail
# set -o xtrace
trap cleanup SIGINT SIGTERM ERR EXIT trap cleanup SIGINT SIGTERM ERR EXIT
@ -174,35 +173,46 @@ function read_test_settings ()
fi fi
} }
function merge_packages () # $1: Mutator name function merge_package () # $1: What, $2: Where
{ {
local ModificationTime="" local ModificationTime=""
local UpkList="" local ModificationTimeNew=""
local PID="" local PID=""
ModificationTime=$(stat -c %y "$KFWin64/$2")
CMD //C "cd /D $(cygpath -w "$KFWin64") && $(basename "$KFEditorMergePackages") make $1 $2" &
PID="$!"
while ps -p "$PID" &> /dev/null
do
ModificationTimeNew="$(stat -c %y "$KFWin64/$2")"
if [[ "$ModificationTime" != "$ModificationTimeNew" ]]; then # wait for write
while ps -p "$PID" &> /dev/null
do
ModificationTime="$ModificationTimeNew"
sleep 1
ModificationTimeNew="$(stat -c %y "$KFWin64/$2")"
if [[ "$ModificationTime" == "$ModificationTimeNew" ]]; then # wait for write finish
kill "$PID"
rm -f "$KFWin64/$1" # cleanup (auto)
return 0
fi
done
fi
sleep 1
done
rm -f "$KFWin64/$1" # cleanup (manual)
}
function merge_packages () # $1: Mutator name
{
cp -f "$KFUnpublishScript/$1.u" "$KFWin64" cp -f "$KFUnpublishScript/$1.u" "$KFWin64"
while read -r Upk while read -r Upk
do do
cp -f "$MutSource/$1/$Upk" "$KFWin64" cp -f "$MutSource/$1/$Upk" "$KFWin64"
UpkList="$UpkList $Upk" merge_package "$Upk" "$1.u"
done < <(find "$MutSource/$1" -type f -name '*.upk' -printf "%f\n") done < <(find "$MutSource/$1" -type f -name '*.upk' -printf "%f\n")
if [[ -n "$UpkList" ]]; then
ModificationTime=$(stat -c %y "$KFWin64/$1.u")
CMD //C "cd /D $(cygpath -w "$KFWin64") && $(basename "$KFEditorMergePackages") make $UpkList $1.u" &
PID="$!"
while ps -p "$PID" &> /dev/null
do
if [[ "$ModificationTime" != "$(stat -c %y "$KFWin64/$1.u")" ]]; then # file changed
sleep 2 # wait a bit in case the file hasn't been written to the end yet
kill "$PID"; break
fi
sleep 2
done
fi
for Upk in $UpkList; do rm -f "$KFWin64/$Upk"; done # cleanup
} }
function compiled () function compiled ()
@ -261,7 +271,7 @@ function compile ()
while ps -p "$PID" &> /dev/null while ps -p "$PID" &> /dev/null
do do
if compiled; then kill "$PID"; break; fi if compiled; then kill "$PID"; break; fi
sleep 2 sleep 1
done done
restore_kfeditorconf restore_kfeditorconf
@ -290,6 +300,19 @@ function brewed ()
done done
} }
function brew_cleanup ()
{
for Package in $PackageBuildOrder
do
if ! echo "$PackageUpload" | grep -Pq "(^|\s+)$Package(\s+|$)"; then
find "$KFPublishBrewedPC" -type f -name "$Package.u" -delete
find "$MutSource/$Package" -type f -name '*.upk' -printf "%f\n" | xargs -I{} find "$KFPublishBrewedPC" -type f -name {} -delete
fi
done
rm -f "$KFPublishBrewedPC"/*.tmp
}
function brew () function brew ()
{ {
local PID="" local PID=""
@ -310,12 +333,13 @@ function brew ()
while ps -p "$PID" &> /dev/null while ps -p "$PID" &> /dev/null
do do
if brewed; then kill "$PID"; break; fi if brewed; then kill "$PID"; break; fi
sleep 2 sleep 1
done done
publish_common publish_common
brew_cleanup
rm -f "$KFPublishBrewedPC"/*.tmp # cleanup find "$KFPublishBrewedPC" -type d -empty -delete
} }
function brew_manual () function brew_manual ()
@ -329,21 +353,39 @@ function brew_manual ()
rm -rf "$KFPublish" rm -rf "$KFPublish"
mkdir -p "$KFPublishBrewedPC" "$KFPublishScript" mkdir -p "$KFPublishBrewedPC"
if ! [[ -x "$KFEditorPatcher" ]]; then if ! [[ -x "$KFEditorPatcher" ]]; then
get_latest_kfeditor_patcher "$KFEditorPatcher" get_latest_kfeditor_patcher "$KFEditorPatcher"
fi fi
pushd "$KFWin64" && "$KFEditorPatcher"; popd CMD //C "cd /D $(cygpath -w "$KFWin64") && $(basename "$KFEditorPatcher")"
for Package in $PackageUpload for Package in $PackageUpload
do do
merge_packages "$Package" merge_packages "$Package"
mv "$KFWin64/$Package.u" "$KFPublishScript" mv "$KFWin64/$Package.u" "$KFPublishBrewedPC"
done done
publish_common publish_common
find "$KFPublishBrewedPC" -type d -empty -delete
}
# Uploading without brewing
function publish_unpublished ()
{
mkdir -p "$KFPublishBrewedPC" "$KFPublishScript" "$KFPublishPackages"
for Package in $PackageUpload
do
cp -f "$KFUnpublishScript/$Package.u" "$KFPublishScript"
find "$MutSource/$Package" -type f -name '*.upk' -exec cp -f {} "$KFPublishPackages" \;
done
publish_common
find "$KFPublishBrewedPC" -type d -empty -delete
} }
function upload () function upload ()
@ -358,20 +400,10 @@ function upload ()
fi fi
if ! [[ -d "$KFPublish" ]]; then if ! [[ -d "$KFPublish" ]]; then
echo "Warn: uploading without brewing" publish_unpublished
mkdir -p "$KFPublishBrewedPC" "$KFPublishScript"
for Package in $PackageUpload
do
cp -f "$KFUnpublishScript/$Package.u" "$KFPublishScript"
done
if [[ -d "$KFUnpublishPackages" ]]; then
cp -rf "$KFUnpublishPackages" "$KFPublishPackages"
fi fi
publish_common find "$KFPublishBrewedPC" -type d -empty -delete
fi
PreparedWsDir=$(mktemp -d -u -p "$KFDoc") PreparedWsDir=$(mktemp -d -u -p "$KFDoc")
@ -473,6 +505,11 @@ function run_test ()
CMD //C "$(cygpath -w "$KFGame") $Map?Difficulty=$Difficulty?GameLength=$GameLength?Game=$Game?Mutator=$Mutators?$Args $UseUnpublished" -log CMD //C "$(cygpath -w "$KFGame") $Map?Difficulty=$Difficulty?GameLength=$GameLength?Game=$Game?Mutator=$Mutators?$Args $UseUnpublished" -log
} }
function debug ()
{
set -o xtrace
}
export PATH="$PATH:$ThirdPartyBin" export PATH="$PATH:$ThirdPartyBin"
if [[ $# -eq 0 ]]; then show_help; exit 0; fi if [[ $# -eq 0 ]]; then show_help; exit 0; fi
@ -497,6 +534,25 @@ case $1 in
-ct ) compile; run_test ;; -ct ) compile; run_test ;;
-cbt ) compile; brew; run_test ;; -cbt ) compile; brew; run_test ;;
-cbmt ) compile; brew_manual; run_test ;; -cbmt ) compile; brew_manual; run_test ;;
# Debug
-dh ) debug; show_help ;;
-dv ) debug; show_version ;;
-dib ) debug; init_build ;;
-dit ) debug; init_test ;;
-di ) debug; init_build; init_test ;;
-dc ) debug; compile ;;
-db ) debug; brew ;;
-dbm ) debug; brew_manual ;;
-du ) debug; upload ;;
-dt ) debug; run_test ;;
-dcb ) debug; compile; brew ;;
-dcu ) debug; compile; upload ;;
-dcbm ) debug; compile; brew_manual ;;
-dcbu ) debug; compile; brew; upload ;;
-dcbmu ) debug; compile; brew_manual; upload ;;
-dct ) debug; compile; run_test ;;
-dcbt ) debug; compile; brew; run_test ;;
-dcbmt ) debug; compile; brew_manual; run_test ;;
# Other # Other
* ) echo "Command not recognized: $1"; exit 1 ;; * ) echo "Command not recognized: $1"; exit 1 ;;
esac esac