tools/pasture/run.sh up [peer...] | down | logs | ps and interop.sh [peer...] are now built from parts: - lib/pasture.sh: network, Caddy with its CA in a volume and copied to .ca/root.crt, Mongo, PrivaPub; - peers/<name>.sh: each peer's <name>_up; - lib/interop.sh: ok, ko, and xf for checks expected to fail until a later phase; privapub_token <persona>, which gives each peer its own persona under one root; and stats_check; - scenarios/<name>.sh: each peer's checks. GoToSocial is pinned at 0.22.1, the version the 33 checks were proven on. Its scenario gains four statistics checks: - the admin statistics describe gts.test as gotosocial; - they count inbound and outbound traffic; - they name no account. 37/37 passed three runs in a row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELjqpznMFMNrJoJUj6K5p2
37 lines
2.1 KiB
Bash
37 lines
2.1 KiB
Bash
# Shared by run.sh: the network, Caddy (its CA kept in a volume and copied to .ca/root.crt), Mongo and PrivaPub.
|
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"; repo="$(cd "$here/../.." && pwd)"
|
|
net=privapub-pasture; publish="$here/.publish"; ca="$here/.ca"
|
|
|
|
wait_http() { # url tries
|
|
for _ in $(seq 1 "${2:-60}"); do curl -fsk -o /dev/null "$1" && return 0; sleep 2; done
|
|
echo "timed out waiting for $1" >&2; return 1
|
|
}
|
|
|
|
pasture_base_up() {
|
|
local dotnet=${DOTNET:-$(command -v dotnet || echo ~/.dotnet/dotnet)}
|
|
"$dotnet" publish "$repo/PrivaPub/PrivaPub.csproj" -c Release -r linux-x64 --self-contained true -o "$publish" -v quiet
|
|
cp "$here/appsettings.Pasture.json" "$publish/"
|
|
podman network exists $net || podman network create $net >/dev/null
|
|
podman volume exists pasture-caddy-data || podman volume create pasture-caddy-data >/dev/null
|
|
podman run -d --replace --name pasture-mongo --network $net --network-alias mongo docker.io/library/mongo:8 --quiet >/dev/null
|
|
local aliases=""
|
|
for site in privapub gts mastodon akkoma misskey sharkey lemmy; do aliases="$aliases --network-alias $site.test"; done
|
|
# shellcheck disable=SC2086
|
|
podman run -d --replace --name pasture-caddy --network $net $aliases \
|
|
-p 127.0.0.1:6443:443 --sysctl net.ipv4.ip_unprivileged_port_start=0 -v "$here/Caddyfile:/etc/caddy/Caddyfile:Z,ro" \
|
|
-v pasture-caddy-data:/data docker.io/library/caddy:2 >/dev/null
|
|
podman run -d --replace --name pasture-privapub --network $net -p 127.0.0.1:6971:80 \
|
|
--sysctl net.ipv4.ip_unprivileged_port_start=0 -e ASPNETCORE_ENVIRONMENT=Pasture -w /app -v "$publish:/app:Z,ro" \
|
|
mcr.microsoft.com/dotnet/runtime-deps:10.0 /app/PrivaPub >/dev/null
|
|
wait_http http://127.0.0.1:6971/build.json
|
|
mkdir -p "$ca"
|
|
for _ in $(seq 1 30); do podman cp pasture-caddy:/data/caddy/pki/authorities/local/root.crt "$ca/root.crt" 2>/dev/null && break; sleep 1; done
|
|
}
|
|
|
|
pasture_down() {
|
|
podman ps -a --format '{{.Names}}' | grep '^pasture-' | xargs -r podman rm -f >/dev/null 2>&1 || true
|
|
podman volume ls --format '{{.Name}}' | grep '^pasture-' | xargs -r podman volume rm -f >/dev/null 2>&1 || true
|
|
podman network rm $net >/dev/null 2>&1 || true
|
|
rm -rf "$here/.state"
|
|
}
|