Build / Build (push) Successful in 1m3s
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
74 lines
3.5 KiB
Bash
Executable File
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 ]
|