Files
SocialPub/tools/pasture/sweep.sh
T
thepraandClaude Opus 5.5 70d1ffe9a2
Build / Build (push) Successful in 1m3s
R5 the server's own settings: instance, rules, announcements, relays, media limits, the staff's log
A singleton ServerSettings (title, descriptions, contact, thumbnail, privacy policy, terms, rules, relays, media
overrides, PublishActivity), cached by InstanceSettings and read by the instance API, NodeInfo, the instance actor, the
web pages and the mailer; its defaults are the old literals, so nothing changes until an administrator edits.
/clientapi/admin/settings (and /thumbnail), /announcements, /relays for administrators; /clientapi/moderator/log, the
staff's log (AdminAction, written by domain blocks, backups, settings and the CLI; no IP, never a root paired with its
personas). The Mastodon API's rules, extended description, privacy policy, terms of service, domain blocks (Published,
Obfuscate), announcements (dismiss, reactions, streaming) and activity (only when published). Reports carry rule ids.
Media overrides clamped to hard caps. Relays named by the settings reconcile next to the configured ones.

Verified: interop.sh instance accounts relay with mastodon, relay, aoderelay and mailpit, 119 passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpVCoDeM1qUTRp4fXQdfof
2026-10-17 04:02:47 +02:00

74 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
# Every peer's scenario, a batch of peers at a time: a change to what PrivaPub sends (the @context, an actor's
# properties, an activity's shape, a delivery's headers) runs against all of them before it is committed, since one
# reader stricter than the rest fails on it alone. Each batch starts its own pasture afresh (run.sh up), runs its
# scenarios (interop.sh) and takes the pasture down (run.sh down), and the next batch runs whatever the one before did.
# PrivaPub runs with SecureMode on, as in production, unless PRIVAPUB_ENV says otherwise; DOTNET and PASTURE_PORT reach
# run.sh as they are. Each batch's output is kept in out/sweep-<batch>.log.
# usage: tools/pasture/sweep.sh [A|B|C|D ...] (default: every batch, in that order)
# A gts mastodon misskey sharkey akkoma, with relay, aoderelay and mailpit; scenarios: those five, threads followsync
# pins moves relay (relay's covers both relays) accounts (mailpit's) instance (the server's own settings, last: it
# changes them all and puts them back)
# B lemmy lemmy19 piefed mbin nodebb
# C peertube pixelfed vernissage wordpress ghost writefreely owncast castopod funkwhale
# D friendica mobilizon gancio bookwyrm smithereen mitra snac ktistec forte hubzilla
# Not swept: restore (run it alone: it restores the whole server), crawler (it needs the crawler's own settings) and
# persona-archive; hollo, iceshrimp, pleroma, flood and decepub have no scenario of their own.
set -uo pipefail
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
export PRIVAPUB_ENV=${PRIVAPUB_ENV:-Federation__SecureMode=true}
batch_peers() {
case "$1" in
A) echo "gts mastodon misskey sharkey akkoma relay aoderelay mailpit" ;;
B) echo "lemmy lemmy19 piefed mbin nodebb" ;;
C) echo "peertube pixelfed vernissage wordpress ghost writefreely owncast castopod funkwhale" ;;
D) echo "friendica mobilizon gancio bookwyrm smithereen mitra snac ktistec forte hubzilla" ;;
esac
}
batch_scenarios() {
case "$1" in
A) echo "gts mastodon misskey sharkey akkoma threads followsync pins moves relay accounts instance" ;;
*) batch_peers "$1" ;;
esac
}
[ $# -gt 0 ] || set -- A B C D
for batch in "$@"; do
[ -n "$(batch_peers "$batch")" ] || { echo "no such batch: $batch (A, B, C or D)" >&2; exit 2; }
for peer in $(batch_peers "$batch"); do
[ -f "$here/peers/$peer.sh" ] || { echo "batch $batch: no such peer: $peer" >&2; exit 2; }
done
for scenario in $(batch_scenarios "$batch"); do
[ -f "$here/scenarios/$scenario.sh" ] || { echo "batch $batch: no scenario for $scenario" >&2; exit 2; }
done
done
mkdir -p "$here/out"
summary=(); bad=0
for batch in "$@"; do
log="$here/out/sweep-$batch.log"
echo "== batch $batch: $(batch_peers "$batch")"
# shellcheck disable=SC2046
if ! "$here/run.sh" up $(batch_peers "$batch") 2>&1 | tee "$log"; then
summary+=("$batch the pasture did not start (out/sweep-$batch.log)"); bad=1
"$here/run.sh" down || true
continue
fi
# shellcheck disable=SC2046
"$here/interop.sh" $(batch_scenarios "$batch") 2>&1 | tee -a "$log"
status=${PIPESTATUS[0]}
"$here/run.sh" down || true
passed=$(grep -c '^ ok ' "$log"); failed=$(grep -c '^ FAIL ' "$log"); xfailed=$(grep -c '^ xf ' "$log")
line="$batch ok $passed ko $failed xf $xfailed ($(batch_scenarios "$batch"))"
if ! grep -qE '^[0-9]+ passed, [0-9]+ failed, [0-9]+ expected failures$' "$log"; then
line="$line stopped before its end (exit $status)"; bad=1
fi
[ "$failed" = 0 ] || bad=1
summary+=("$line")
done
echo; echo "sweep:"
printf ' %s\n' "${summary[@]}"
[ "$bad" = 0 ]