105 lines
3.2 KiB
Bash
Executable File
105 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# =============================================================================
|
||
# 04-build.sh — 编译所有后端 Go 服务
|
||
#
|
||
# 编译产物输出至 .local-dev/bin/
|
||
# 支持只编译单个服务:./04-build.sh [service-name]
|
||
#
|
||
# 可用服务名: openim-server, chat-rpc, admin-rpc, chat-api, admin-api,
|
||
# meetingmsg, livecloud, livestream
|
||
#
|
||
# 后续步骤:05-start.sh(启动后端服务)
|
||
# =============================================================================
|
||
set -euo pipefail
|
||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
|
||
init_dirs
|
||
init_script_log # ← 脚本执行日志
|
||
require_tools go
|
||
|
||
header "步骤 4 / 5 — 编译后端 Go 服务"
|
||
|
||
# 编译单个服务的函数
|
||
# 用法: _build <output-name> <source-dir> <package>
|
||
_build() {
|
||
local name="$1" dir="$ROOT_DIR/$2" pkg="$3"
|
||
local out="$BUILD_DIR/$name"
|
||
|
||
info "编译 ${BOLD}$name${NC} ..."
|
||
local start_ts=$SECONDS
|
||
|
||
if (cd "$dir" && go build -o "$out" "$pkg"); then
|
||
local elapsed=$(( SECONDS - start_ts ))
|
||
success " ✓ $name → $out (${elapsed}s)"
|
||
else
|
||
error " ✗ $name 编译失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 服务列表:名称 | 源码目录(相对 ROOT) | 包路径
|
||
declare -A SVC_DIR=(
|
||
[openim-server]="open-im-server"
|
||
[chat-rpc]="chat"
|
||
[admin-rpc]="chat"
|
||
[chat-api]="chat"
|
||
[admin-api]="chat"
|
||
[meetingmsg]="meetingmsg"
|
||
[livecloud]="livecloud"
|
||
[livestream]="livestream"
|
||
[build-server]="build-server"
|
||
)
|
||
|
||
declare -A SVC_PKG=(
|
||
[openim-server]="./cmd/main.go"
|
||
[chat-rpc]="./cmd/rpc/chat-rpc/"
|
||
[admin-rpc]="./cmd/rpc/admin-rpc/"
|
||
[chat-api]="./cmd/api/chat-api/"
|
||
[admin-api]="./cmd/api/admin-api/"
|
||
[meetingmsg]="."
|
||
[livecloud]="."
|
||
[livestream]="."
|
||
[build-server]="."
|
||
)
|
||
|
||
# ── 判断是编译单个还是全部 ────────────────────────────────────────────────────
|
||
TARGET="${1:-all}"
|
||
|
||
if [[ "$TARGET" == "all" ]]; then
|
||
step "编译全部服务(共 ${#SVC_DIR[@]} 个)"
|
||
FAILED=()
|
||
for svc in openim-server chat-rpc admin-rpc chat-api admin-api meetingmsg livecloud livestream build-server; do
|
||
_build "$svc" "${SVC_DIR[$svc]}" "${SVC_PKG[$svc]}" || FAILED+=("$svc")
|
||
done
|
||
|
||
echo ""
|
||
if [[ ${#FAILED[@]} -eq 0 ]]; then
|
||
success "所有服务编译完成!"
|
||
ls -lh "$BUILD_DIR/" | awk 'NR>1 {printf " %-20s %s\n", $NF, $5}'
|
||
else
|
||
error "以下服务编译失败: ${FAILED[*]}"
|
||
echo ""
|
||
echo "排查建议:"
|
||
echo " 1. cd $ROOT_DIR/<service-dir> && go mod tidy"
|
||
echo " 2. 检查 Go 版本: go version(推荐 1.21+)"
|
||
echo " 3. 检查模块依赖: go mod download"
|
||
exit 1
|
||
fi
|
||
else
|
||
# 编译单个服务
|
||
if [[ -z "${SVC_DIR[$TARGET]:-}" ]]; then
|
||
error "未知服务: $TARGET"
|
||
echo "可用: ${!SVC_DIR[*]}"
|
||
exit 1
|
||
fi
|
||
step "编译单个服务: $TARGET"
|
||
_build "$TARGET" "${SVC_DIR[$TARGET]}" "${SVC_PKG[$TARGET]}"
|
||
success "$TARGET 编译完成"
|
||
fi
|
||
|
||
echo ""
|
||
echo -e "${BOLD}下一步:${NC}"
|
||
echo -e " 启动所有后端服务:"
|
||
echo -e " ${CYAN}./deploy-test/05-start.sh${NC}"
|
||
echo -e " 或只启动单个服务:"
|
||
echo -e " ${CYAN}./deploy-test/05-start.sh openim-server${NC}"
|