PYTHON := .venv/bin/python PIP := .venv/bin/pip TODAY := $(shell date +%Y-%m-%d) .PHONY: help setup init status preview preview-dates dry-run dry-run-dates fill fill-range fill-dates teams-test start stop restart server-status start-fg docker-build docker-up docker-down docker-logs docker-restart docker-start help: @echo "吉八小 · 集滿八小時" @echo "" @echo " make setup 建立 venv + 安裝依賴 + 建立 .env" @echo " make status 檢查設定 / Session / 任務數" @echo " make preview 用 Grok 預覽今天的填寫計畫" @echo " make dry-run 試跑今天(不送出 PTS)" @echo " make fill 一鍵填寫今天" @echo " make fill-range START=... END=... 補寫日期區間" @echo " make fill-dates 依 dates.txt 補寫指定日期" @echo " make preview-dates 預覽 dates.txt 的分配" @echo " make teams-test [START=] [END=] 只測 Teams 抓會議(不寫 PTS)" @echo " make start 背景啟動 Web UI + API" @echo " make stop 關閉伺服器" @echo " make restart 重啟伺服器" @echo " make server-status 查看伺服器是否在跑" @echo " make start-fg 前景啟動(開發用,Ctrl+C 結束)" @echo " make docker-start 一鍵:關本地 + 建置 + 啟動 Docker" @echo " make docker-build 建置 Docker 映像" @echo " make docker-up 啟動 Docker(無主機掛載,/data 為 tmpfs,關容器即消失)" @echo " make docker-down 停止 Docker" @echo " make docker-logs 查看 Docker log" @echo "" @echo "第一次請先:" @echo " 1) 編輯 .env 填入 GITLAB_TOKEN / XAI_API_KEY" @echo " 2) make start → 網頁輸入 PTS(與選用 Teams)帳密登入" @echo " 3) make fill" setup: init python3 -m venv .venv $(PIP) install -r backend/requirements.txt $(PYTHON) -m playwright install chromium @echo "Setup done. Edit .env then open http://localhost:8765 to login with PTS / Teams accounts." init: @test -f .env || cp .env.example .env status: cd backend && ../$(PYTHON) cli.py status preview: cd backend && ../$(PYTHON) cli.py preview --start $(TODAY) --end $(TODAY) dry-run: cd backend && ../$(PYTHON) cli.py fill-today --dry-run fill: cd backend && ../$(PYTHON) cli.py fill-today fill-range: @test -n "$(START)" && test -n "$(END)" || (echo "Usage: make fill-range START=YYYY-MM-DD END=YYYY-MM-DD" && exit 1) cd backend && ../$(PYTHON) cli.py fill-range --start $(START) --end $(END) preview-dates: cd backend && ../$(PYTHON) cli.py preview-dates --file ../dates.txt dry-run-dates: cd backend && ../$(PYTHON) cli.py fill-dates --file ../dates.txt --dry-run fill-dates: cd backend && ../$(PYTHON) cli.py fill-dates --file ../dates.txt teams-test: cd backend && ../$(PYTHON) cli.py teams-test $(if $(START),--start $(START),) $(if $(END),--end $(END),) $(if $(INCLUDE_HOLIDAYS),--include-holidays,) start: @chmod +x scripts/server.sh @./scripts/server.sh start stop: @chmod +x scripts/server.sh @./scripts/server.sh stop restart: @chmod +x scripts/server.sh @./scripts/server.sh restart server-status: @chmod +x scripts/server.sh @./scripts/server.sh status start-fg: cd backend && ../$(PYTHON) main.py docker-start: @chmod +x scripts/docker-start.sh @./scripts/docker-start.sh docker-build: docker compose build --pull docker-up: @echo "Ephemeral mode: no host data mount (tmpfs /data only)" docker compose up -d --build --force-recreate --remove-orphans @echo "Web UI: http://localhost:$${BACKEND_PORT:-8765}" @echo "資料僅在容器內,docker compose down 後即消失" docker-down: docker compose down --remove-orphans docker-logs: docker compose logs -f docker-restart: docker compose up -d --force-recreate --build --remove-orphans # Stop local Python server + Docker container stop-all: @chmod +x scripts/server.sh @./scripts/server.sh stop 2>/dev/null || true @docker compose down --remove-orphans 2>/dev/null || true @echo "All local + Docker services stopped"