#!/usr/bin/env bash set -euo pipefail MODE=fast INTERACTIVE=0 KEEP=0 for arg in "$@"; do case "$arg" in full) MODE=full ;; fast) MODE=fast ;; admin) MODE=admin ;; firewall) MODE=firewall ;; nat) MODE=nat ;; multi) MODE=multi ;; scale) MODE=scale ;; negative) MODE=negative ;; keys) MODE=keys ;; restart) MODE=restart ;; controlplane) MODE=controlplane ;; controlplane-ha) MODE=controlplane-ha ;; relay-failover) MODE=relay-failover ;; server-mesh) MODE=server-mesh ;; services) MODE=services ;; dns) MODE=dns ;; ipv6) MODE=ipv6 ;; userspace) MODE=userspace ;; router) MODE=router ;; --interactive) INTERACTIVE=1 ;; --keep) KEEP=1 ;; esac done ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) cd "$ROOT_DIR" if [[ "$MODE" == "admin" ]]; then exec "$ROOT_DIR/lab/test-admin-smoke.sh" fi # Use git+file flake URL so git submodules are included during evaluation/build. FLAKE_REF="${LIGHTSCALE_FLAKE_REF:-git+file://$ROOT_DIR?submodules=1}" nix build "${FLAKE_REF}#packages.x86_64-linux.lightscale-server" nix build "${FLAKE_REF}#packages.x86_64-linux.lightscale-client" OUT_LINK="$ROOT_DIR/lab/driver-$MODE" if [[ "$MODE" == "full" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-5.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "nat" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-nat.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "multi" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-multi.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "scale" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-scale.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "negative" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-negative.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "keys" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-keys.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "restart" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-restart.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "controlplane" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-controlplane-restart.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "controlplane-ha" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-controlplane-ha.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "relay-failover" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-relay-failover.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "server-mesh" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-server-mesh-relay.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "services" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-services.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "dns" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-dns.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "ipv6" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-ipv6.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "userspace" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-userspace.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "firewall" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-firewall.driver" --out-link "$OUT_LINK" elif [[ "$MODE" == "router" ]]; then nix build "${FLAKE_REF}#nixosTests.lightscale-lab-router.driver" --out-link "$OUT_LINK" else nix build "${FLAKE_REF}#nixosTests.lightscale-lab.driver" --out-link "$OUT_LINK" fi DRIVER_ARGS=() if [[ "$INTERACTIVE" == "1" ]]; then DRIVER_ARGS+=("--interactive") fi if [[ "$KEEP" == "1" ]]; then DRIVER_ARGS+=("--keep-vm-state") fi exec "$OUT_LINK/bin/nixos-test-driver" "${DRIVER_ARGS[@]}"