clone

a self-hosted multitenant nostr relay with sites, file storage, git hosting, and inbox and outbox delivery

feat/standalone-relay
tinyrelay / scripts / bench-linux.sh
bench-linux.sh 2.0K executable
1#!/usr/bin/env bash2set -euo pipefail34remote_host="${LINUX_HOST:?set LINUX_HOST to the SSH name of the Linux Docker host}"5name="${LINUX_NAME:-tinyrelay-bench-${USER:-user}-$$}"6safe_name="$(printf '%s' "$name" | tr -cs 'A-Za-z0-9_.-' '-' | sed 's/^-*//;s/-*$//')"7remote_root="tinyrelay-tests/${safe_name}"8image="tinyrelay-bench-${safe_name}"9packages="${BENCH_PACKAGES:-./internal/storage ./internal/relay}"10benchtime="${BENCHTIME:-5s}"11stamp="$(date -u +%Y%m%dT%H%M%SZ)"12local_artifacts="${BENCH_ARTIFACTS:-artifacts/bench/${safe_name}/${stamp}}"13mkdir -p "$local_artifacts"14packages_b64="$(printf '%s' "$packages" | base64 | tr -d '\n')"1516COPYFILE_DISABLE=1 tar --no-xattrs \17 --exclude=.git --exclude=.DS_Store --exclude=.playwright-cli \18 --exclude=output --exclude=artifacts --exclude=node_modules \19 -cf - . | ssh "$remote_host" "mkdir -p '$remote_root' && tar -xf - -C '$remote_root'"2021set +e22ssh "$remote_host" "LINUX_PACKAGES_B64='$packages_b64' sh -s -- '$remote_root' '$image' '$stamp' '$benchtime'" <<'REMOTE'23set -eu24remote_root=$125image=$226stamp=$327benchtime=$428packages=$(printf '%s' "$LINUX_PACKAGES_B64" | base64 -d)29artifact_dir="$remote_root/artifacts/$stamp"30mkdir -p "$artifact_dir"31{32 date -u +%Y-%m-%dT%H:%M:%SZ33 printf 'host='; hostname34 printf 'kernel='; uname -a35 printf 'cpu='; nproc36 printf 'docker='; docker version --format '{{.Server.Version}}'37} > "$artifact_dir/metadata.txt"38set +e39docker build --target bench --build-arg BENCH_PACKAGES="$packages" --build-arg BENCHTIME="$benchtime" -t "$image" "$remote_root" > "$artifact_dir/bench.log" 2>&140status=$?41cat "$artifact_dir/bench.log"42printf '%s\n' "$status" > "$artifact_dir/status"43exit "$status"44REMOTE45status=$?46set -e4748scp -q "$remote_host:$remote_root/artifacts/$stamp/metadata.txt" "$local_artifacts/metadata.txt" || true49scp -q "$remote_host:$remote_root/artifacts/$stamp/status" "$local_artifacts/status" || true50scp -q "$remote_host:$remote_root/artifacts/$stamp/bench.log" "$local_artifacts/bench.log" || true51printf 'artifacts: %s\n' "$local_artifacts"52exit "$status"