#!/usr/bin/env bash
# Tsecbench 镜像构建脚本（在 WSL 中执行）
#
# 用法：
#   bash tencent/build.sh                    # 默认构建 tsecbench-agent:latest
#   IMAGE_NAME=myagent bash tencent/build.sh # 自定义镜像名
#
# 前置条件：
#   - Go 交叉编译已在 Windows 侧完成（tencent/agent-linux-amd64）
#     可在 PowerShell 中执行：
#       $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"
#       go build -trimpath -ldflags="-s -w" -o tencent/agent-linux-amd64 .
#   - WSL 中已安装 docker
#
# 流程：
#   1. 检查预编译的 Go agent 二进制是否存在
#   2. docker build（构建上下文 = 项目根目录，.dockerignore 排除无关文件）
#   3. docker save | gzip 导出到 tencent/agent.tar.gz
set -euo pipefail

# ---- 配置 ----
PROJECT_ROOT="${PROJECT_ROOT:-/mnt/e/Code/Go/awesomeProject/agent}"
IMAGE_NAME="${IMAGE_NAME:-tsecbench-agent}"
IMAGE_TAG="${IMAGE_TAG:-latest}"
AGENT_BIN="$PROJECT_ROOT/tencent/agent-linux-amd64"

echo "==> 项目根目录: $PROJECT_ROOT"
echo "==> 镜像名称: $IMAGE_NAME:$IMAGE_TAG"

# ---- 1. 检查 Go agent 二进制 ----
echo "==> [1/3] 检查 Go agent 二进制..."
if [ ! -f "$AGENT_BIN" ]; then
  echo "    未找到预编译二进制 $AGENT_BIN"
  echo "    请先在 PowerShell 中执行交叉编译："
  echo '      $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"'
  echo '      go build -trimpath -ldflags="-s -w" -o tencent/agent-linux-amd64 .'
  exit 1
fi
echo "    二进制就绪: $(ls -lh "$AGENT_BIN" | awk '{print $5}')"

# ---- 2. docker build ----
# 构建上下文 = 项目根目录，.dockerignore 排除无关文件
# Dockerfile 路径通过 -f 指定
echo "==> [2/3] 构建 Docker 镜像 $IMAGE_NAME:$IMAGE_TAG..."
docker build -f "$PROJECT_ROOT/tencent/Dockerfile" -t "$IMAGE_NAME:$IMAGE_TAG" "$PROJECT_ROOT"

# ---- 3. 导出镜像 ----
echo "==> [3/3] 导出镜像到 tencent/agent.tar.gz..."
OUTPUT="$PROJECT_ROOT/tencent/agent.tar.gz"
docker save "$IMAGE_NAME:$IMAGE_TAG" | gzip > "$OUTPUT"
echo "    导出完成: $(ls -lh "$OUTPUT" | awk '{print $5}')"

echo ""
echo "==> 全部完成！"
echo "    镜像: $IMAGE_NAME:$IMAGE_TAG"
echo "    产物: tencent/agent.tar.gz"
echo ""
echo "上传到 Tsecbench 平台时直接选择 agent.tar.gz 即可。"
