diff --git a/.github/workflows/logic_CI.yml b/.github/workflows/logic_CI.yml index 3459082c9..a49db325a 100644 --- a/.github/workflows/logic_CI.yml +++ b/.github/workflows/logic_CI.yml @@ -1,5 +1,4 @@ name: Go Build & Release - on: push: branches: [main] @@ -11,88 +10,85 @@ on: default: 8080 type: number -# 统一权限配置(避免重复,且最小化权限) +# 统一最小化权限(仅保留必要的actions/read,删除contents/write) permissions: - contents: write # 仅创建Release需要 - actions: read # 读取Artifact需要 + actions: read env: - # 全局Go编译优化环境变量 - CGO_ENABLED: 0 # 禁用CGO,静态编译(无系统依赖+编译更快) - GO111MODULE: on # 强制启用Go module - #GOPROXY: https://goproxy.cn,direct # 国内代理,加速依赖下载 - GOSUMDB: off # 关闭sum校验,进一步加快依赖下载 + # Go编译全局优化变量 + CGO_ENABLED: 0 + GO111MODULE: on + GOSUMDB: off + # 七牛云远程目录(统一管理,可按需修改) + QINIU_REMOTE_DIR: releases/ jobs: - prepare-version: + build-and-upload-qiniu: runs-on: ubuntu-latest - outputs: - build_version: ${{ steps.set-hash-version.outputs.version }} steps: - uses: actions/checkout@v4 with: - fetch-depth: 1 # 仅拉取最新提交,减少克隆时间 + fetch-depth: 1 # 仅拉取最新提交,加速克隆 - - name: Set commit hash as version - id: set-hash-version + # 生成版本号(短Commit Hash,合并原prepare-version任务) + - name: 生成构建版本号 + id: set-version run: | - # 简化版本生成命令,减少管道操作 VERSION="v$(git rev-parse --short=8 HEAD)" - echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "build_version=${VERSION}" >> $GITHUB_OUTPUT + echo "构建版本号:${VERSION}" >> $GITHUB_STEP_SUMMARY shell: bash - build: - needs: prepare-version - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 1 # 最小化克隆 - - # 核心优化1:升级缓存到v4 + 精准缓存Go依赖 - - name: 缓存Go依赖(优化版) - uses: actions/cache@v4 # 升级到v4,缓存效率提升30%+ + # 缓存Go依赖(v4+双缓存,编译缓存+mod缓存,极致加速) + - name: 缓存Go依赖 + uses: actions/cache@v4 with: path: | - ~/go/pkg/mod # Go mod依赖缓存 - ~/.cache/go-build # Go编译缓存(新增,大幅加快二次编译) - key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }} # 包含sum文件,缓存更精准 + ~/go/pkg/mod + ~/.cache/go-build + key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - fail-on-cache-miss: false # 缓存未命中也不中断 + fail-on-cache-miss: false - # 核心优化2:升级Go版本工具到v5 + 预下载依赖 - - name: Set up Go 1.25 - uses: actions/setup-go@v5 # 升级到v5,支持更多优化 + # 配置Go环境(v5+自动缓存,双重保障) + - name: 配置Go 1.25环境 + uses: actions/setup-go@v5 with: go-version: '1.25' - cache: true # 自动缓存Go依赖(和上面的缓存互补,双重保障) + cache: true - # 核心优化3:提前下载所有依赖,避免编译时边下载边编译 + # 预下载依赖,避免编译时边下载边构建 - name: 预下载Go依赖 - run: go mod download -x # -x显示下载过程,便于排查 + run: go mod download -x shell: bash - # 核心优化4:编译参数极致优化(速度+体积双提升) - - name: 编译logic服务(加速版) + # 编译Go服务(极致优化参数,保留所有原优化) + - name: 编译Logic服务 run: | mkdir -p build - # 编译优化参数说明: - # -p=4:并行编译(适配ubuntu-latest的2核CPU,提升编译速度) - # -trimpath:移除文件路径信息(减小体积+加快编译) - # -buildvcs=false:禁用版本控制信息(加快编译) - # ldflags优化:-s(移除符号表)、-w(移除调试信息)、-buildid=(去掉buildid) + BIN_NAME="logic_${{ steps.set-version.outputs.build_version }}" + # 编译参数:并行+瘦身+静态编译 go build -v \ -p=4 \ -trimpath \ -buildvcs=false \ -ldflags "-s -w -buildid= -extldflags '-static'" \ - -o ./build/logic_${{ needs.prepare-version.outputs.build_version }} \ + -o ./build/${BIN_NAME} \ ./logic + # 校验编译产物是否存在 + if [ ! -f ./build/${BIN_NAME} ]; then + echo "编译失败:产物${BIN_NAME}不存在" + exit 1 + fi + # 打印产物信息 + ls -lh ./build/ + echo "产物名称:${BIN_NAME}" >> $GITHUB_STEP_SUMMARY shell: bash - # 优化七牛云上传:指定远程路径,避免根目录混乱,加快上传 - - name: 上传到七牛云 + # 上传到七牛云(核心步骤,增加校验+日志+CDN地址打印) + - name: 上传产物到七牛云 + id: qiniu-upload uses: cumt-robin/upload-to-qiniu-action@v1 with: access_key: ${{ secrets.QINIU_AK }} @@ -100,75 +96,40 @@ jobs: bucket: ${{ secrets.QINIU_BUCKET_NAME }} region: z2 local_dir: build - remote_dir: releases/ # 新增:统一放到releases目录,便于管理 - overwrite: true # 覆盖同名文件,避免上传失败 + remote_dir: ${{ env.QINIU_REMOTE_DIR }} + overwrite: true # 覆盖同名文件,避免版本冲突 - # 优化Artifact上传:增加校验,确保产物存在 - # - name: Upload Build Artifact + # 上传成功后:打印CDN访问地址+构建信息,写入步骤摘要 + - name: 打印构建&分发信息 + run: | + BIN_NAME="logic_${{ steps.set-version.outputs.build_version }}" + CDN_URL="https://${{ secrets.QINIU_CDN_DOMAIN }}/${{ env.QINIU_REMOTE_DIR }}${BIN_NAME}" + # 打印到控制台 + echo "======================================" + echo "✅ 构建&七牛云上传完成!" + echo "版本号:${{ steps.set-version.outputs.build_version }}" + echo "触发方式:${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }}" + echo "服务端口:${{ github.event.inputs.servicePort || 8080 }}" + echo "产物名称:${BIN_NAME}" + echo "七牛云CDN地址:${CDN_URL}" + echo "启动命令:./${BIN_NAME} -port=${{ github.event.inputs.servicePort || 8080 }}" + echo "对应Commit:${{ github.sha }}" + echo "======================================" + # 写入GitHub步骤摘要(页面顶部可见,更直观) + echo "## ✅ 构建&分发完成" >> $GITHUB_STEP_SUMMARY + echo "- 版本号:${{ steps.set-version.outputs.build_version }}" >> $GITHUB_STEP_SUMMARY + echo "- 触发方式:${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }}" >> $GITHUB_STEP_SUMMARY + echo "- 服务端口:${{ github.event.inputs.servicePort || 8080 }}" >> $GITHUB_STEP_SUMMARY + echo "- 七牛云CDN地址:[${CDN_URL}](${CDN_URL})" >> $GITHUB_STEP_SUMMARY + echo "- 启动命令:`./${BIN_NAME} -port=${{ github.event.inputs.servicePort || 8080 }}`" >> $GITHUB_STEP_SUMMARY + echo "- 对应Commit:[${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY + shell: bash + + # 可选:保留构建产物为Artifact(按需开启,保留1天,方便临时下载) + # - name: 上传产物为Artifact # uses: actions/upload-artifact@v4 # with: - # name: logic_${{ needs.prepare-version.outputs.build_version }} - # path: ./build/logic_${{ needs.prepare-version.outputs.build_version }} - # if-no-files-found: error # 产物不存在则报错,避免空上传 - # retention-days: 1 # 缩短保留时间,节省空间 - - # 注释的SSH部署步骤:保留但优化了变量引用(兼容push触发) - # - name: 推送到服务器并通过screen启动服务 - # uses: easingthemes/ssh-deploy@main - # env: - # SSH_PRIVATE_KEY: ${{ secrets.BLAZING }} - # REMOTE_HOST: "125.208.20.223" - # REMOTE_PORT: 22916 - # REMOTE_USER: "root" - # SOURCE: "logic_${{ needs.prepare-version.outputs.build_version }}" - # TARGET: "/home/" - # ARGS: "-avz --chown=git:git" - # SCRIPT_AFTER: | - # PORT=${{ github.event.inputs.servicePort || 8080 }} # 兼容push触发的默认端口 - # SCREEN_NAME="logic-${{ needs.prepare-version.outputs.build_version }}" - # screen -S $SCREEN_NAME -X quit 2>/dev/null || true - # screen -dmS $SCREEN_NAME /home/logic_${{ needs.prepare-version.outputs.build_version }} -port=$PORT - # echo "======================================" - # echo "服务启动成功!" - # echo "Screen会话名:$SCREEN_NAME" - # echo "服务端口:$PORT" - # echo "对应Commit:${{ github.sha }}" - # echo "七牛云下载地址: https://${{ secrets.QINIU_CDN_DOMAIN }}/releases/logic_${{ needs.prepare-version.outputs.build_version }}" - # echo "管理命令:" - # echo " - 进入会话:screen -r $SCREEN_NAME" - # echo " - 查看所有会话:screen -ls" - # echo " - 停止服务:screen -S $SCREEN_NAME -X quit" - # echo "======================================" - - create-release: - needs: [prepare-version, build] - runs-on: ubuntu-latest - steps: - - name: 下载构建产物 - uses: actions/download-artifact@v4 - with: - name: logic_${{ needs.prepare-version.outputs.build_version }} - path: . - if-no-files-found: error # 产物不存在则报错 - - # 核心优化5:兼容push触发(无手动端口参数)+ 简化Release描述 - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 # 升级到v2,更稳定 - with: - tag_name: ${{ needs.prepare-version.outputs.build_version }} - name: Release ${{ needs.prepare-version.outputs.build_version }} - body: | - ## 自动构建发布 - - 版本号: ${{ needs.prepare-version.outputs.build_version }} - - 触发方式: ${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }} - - 服务端口: ${{ github.event.inputs.servicePort || 8080 }} # 兼容push触发的默认端口 - - Screen会话名: logic-${{ needs.prepare-version.outputs.build_version }} - - 对应Commit: ${{ github.sha }} - - 可执行文件: logic_${{ needs.prepare-version.outputs.build_version }} - - 启动命令: ./logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort || 8080 }} - - 七牛云下载地址: https://${{ secrets.QINIU_CDN_DOMAIN }}/releases/logic_${{ needs.prepare-version.outputs.build_version }} - files: logic_${{ needs.prepare-version.outputs.build_version }} - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + # name: logic_${{ steps.set-version.outputs.build_version }} + # path: ./build/ + # if-no-files-found: error + # retention-days: 1