97 lines
4.3 KiB
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
|