feat: make tournament script use git tags instead of branches

this makes more sense and is more convenient (branches can only be
checked out in one worktree)
This commit is contained in:
dogeystamp 2024-12-24 12:21:28 -05:00
parent 5a9e17804c
commit 2569e36a5a
No known key found for this signature in database

View File

@ -1,21 +1,30 @@
#!/bin/sh
# Runs a fast-chess (https://github.com/Disservin/fastchess) tournament based
# on two branches of the chess_inator
# (https://github.com/dogeystamp/chess_inator) engine.
# on two tags of the chess_inator (https://github.com/dogeystamp/chess_inator)
# engine.
#
# Example usage:
#
# cd chess_tournaments
# fast-chess-branch.sh quiescence no-quiescence -openings file=8moves_v3.pgn format=pgn order=random -each tc=300+0.1 -rounds 12 -repeat -concurrency 8 -recover -sprt elo0=0 elo1=10 alpha=0.05 beta=0.05
# fast-chess-tag.sh quiescence no-quiescence -openings file=8moves_v3.pgn format=pgn order=random -each tc=300+0.1 -rounds 12 -repeat -concurrency 8 -recover -sprt elo0=0 elo1=10 alpha=0.05 beta=0.05
#
# Do not use `main` as a branch, or any other branch already checked out in
# another directory. You need to be in a chess_inator Git repository to run
# this script. Ensure that the repository you're in is a throw-away worktree.
# Create one using
# You need to be in a chess_inator Git repository to run this script. Ensure
# that the repository you're in is a throw-away worktree. Create one using:
#
# git worktree add ../chess_tournaments
#
# inside the original chess_inator repo.
#
# To create a git tag at the current commit, run
#
# git tag [tag_name]
#
# or to optionally annotate the tag,
#
# git tag -a [tag_name]
#
# which will prompt for a message.
#
# Also, get an opening book from Stockfish's books:
#
# curl -O https://github.com/official-stockfish/books/raw/refs/heads/master/8moves_v3.pgn.zip
@ -28,43 +37,45 @@
# errors. The tournament automatically ends when a statistically significant
# result is obtained.
#
# LOS stands for "likelihood of superiority", LLR "log likelihood ratio".
#
# By default, a PGN file will be exported with the games played, and the
# fast-chess SPRT output will be appended. This comment may interfere with
# importing the PGN. But Lichess will ignore it, so it's probably fine.
set -e
BRANCH1="$1"
BRANCH2="$2"
TAG1="$1"
TAG2="$2"
# if this line fails it's because you don't have enough arguments
shift 2
COMM1=$(git rev-parse --short "$BRANCH1")
COMM2=$(git rev-parse --short "$BRANCH2")
COMM1=$(git rev-parse --short "$TAG1")
COMM2=$(git rev-parse --short "$TAG2")
mkdir -p games
PGN=games/"$BRANCH1"__"$BRANCH2".pgn
PGN=games/"$TAG1"__"$TAG2".pgn
rm -f engine1 engine2
if [ -f "$PGN" ]; then
rm -i "$PGN"
fi
git switch "$BRANCH1"
git checkout "$TAG1"
cargo build --release
cp target/release/chess_inator engine1
git switch "$BRANCH2"
git checkout "$TAG2"
cargo build --release
cp target/release/chess_inator engine2
OUTPUT=$(mktemp)
fastchess \
-engine cmd=engine1 name="c_i $BRANCH1 ($COMM1)" \
-engine cmd=engine2 name="c_i $BRANCH2 ($COMM2)" \
-engine cmd=engine1 name="c_i $TAG1 ($COMM1)" \
-engine cmd=engine2 name="c_i $TAG2 ($COMM2)" \
-pgnout file="$PGN" \
timeleft=true \
$@ \