diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 10a7987..21acb73 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -1,6 +1,6 @@ name: Epic Go Build & Deploy run-name: ${{ gitea.actor }} 正在构建 Epic Go 项目 🚀 -on: +on: push: branches: [ main, master, develop ] pull_request: @@ -14,64 +14,46 @@ jobs: run: | echo "📥 检出代码到工作目录..." echo "当前目录: $(pwd)" - echo "工作目录: ${{ gitea.workspace }}" echo "仓库: ${{ gitea.repository }}" echo "分支: ${{ gitea.ref }}" echo "提交: ${{ gitea.sha }}" - - # 检查是否已经有代码 - if [ -f "go.mod" ]; then - echo "✅ 代码已存在,go.mod文件找到" - else - echo "📥 需要检出代码..." - - # 如果工作目录存在,使用它 - if [ -n "${{ gitea.workspace }}" ] && [ -d "${{ gitea.workspace }}" ]; then - echo "切换到工作目录: ${{ gitea.workspace }}" - cd "${{ gitea.workspace }}" - else - echo "工作目录不存在,尝试检出到当前目录" - # 尝试从git仓库检出 - if [ -n "${{ gitea.repository }}" ]; then - echo "检出仓库: ${{ gitea.repository }}" - git clone "https://gitea.com/${{ gitea.repository }}.git" . - # 切换到指定分支 - if [ -n "${{ gitea.ref }}" ]; then - BRANCH_NAME=$(echo "${{ gitea.ref }}" | sed 's/refs\/heads\///') - echo "切换到分支: $BRANCH_NAME" - git checkout "$BRANCH_NAME" - fi - fi - fi - # 再次检查 - if [ -f "go.mod" ]; then - echo "✅ 代码检出成功" - else - echo "❌ 代码检出失败" - echo "当前目录内容:" - ls -la - exit 1 - fi + + # 解析分支名 + BRANCH_NAME=$(echo "${{ gitea.ref }}" | sed 's#refs/heads/##') + + # 拉取代码(使用token鉴权) + git clone --depth=1 -b "$BRANCH_NAME" "http://1c18ee1ab9a9cb291506d0c5c016a33be7d59e8c:x-oauth-basic@gitea.htoop.cn/${{ gitea.repository }}.git" . + if [ $? -ne 0 ]; then + echo "❌ 代码检出失败" + exit 1 fi - echo "最终工作目录: $(pwd)" - echo "目录内容:" + + # 校验分支 + CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) + if [ "$CURRENT_BRANCH" != "$BRANCH_NAME" ]; then + echo "❌ 检出分支与预期不符: $CURRENT_BRANCH != $BRANCH_NAME" + exit 1 + fi + + # 校验提交 + CURRENT_COMMIT=$(git rev-parse HEAD) + if [ -n "${{ gitea.sha }}" ] && [ "$CURRENT_COMMIT" != "${{ gitea.sha }}" ]; then + echo "❌ 检出提交与预期不符: $CURRENT_COMMIT != ${{ gitea.sha }}" + exit 1 + fi + + echo "✅ 代码检出成功,分支和提交校验通过" ls -la - name: 安装Go环境 run: | echo "🔧 安装Go 1.22环境..." - - # 检查是否已安装Go if command -v go &> /dev/null; then echo "✅ Go已安装: $(go version)" else echo "📥 下载并安装Go..." - - # 下载Go 1.22 - 使用国内镜像 GO_VERSION="1.22.0" GO_ARCH="linux-amd64" - - # 尝试多个国内镜像源 MIRRORS=( "https://golang.google.cn/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://mirrors.aliyun.com/golang/go${GO_VERSION}.${GO_ARCH}.tar.gz" @@ -79,9 +61,7 @@ jobs: "https://mirrors.tencent.com/go/go${GO_VERSION}.${GO_ARCH}.tar.gz" "https://go.dev/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz" ) - DOWNLOAD_SUCCESS=false - for mirror in "${MIRRORS[@]}"; do echo "尝试从镜像下载: $mirror" if wget -q --timeout=30 --tries=3 "$mirror" -O go.tar.gz; then @@ -93,31 +73,21 @@ jobs: continue fi done - if [ "$DOWNLOAD_SUCCESS" = false ]; then echo "❌ 所有镜像源下载失败" exit 1 fi - - # 解压到/usr/local echo "解压Go到/usr/local..." tar -C /usr/local -xzf go.tar.gz - - # 设置环境变量 export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go - - # 验证安装 echo "验证Go安装..." /usr/local/go/bin/go version - - # 清理下载文件 rm go.tar.gz - echo "✅ Go安装完成" fi - + - name: 检查Go环境 run: | echo "🔍 检查Go环境..." @@ -125,18 +95,14 @@ jobs: go version go env GOPATH go env GOROOT - + - name: 下载依赖 run: | echo "📦 下载Go模块依赖..." export PATH=$PATH:/usr/local/go/bin - - # 显示当前目录和文件 echo "当前工作目录: $(pwd)" echo "目录内容:" ls -la - - # 检查go.mod文件 if [ -f "go.mod" ]; then echo "✅ 找到go.mod文件" cat go.mod | head -5 @@ -144,44 +110,37 @@ jobs: echo "❌ 未找到go.mod文件" exit 1 fi - - # 设置Go模块环境 export GO111MODULE=on export GOPROXY=https://goproxy.cn,direct - echo "Go环境变量:" echo "GOPROXY: $GOPROXY" echo "GO111MODULE: $GO111MODULE" - - # 下载依赖 go mod download echo "✅ 依赖下载完成" - - # 显示下载的模块 echo "已下载的模块:" go list -m all | head -10 - + - name: 验证依赖 run: | echo "🔍 验证Go模块..." export PATH=$PATH:/usr/local/go/bin go mod verify echo "✅ 模块验证完成" - + - name: 构建项目 run: | echo "🔨 开始构建 Epic Go 项目..." export PATH=$PATH:/usr/local/go/bin go build -v -o epic-game-service main.go echo "✅ 构建完成" - + - name: 检查构建产物 run: | echo "📦 构建产物信息:" ls -la epic-game-service file epic-game-service echo "文件大小: $(du -h epic-game-service | cut -f1)" - + - name: 显示项目信息 run: | echo "📋 项目信息:" @@ -191,15 +150,13 @@ jobs: echo "构建时间: $(date)" echo "分支: ${{ gitea.ref }}" echo "提交: ${{ gitea.sha }}" - + - name: 准备部署 run: | echo "🚀 准备部署..." echo "运行器操作系统: ${{ runner.os }}" echo "工作目录: ${{ gitea.workspace }}" echo "任务状态: ${{ job.status }}" - - # 创建部署包 mkdir -p deploy cp epic-game-service deploy/ cp -r manifest deploy/