todowindy/Makefile

97 lines
4.3 KiB
Makefile

ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
$(eval $(ARGS):;@:)
run:
@# default: source ~/.zshrc to load env vars
@if [ -f $$HOME/.zshrc ]; then set -a; . $$HOME/.zshrc; set +a; fi; \
# MODEL can be passed as env (MODEL=...) or as extra target (e.g., make run deepseek-v3.1-terminus)
MODEL_ARG="$(word 2,$(MAKECMDGOALS))"; \
PORT=$${PORT:-8080}; \
if lsof -i :$${PORT} -sTCP:LISTEN -P -n >/dev/null 2>&1; then \
for p in 8085 8090 8091 8092; do \
if ! lsof -i :$$p -sTCP:LISTEN -P -n >/dev/null 2>&1; then PORT=$$p; break; fi; \
done; \
fi; \
export TW_ADDR=:$$PORT; \
export TW_DB_PATH=$${TW_DB_PATH:-data/todowindy.db}; \
# propagate env to child process
if [ -n "$${OPENAI_API_KEY:-}" ]; then export OPENAI_API_KEY; fi; \
if [ -n "$${TW_OPENAI_API_KEY:-}" ]; then export TW_OPENAI_API_KEY; fi; \
if [ -n "$${TW_OPENAI_BASE_URL:-}" ]; then export TW_OPENAI_BASE_URL; fi; \
# allow model override
if [ -n "$${MODEL:-}" ]; then export TW_OPENAI_MODEL="$${MODEL}"; \
elif [ -n "$$MODEL_ARG" ] && [ "$$MODEL_ARG" != "run" ]; then export TW_OPENAI_MODEL="$$MODEL_ARG"; \
elif [ -n "$${TW_OPENAI_MODEL:-}" ]; then export TW_OPENAI_MODEL; fi; \
if [ -n "$${GIN_MODE:-}" ]; then export GIN_MODE; fi; \
if [ -n "$${TW_HTTP_WRITE_TIMEOUT:-}" ]; then export TW_HTTP_WRITE_TIMEOUT; fi; \
if [ -n "$${TW_HTTP_READ_TIMEOUT:-}" ]; then export TW_HTTP_READ_TIMEOUT; fi; \
if [ -n "$${TW_HTTP_IDLE_TIMEOUT:-}" ]; then export TW_HTTP_IDLE_TIMEOUT; fi; \
if [ -n "$${TW_LLM_TIMEOUT:-}" ]; then export TW_LLM_TIMEOUT; fi; \
# enforce openai provider; require API key
if [ -z "$${OPENAI_API_KEY:-}" ] && [ -z "$${TW_OPENAI_API_KEY:-}" ]; then \
echo "Error: OPENAI_API_KEY or TW_OPENAI_API_KEY is required (mock disabled)." 1>&2; exit 1; \
fi; \
export TW_LLM=openai; \
MASK_KEY=unset; if [ -n "$${OPENAI_API_KEY:-}" ]; then MASK_KEY=***$${OPENAI_API_KEY: -4}; else MASK_KEY=***$${TW_OPENAI_API_KEY: -4}; fi; \
echo "Running server on $$TW_ADDR (LLM=openai, base=$${TW_OPENAI_BASE_URL:-n/a}, model=$${TW_OPENAI_MODEL:-deepseek-v3.1-terminus}, key=$$MASK_KEY)"; \
go run ./cmd/server
run-openai:
@if [ -f $$HOME/.zshrc ]; then set -a; . $$HOME/.zshrc; set +a; fi; \
PORT=$${PORT:-8080}; export TW_ADDR=:$$PORT; \
export TW_DB_PATH=$${TW_DB_PATH:-data/todowindy.db}; \
export TW_LLM=openai; \
if [ -n "$${OPENAI_API_KEY:-}" ]; then export OPENAI_API_KEY; fi; \
if [ -n "$${TW_OPENAI_API_KEY:-}" ]; then export TW_OPENAI_API_KEY; fi; \
if [ -n "$${TW_OPENAI_BASE_URL:-}" ]; then export TW_OPENAI_BASE_URL; fi; \
# allow model override
MODEL_ARG="$(word 2,$(MAKECMDGOALS))"; \
if [ -n "$${MODEL:-}" ]; then export TW_OPENAI_MODEL="$${MODEL}"; \
elif [ -n "$$MODEL_ARG" ] && [ "$$MODEL_ARG" != "run-openai" ]; then export TW_OPENAI_MODEL="$$MODEL_ARG"; \
elif [ -n "$${TW_OPENAI_MODEL:-}" ]; then export TW_OPENAI_MODEL; fi; \
if [ -n "$${GIN_MODE:-}" ]; then export GIN_MODE; fi; \
if [ -n "$${TW_HTTP_WRITE_TIMEOUT:-}" ]; then export TW_HTTP_WRITE_TIMEOUT; fi; \
if [ -n "$${TW_HTTP_READ_TIMEOUT:-}" ]; then export TW_HTTP_READ_TIMEOUT; fi; \
if [ -n "$${TW_HTTP_IDLE_TIMEOUT:-}" ]; then export TW_HTTP_IDLE_TIMEOUT; fi; \
if [ -n "$${TW_LLM_TIMEOUT:-}" ]; then export TW_LLM_TIMEOUT; fi; \
MASK_KEY=unset; if [ -n "$${OPENAI_API_KEY:-}" ]; then MASK_KEY=***$${OPENAI_API_KEY: -4}; else MASK_KEY=***$${TW_OPENAI_API_KEY: -4}; fi; \
echo "Running server on $$TW_ADDR (LLM=openai, base=$${TW_OPENAI_BASE_URL:-n/a}, model=$${TW_OPENAI_MODEL:-deepseek-v3.1-terminus}, key=$$MASK_KEY)"; \
go run ./cmd/server
run-mock:
@set -euo pipefail; \
PORT="$${PORT:-8080}"; export TW_ADDR=:$$PORT; \
export TW_DB_PATH=$${TW_DB_PATH:-data/todowindy.db}; \
export TW_LLM=mock; \
go run ./cmd/server
build:
go build -o bin/todowindy-server ./cmd/server
tidy:
go mod tidy
test:
go test ./...
# Build Docker image
docker-build:
docker build -t todowindy:latest .
docker-run:
docker run --rm -it -p 8080:8080 --env-file .env -v $(PWD)/data:/app/data todowindy:latest
compose-up:
docker compose up -d --build
compose-down:
docker compose down
# Build static linux binary for server deployment
release-linux:
@mkdir -p dist
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/todowindy-server-linux-amd64 ./cmd/server
@echo "Built dist/todowindy-server-linux-amd64"
SHELL := /bin/bash
.SHELLFLAGS := -eu -o pipefail -c