#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)" HOST_ROOT="${TRIBES_HOST_ROOT:-$ROOT_DIR/../tribes}" HOST_ROOT="$(cd "$HOST_ROOT" && pwd -P)" COMPOSE_FILE="$ROOT_DIR/test/e2e/compose.sender.yaml" PROJECT="sender-e2e-$(date +%s)" IMAGE_LINK="$ROOT_DIR/.sender-e2e-image" export COMPOSE_PROJECT_NAME="$PROJECT" export E2E_COMPOSE_FILE="$COMPOSE_FILE" export SENDER_PLUGIN_ROOT="$ROOT_DIR" export TRIBES_HOST_ROOT="$HOST_ROOT" export TRIBES_SENDER_IMAGE="${TRIBES_SENDER_IMAGE:-tribes-sender-e2e:latest}" cleanup() { if [[ "${TRIBES_E2E_KEEP_RUNNING:-0}" == "1" ]]; then echo "==> keeping sender e2e compose stack running" else docker compose -f "$COMPOSE_FILE" down -v || true fi } trap cleanup EXIT command -v docker >/dev/null 2>&1 || { echo "docker is required for sender e2e" >&2 exit 1 } command -v ffmpeg >/dev/null 2>&1 || { echo "ffmpeg is required on the host for sender e2e pushing" >&2 exit 1 } if [[ "${SKIP_BUILD:-0}" != "1" ]]; then echo "==> building sender e2e image" image_path="$( nix build --impure "$ROOT_DIR#senderDockerE2E" \ --override-input tribes "$HOST_ROOT" \ --no-write-lock-file \ --out-link "$IMAGE_LINK" \ --print-out-paths \ --no-link )" echo "==> loading image tarball: $image_path" docker load < "$image_path" else echo "==> skipping image build (SKIP_BUILD=1)" fi echo "==> starting sender e2e databases and VictoriaMetrics" docker compose -f "$COMPOSE_FILE" up -d db-origin db-edge vm-origin vm-edge echo "==> migrating sender e2e databases" docker compose -f "$COMPOSE_FILE" run --rm migrate-origin docker compose -f "$COMPOSE_FILE" run --rm migrate-edge echo "==> starting sender e2e nodes" docker compose -f "$COMPOSE_FILE" up -d sender-origin sender-edge echo "==> starting sender e2e metrics scrapers" docker compose -f "$COMPOSE_FILE" up -d vmagent-origin vmagent-edge echo "==> running sender e2e assertions" set +e mix run --no-start "$ROOT_DIR/scripts/sender_e2e_runner.exs" E2E_STATUS=$? set -e if [[ "$E2E_STATUS" -ne 0 ]]; then echo "sender docker e2e failed (exit $E2E_STATUS)" docker compose -f "$COMPOSE_FILE" logs sender-origin sender-edge --tail=200 || true exit "$E2E_STATUS" fi echo "sender docker e2e passed"