init
This commit is contained in:
104
04-build.sh
Executable file
104
04-build.sh
Executable file
@@ -0,0 +1,104 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user