From e179a1022319ec77d936f1cee21c471ac34f4d53 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 13 May 2026 16:11:16 -0500 Subject: feat(setup): scripts/setup-telega.sh prepares the docker environment for telega Verifies docker is installed and the daemon is reachable, then either pulls a public image (when `TELEGA_DOCKER_IMAGE` is set) or announces the in-Emacs build path (`M-x telega-server-build`) for the user to run once. Telegram auth (phone + verification code) is interactive on first `M-x telega` and not scripted here. Same shape as setup-email.sh: helpers are sourceable for bats, `main` runs only under direct execution. 7 bats tests stub `docker` and `command` so the suite never talks to the real daemon. --- scripts/setup-telega.sh | 80 ++++++++++++++++++++++++++++++++++++++++ tests/test-setup-telega.bats | 87 ++++++++++++++++++++++++++++++++++++++++++++ todo.org | 21 +++++++---- 3 files changed, 180 insertions(+), 8 deletions(-) create mode 100755 scripts/setup-telega.sh create mode 100644 tests/test-setup-telega.bats diff --git a/scripts/setup-telega.sh b/scripts/setup-telega.sh new file mode 100755 index 00000000..2b565e99 --- /dev/null +++ b/scripts/setup-telega.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash +# Craig Jennings +# +# Prepares the docker environment telega.el uses for TDLib. +# +# Sequence: +# - Verifies docker is installed and the daemon is responsive. +# - Verifies the user can talk to docker without sudo (group membership). +# - Pulls the telega-server image if a public one is configured (env var +# `TELEGA_DOCKER_IMAGE'); otherwise prints the in-Emacs build command +# (`M-x telega-server-build') for the user to run once. +# +# Does NOT handle Telegram account auth -- phone number + verification +# code is interactive and runs inside `M-x telega' on first launch. +# +# Sourceable: only `main' runs when the script is executed directly, so +# the helpers can be tested with bats. + +set -euo pipefail + +# Public image override. When set, the script pulls this image directly +# instead of falling back to the in-Emacs build flow. Default empty so +# the script doesn't assume an image name that may or may not exist +# upstream. +: "${TELEGA_DOCKER_IMAGE:=}" + +ensure_docker_installed() { + if ! command -v docker >/dev/null 2>&1; then + echo " ✗ docker not found on PATH" + echo " install docker (https://docs.docker.com/get-docker/) and rerun" + return 1 + fi + echo " ✓ docker present: $(command -v docker)" +} + +ensure_docker_running() { + if ! docker info >/dev/null 2>&1; then + echo " ✗ cannot talk to the docker daemon" + echo " start the daemon (e.g. 'sudo systemctl start docker') or" + echo " add your user to the 'docker' group, then re-login and rerun" + return 1 + fi + echo " ✓ docker daemon reachable" +} + +pull_or_announce_image() { + if [[ -z "$TELEGA_DOCKER_IMAGE" ]]; then + cat <