更新脚本

This commit is contained in:
token
2025-11-10 17:36:48 +08:00
committed by GitHub
parent ca9c12b66f
commit ce6043505b
5 changed files with 260 additions and 439 deletions
+36
View File
@@ -16,8 +16,37 @@ permissions:
env:
DOTNET_VERSION: '10.0.x'
NODE_VERSION: '18.x'
jobs:
build-web:
name: Build Web
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
working-directory: web
run: npm install
- name: Build web
working-directory: web
run: npm run build
- name: Upload web artifacts
uses: actions/upload-artifact@v4
with:
name: web-dist
path: web/dist/
retention-days: 1
build-tunnelclient:
name: Build TunnelClient
runs-on: ${{ matrix.os }}
@@ -55,6 +84,7 @@ jobs:
build-fastgateway:
name: Build FastGateway
needs: build-web
runs-on: ${{ matrix.os }}
strategy:
matrix:
@@ -70,6 +100,12 @@ jobs:
- name: Checkout code
uses: actions/checkout@v4
- name: Download web artifacts
uses: actions/download-artifact@v4
with:
name: web-dist
path: src/FastGateway/wwwroot
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
-223
View File
@@ -1,223 +0,0 @@
#!/bin/bash
# FastGateway ARM 构建脚本
# 用于构建和发布 ARM 架构的 .NET 程序到 ./output 目录
set -e # 遇到错误时立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置变量
PROJECT_PATH="src/FastGateway.Service/FastGateway.Service.csproj"
OUTPUT_DIR="./output"
TARGET_FRAMEWORK="net8.0"
RUNTIME_IDENTIFIER="linux-arm64"
CONFIGURATION="Release"
# 函数:打印带颜色的消息
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 函数:检查文件是否存在
check_file() {
if [ ! -f "$1" ]; then
print_error "文件 $1 不存在"
exit 1
fi
}
# 函数:清理输出目录
cleanup_output() {
print_info "清理输出目录..."
if [ -d "$OUTPUT_DIR" ]; then
rm -rf "$OUTPUT_DIR"
print_success "输出目录清理完成"
fi
}
# 函数:还原 NuGet 包
restore_packages() {
print_info "还原 NuGet 包..."
dotnet restore "$PROJECT_PATH" --runtime "$RUNTIME_IDENTIFIER"
print_success "NuGet 包还原完成"
}
# 函数:构建项目
build_project() {
print_info "构建项目..."
dotnet build "$PROJECT_PATH" \
--configuration "$CONFIGURATION" \
--runtime "$RUNTIME_IDENTIFIER" \
--no-restore
print_success "项目构建完成"
}
# 函数:发布项目
publish_project() {
print_info "发布 ARM 架构程序到 $OUTPUT_DIR..."
dotnet publish "$PROJECT_PATH" \
--configuration "$CONFIGURATION" \
--runtime "$RUNTIME_IDENTIFIER" \
--output "$OUTPUT_DIR" \
--self-contained true \
--no-restore \
--no-build \
/p:PublishSingleFile=true \
/p:PublishTrimmed=true \
/p:IncludeNativeLibrariesForSelfExtract=true
print_success "ARM 程序发布完成"
}
# 函数:显示发布信息
show_publish_info() {
print_info "发布信息:"
echo " - 目标框架: $TARGET_FRAMEWORK"
echo " - 运行时标识符: $RUNTIME_IDENTIFIER"
echo " - 配置: $CONFIGURATION"
echo " - 输出目录: $OUTPUT_DIR"
echo " - 单文件发布: 是"
echo " - 自包含: 是"
echo " - 代码裁剪: 是"
if [ -d "$OUTPUT_DIR" ]; then
echo ""
print_info "输出文件:"
ls -la "$OUTPUT_DIR"
fi
}
# 函数:验证发布结果
verify_publish() {
print_info "验证发布结果..."
if [ ! -d "$OUTPUT_DIR" ]; then
print_error "输出目录不存在"
exit 1
fi
# 检查主要的可执行文件
if [ -f "$OUTPUT_DIR/FastGateway.Service" ]; then
print_success "可执行文件 FastGateway.Service 已生成"
# 显示文件大小
file_size=$(du -h "$OUTPUT_DIR/FastGateway.Service" | cut -f1)
echo " 文件大小: $file_size"
# 检查文件权限
if [ ! -x "$OUTPUT_DIR/FastGateway.Service" ]; then
print_info "设置可执行权限..."
chmod +x "$OUTPUT_DIR/FastGateway.Service"
fi
else
print_error "可执行文件未找到"
exit 1
fi
# 检查配置文件
if [ -f "$OUTPUT_DIR/appsettings.json" ]; then
print_success "配置文件 appsettings.json 已复制"
fi
print_success "发布验证完成"
}
# 主函数
main() {
print_info "开始构建 FastGateway ARM 版本..."
# 检查项目文件
check_file "$PROJECT_PATH"
# 显示 .NET 版本信息
print_info ".NET 版本信息:"
dotnet --version
# 执行构建流程
cleanup_output
restore_packages
build_project
publish_project
verify_publish
show_publish_info
print_success "FastGateway ARM 版本构建完成!"
print_info "你可以将 $OUTPUT_DIR 目录复制到 ARM 设备上运行"
print_info "运行命令: ./FastGateway.Service"
}
# 显示使用帮助
show_help() {
echo "FastGateway ARM 构建脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " -h, --help 显示此帮助信息"
echo " --clean 仅清理输出目录"
echo " --restore 仅还原 NuGet 包"
echo " --build 仅构建项目"
echo " --publish 仅发布项目"
echo ""
echo "示例:"
echo " $0 # 完整构建流程"
echo " $0 --clean # 仅清理输出目录"
echo " $0 --publish # 仅发布项目"
}
# 处理命令行参数
case "${1:-}" in
-h|--help)
show_help
exit 0
;;
--clean)
cleanup_output
exit 0
;;
--restore)
check_file "$PROJECT_PATH"
restore_packages
exit 0
;;
--build)
check_file "$PROJECT_PATH"
restore_packages
build_project
exit 0
;;
--publish)
check_file "$PROJECT_PATH"
publish_project
verify_publish
show_publish_info
exit 0
;;
"")
main
;;
*)
print_error "未知选项: $1"
show_help
exit 1
;;
esac
-199
View File
@@ -1,199 +0,0 @@
#!/bin/bash
# FastGateway ARM 构建脚本
# 用于构建和发布 ARM 架构的 FastGateway 服务
set -e # 遇到错误时立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置变量
IMAGE_NAME="aidotnet/fast-gateway"
ARM_TAG="arm64"
LATEST_TAG="latest-arm64"
DOCKERFILE_ARM="src/FastGateway.Service/Dockerfile.arm"
COMPOSE_FILE="docker-compose.arm.yml"
# 函数:打印带颜色的消息
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 函数:检查命令是否存在
check_command() {
if ! command -v $1 &> /dev/null; then
print_error "$1 未找到,请先安装 $1"
exit 1
fi
}
# 函数:检查文件是否存在
check_file() {
if [ ! -f "$1" ]; then
print_error "文件 $1 不存在"
exit 1
fi
}
# 函数:清理旧的构建缓存
cleanup() {
print_info "清理 Docker 构建缓存..."
docker builder prune -f --filter until=24h
print_success "缓存清理完成"
}
# 函数:构建 ARM 镜像
build_arm_image() {
print_info "开始构建 ARM 架构镜像..."
# 检查 Dockerfile
check_file $DOCKERFILE_ARM
# 构建镜像
docker buildx build \
--platform linux/arm64 \
--file $DOCKERFILE_ARM \
--tag $IMAGE_NAME:$ARM_TAG \
--tag $IMAGE_NAME:$LATEST_TAG \
--load \
.
print_success "ARM 镜像构建完成"
}
# 函数:推送镜像到仓库
push_image() {
print_info "推送镜像到 Docker Hub..."
# 推送带版本标签的镜像
docker push $IMAGE_NAME:$ARM_TAG
docker push $IMAGE_NAME:$LATEST_TAG
print_success "镜像推送完成"
}
# 函数:使用 docker-compose 构建
build_with_compose() {
print_info "使用 docker-compose 构建 ARM 镜像..."
check_file $COMPOSE_FILE
docker-compose -f $COMPOSE_FILE build --no-cache
print_success "docker-compose 构建完成"
}
# 函数:运行 ARM 容器
run_arm_container() {
print_info "启动 ARM 容器..."
# 停止现有容器
docker-compose -f $COMPOSE_FILE down
# 启动新容器
docker-compose -f $COMPOSE_FILE up -d
print_success "ARM 容器已启动"
# 显示容器状态
print_info "容器状态:"
docker-compose -f $COMPOSE_FILE ps
}
# 函数:显示帮助信息
show_help() {
echo "FastGateway ARM 构建脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " build 构建 ARM 镜像"
echo " push 推送镜像到 Docker Hub"
echo " compose 使用 docker-compose 构建"
echo " run 运行 ARM 容器"
echo " cleanup 清理构建缓存"
echo " all 执行完整构建流程(构建+运行)"
echo " help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 build # 仅构建镜像"
echo " $0 all # 构建并运行"
echo " $0 push # 推送镜像"
}
# 函数:显示系统信息
show_system_info() {
print_info "系统信息:"
echo " 操作系统: $(uname -s)"
echo " 架构: $(uname -m)"
echo " Docker 版本: $(docker --version)"
echo " Docker Compose 版本: $(docker-compose --version)"
# 检查是否支持 ARM64
if docker buildx ls | grep -q "linux/arm64"; then
print_success "支持 ARM64 构建"
else
print_warning "可能不支持 ARM64 构建,请确保 Docker Buildx 配置正确"
fi
}
# 主函数
main() {
print_info "FastGateway ARM 构建脚本启动"
# 检查必要的命令
check_command "docker"
check_command "docker-compose"
# 显示系统信息
show_system_info
# 根据参数执行相应操作
case "${1:-help}" in
"build")
build_arm_image
;;
"push")
push_image
;;
"compose")
build_with_compose
;;
"run")
run_arm_container
;;
"cleanup")
cleanup
;;
"all")
cleanup
build_arm_image
run_arm_container
;;
"help"|*)
show_help
;;
esac
print_success "操作完成"
}
# 脚本入口点
main "$@"
-17
View File
@@ -1,17 +0,0 @@
#!/bin/bash
# 简单的 ARM 构建脚本
set -e
# 清理输出目录
rm -rf ./output
# 发布 ARM 版本
dotnet publish src/FastGateway.Service/FastGateway.Service.csproj \
--configuration Release \
--runtime linux-arm64 \
--output ./output \
--self-contained true \
/p:PublishSingleFile=true
echo "构建完成,输出目录: ./output"
+224
View File
@@ -0,0 +1,224 @@
@echo off
REM ========================================
REM FastGateway 构建脚本
REM 功能: 构建前端, 构建后端, 构建TunnelClient, 将前端dist复制到后端wwwroot
REM ========================================
setlocal enabledelayedexpansion
REM 设置颜色输出
REM 绿色: 0A, 黄色: 0E, 红色: 0C
set "GREEN=[92m"
set "YELLOW=[93m"
set "RED=[91m"
set "RESET=[0m"
REM 获取脚本所在目录
set "SCRIPT_DIR=%~dp0"
set "WEB_DIR=%SCRIPT_DIR%web"
set "BACKEND_DIR=%SCRIPT_DIR%src\FastGateway"
set "TUNNEL_CLIENT_DIR=%SCRIPT_DIR%src\TunnelClient"
set "SOLUTION_FILE=%SCRIPT_DIR%FastGateway.sln"
set "BACKEND_WWWROOT=%BACKEND_DIR%\wwwroot"
set "FRONTEND_DIST=%WEB_DIR%\dist"
echo.
echo ========================================
echo FastGateway 构建开始
echo ========================================
echo.
REM 检查必要的工具
echo [*] 检查必要工具...
where dotnet >nul 2>&1
if errorlevel 1 (
echo [错误] 未找到 dotnet 命令!请确保已安装 .NET SDK
exit /b 1
)
echo [✓] dotnet 已安装
where node >nul 2>&1
if errorlevel 1 (
echo [错误] 未找到 node 命令!请确保已安装 Node.js
exit /b 1
)
echo [✓] node 已安装
where npm >nul 2>&1
if errorlevel 1 (
echo [错误] 未找到 npm 命令!请确保已安装 npm
exit /b 1
)
echo [✓] npm 已安装
echo.
REM ========================================
REM 第一步: 构建前端
REM ========================================
echo ========================================
echo 第一步: 构建前端应用
echo ========================================
echo.
if not exist "%WEB_DIR%" (
echo [错误] 前端目录不存在: %WEB_DIR%
exit /b 1
)
cd /d "%WEB_DIR%"
if errorlevel 1 (
echo [错误] 无法进入前端目录
exit /b 1
)
echo [*] 安装前端依赖...
call npm install
if errorlevel 1 (
echo [错误] 前端依赖安装失败
exit /b 1
)
echo [✓] 前端依赖安装完成
echo.
echo [*] 构建前端...
call npm run build
if errorlevel 1 (
echo [错误] 前端构建失败
exit /b 1
)
echo [✓] 前端构建完成
echo.
REM 检查dist目录
if not exist "%FRONTEND_DIST%" (
echo [错误] 前端dist目录未生成: %FRONTEND_DIST%
exit /b 1
)
echo [✓] 前端dist目录已生成
echo.
REM ========================================
REM 第二步: 清理后端旧的wwwroot
REM ========================================
echo ========================================
echo 第二步: 清理后端wwwroot目录
echo ========================================
echo.
if exist "%BACKEND_WWWROOT%" (
echo [*] 删除旧的 wwwroot 目录...
rmdir /s /q "%BACKEND_WWWROOT%"
if errorlevel 1 (
echo [警告] 删除 wwwroot 失败,继续进行...
) else (
echo [✓] 旧 wwwroot 已删除
)
) else (
echo [*] wwwroot 目录不存在,无需清理
)
echo.
REM ========================================
REM 第三步: 构建后端
REM ========================================
echo ========================================
echo 第三步: 构建后端应用
echo ========================================
echo.
cd /d "%SCRIPT_DIR%"
if errorlevel 1 (
echo [错误] 无法回到项目根目录
exit /b 1
)
echo [*] 恢复NuGet包...
dotnet restore "%SOLUTION_FILE%"
if errorlevel 1 (
echo [错误] NuGet包恢复失败
exit /b 1
)
echo [✓] NuGet包恢复完成
echo.
echo [*] 编译后端项目 (Release)...
dotnet publish "%SOLUTION_FILE%" -c Release -o "%BACKEND_DIR%\publish"
if errorlevel 1 (
echo [错误] 后端构建失败
exit /b 1
)
echo [✓] 后端构建完成
echo.
REM ========================================
REM 第四步: 复制前端dist到后端wwwroot
REM ========================================
echo ========================================
echo 第四步: 复制前端文件到后端
echo ========================================
echo.
if not exist "%BACKEND_DIR%\publish\wwwroot" (
echo [*] 创建 wwwroot 目录...
mkdir "%BACKEND_DIR%\publish\wwwroot"
if errorlevel 1 (
echo [错误] 无法创建 wwwroot 目录
exit /b 1
)
)
echo [*] 复制前端dist文件到后端wwwroot...
xcopy "%FRONTEND_DIST%\*" "%BACKEND_DIR%\publish\wwwroot\" /E /I /Y
if errorlevel 1 (
echo [错误] 复制前端文件失败
exit /b 1
)
echo [✓] 前端文件复制完成
echo.
REM ========================================
REM 第五步: 构建 TunnelClient
REM ========================================
echo ========================================
echo 第五步: 构建 TunnelClient 应用
echo ========================================
echo.
if not exist "%TUNNEL_CLIENT_DIR%" (
echo [错误] TunnelClient 目录不存在: %TUNNEL_CLIENT_DIR%
exit /b 1
)
cd /d "%SCRIPT_DIR%"
if errorlevel 1 (
echo [错误] 无法回到项目根目录
exit /b 1
)
echo [*] 编译 TunnelClient 项目 (Release)...
dotnet publish "%TUNNEL_CLIENT_DIR%\TunnelClient.csproj" -c Release -o "%TUNNEL_CLIENT_DIR%\publish"
if errorlevel 1 (
echo [错误] TunnelClient 构建失败
exit /b 1
)
echo [✓] TunnelClient 构建完成
echo.
REM ========================================
REM 构建完成
REM ========================================
echo ========================================
echo 构建成功完成!
echo ========================================
echo.
echo [✓] 前端构建: %FRONTEND_DIST%
echo [✓] 后端构建: %BACKEND_DIR%\publish
echo [✓] TunnelClient 构建: %TUNNEL_CLIENT_DIR%\publish
echo [✓] 前端文件已复制到: %BACKEND_DIR%\publish\wwwroot
echo.
echo 后端发布文件位于: %BACKEND_DIR%\publish
echo TunnelClient 发布文件位于: %TUNNEL_CLIENT_DIR%\publish
echo.
endlocal
exit /b 0