Base image already has torch 2.13, but pyproject build-system.requires pulls it into pip's isolated build env on every build (~6GB via throttled mirror, 47min). --no-build-isolation reuses the base env; build.sh picks Dockerfile.fast (--no-deps) when python/pyproject.toml is unchanged.
34 lines
1.3 KiB
Bash
34 lines
1.3 KiB
Bash
#!/bin/bash
|
||
# 用法: /data/ymk/build/build.sh [tag]
|
||
# 默认 tag: ymkymx/sglang:<分支>-<sha9>-local-<UTC构建日期时间>(命名规则见 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)"
|