Skip to main content

scripts/bootstrap_integration_vm.sh

#!/usr/bin/env sh
set -eu

VM_NAME="${HOSTKIT_LIMA_VM:-hostkit-test}"
ELIXIR_VERSION="${HOSTKIT_ELIXIR_VERSION:-1.20.1}"
ERLANG_VERSION="${HOSTKIT_ERLANG_VERSION:-29.0.2}"
LIMACTL="${LIMACTL:-limactl}"

if ! command -v "$LIMACTL" >/dev/null 2>&1; then
  if [ -x "$HOME/.local/bin/limactl" ]; then
    LIMACTL="$HOME/.local/bin/limactl"
  else
    echo "limactl not found. Install Lima or set LIMACTL=/path/to/limactl." >&2
    exit 127
  fi
fi

status="$($LIMACTL list 2>/dev/null | awk -v name="$VM_NAME" '$1 == name { print $2 }')"

case "$status" in
  Running)
    ;;
  Stopped)
    "$LIMACTL" start "$VM_NAME" >/dev/null
    ;;
  "")
    echo "Lima VM '$VM_NAME' not found. Create it first or set HOSTKIT_LIMA_VM." >&2
    exit 1
    ;;
  *)
    echo "Lima VM '$VM_NAME' is $status, expected Running." >&2
    exit 1
    ;;
esac

"$LIMACTL" shell "$VM_NAME" -- sh -lc "
  set -eu

  sudo apt-get update
  sudo apt-get install -y \
    autoconf \
    build-essential \
    ca-certificates \
    curl \
    git \
    libncurses-dev \
    libssl-dev \
    m4 \
    unzip \
    xsltproc

  if ! command -v mise >/dev/null 2>&1; then
    curl https://mise.run | sh
  fi

  export PATH=\"\$HOME/.local/bin:\$PATH\"
  mise use -g erlang@$ERLANG_VERSION elixir@$ELIXIR_VERSION
  mise exec erlang@$ERLANG_VERSION elixir@$ELIXIR_VERSION -- mix local.hex --force
  mise exec erlang@$ERLANG_VERSION elixir@$ELIXIR_VERSION -- mix local.rebar --force

  if ! grep -q 'mise activate sh' \$HOME/.profile 2>/dev/null; then
    printf '\nexport PATH=\"\$HOME/.local/bin:\$PATH\"\neval \"\$(mise activate sh)\"\n' >> \$HOME/.profile
  fi
"