Files
deploy-test/04-build.sh
2026-04-13 01:27:34 +07:00

105 lines
3.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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}"