#!/bin/bash # 用法: /data/ymk/build/build.sh [tag] # 默认 tag: ymkymx/sglang:<分支>--local-(命名规则见 AGENTS.md) # 另打 <分支>-latest-local 别名。 # # 依赖路径自动选择: # python/pyproject.toml 的 sha256 与上次成功构建一致 → Dockerfile.fast(--no-deps,秒级) # 不一致(或 FULL=1)→ Dockerfile 全量依赖解析,成功后记录新 hash set -euo pipefail cd /data/ymk SHA=$(git -C sglang rev-parse --short=9 HEAD) BR=$(git -C sglang rev-parse --abbrev-ref HEAD) DT=$(date -u +%Y%m%d-%H%M) TAG=${1:-ymkymx/sglang:$BR-$SHA-local-$DT} HASH_FILE=build/.last_pyproject_sha256 CUR=$(sha256sum sglang/python/pyproject.toml | cut -d' ' -f1) PREV=$(cat "$HASH_FILE" 2>/dev/null || echo none) DOCKERFILE=build/Dockerfile if [ "$CUR" = "$PREV" ] && [ "${FULL:-0}" != "1" ]; then DOCKERFILE=build/Dockerfile.fast echo "== pyproject 未变,走 fast 路径(--no-deps)" else echo "== pyproject 有变化或 FULL=1,走全量依赖解析" fi echo "== building $TAG from sglang@$(git -C sglang log --oneline -1) [$DOCKERFILE]" docker build -f "$DOCKERFILE" -t "$TAG" . # 构建成功才记录 hash / 打别名 echo "$CUR" > "$HASH_FILE" docker tag "$TAG" "ymkymx/sglang:$BR-latest-local" echo "== done: $TAG (别名 $BR-latest-local)"