zscripts-token-savers/bash/zstart_docker
KellyMichels 09b98bc77b feat(bash): add token-usage tracking to the bash port
Adds z_track_start/z_track_stop + z_record to zhelpers.sh and wires
z_track_start into every command script. Each run now captures its own output
volume (FIFO+tee, ANSI stripped), prints the '--- N lines / N chars / ~N tokens
est. (Claude Code) ---' footer, and appends one JSONL row per top-level run in
the same shape as the PowerShell tokens.jsonl. A nested-run guard keeps
zrestart from double-counting its zkill/zstart children.

Data dir precedence: $ZTOKENS_DATA, config ztokens.dataDir, sibling
../../ztokens/data, else ~/.ztokens/data. Docs + example config updated.

Verified on WSL (isolated data dir): single run records correctly; nested
zrestart produces one combined record, not three; est = round(chars/3.5).
2026-07-22 15:51:38 -05:00

67 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# Evomedia.net Token Savers — https://github.com/kellymichels/zscripts-token-savers
# Created by Kelly Michels · dev@evomedia.net
# Licensed under the MIT License. See LICENSE.
#
# zstart_docker — bring up a local docker compose stack from <scriptsRoot>/docker/.
#
# Usage:
# zstart_docker [--build] [--attached] [--solo]
#
# --build rebuild images before starting
# --attached stream logs in the foreground (default is detached)
# --solo use docker-compose.solo.yml (app only, no proxy)
set -uo pipefail
_HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$_HERE/zhelpers.sh"
z_track_start "$@"
z_require docker
build=0; attached=0; solo=0
while [ $# -gt 0 ]; do
case "$1" in
--build) build=1; shift ;;
--attached) attached=1; shift ;;
--solo) solo=1; shift ;;
*) err "Unknown option: $1"; exit 1 ;;
esac
done
info "=== zstart_docker ==="
compose_file="docker-compose.yml"
[ "$solo" -eq 1 ] && compose_file="docker-compose.solo.yml"
if ! docker info >/dev/null 2>&1; then
printf '\n'
err "ERROR: Docker Engine is not running or this shell cannot reach it."
printf '\n'
info "Try:"
dim " 1. Start the Docker daemon (systemctl start docker / open Docker Desktop)."
dim " 2. Check your user is in the docker group: groups | grep docker"
printf '\n'
exit 1
fi
compose_path="$_HERE/docker/$compose_file"
if [ ! -f "$compose_path" ]; then
err "ERROR: Missing $compose_path"
exit 1
fi
[ -f "$_HERE/.env" ] || warn "WARNING: .env not found at $_HERE/.env - compose may still start if env vars are set elsewhere."
dc_args=(compose -f "$compose_file" up)
[ "$attached" -eq 0 ] && dc_args+=(-d)
[ "$build" -eq 1 ] && dc_args+=(--build)
dim "Running: docker ${dc_args[*]}"
(cd "$_HERE/docker" && docker "${dc_args[@]}") || exit $?
printf '\n'; ok "Stack: http://localhost/"
if [ "$attached" -eq 0 ]; then
dim 'Logs: docker compose -f docker/docker-compose.yml logs -f'
dim 'Stop: docker compose -f docker/docker-compose.yml down'
fi