name: Go Build & Release on: push: branches: [main] workflow_dispatch: inputs: servicePort: description: '服务启动端口' required: true default: 8080 type: number # 统一权限配置(避免重复,且最小化权限) permissions: contents: write # 仅创建Release需要 actions: read # 读取Artifact需要 env: # 全局Go编译优化环境变量 CGO_ENABLED: 0 # 禁用CGO,静态编译(无系统依赖+编译更快) GO111MODULE: on # 强制启用Go module #GOPROXY: https://goproxy.cn,direct # 国内代理,加速依赖下载 GOSUMDB: off # 关闭sum校验,进一步加快依赖下载 jobs: prepare-version: runs-on: ubuntu-latest outputs: build_version: ${{ steps.set-hash-version.outputs.version }} steps: - uses: actions/checkout@v4 with: fetch-depth: 1 # 仅拉取最新提交,减少克隆时间 - name: Set commit hash as version id: set-hash-version run: | # 简化版本生成命令,减少管道操作 VERSION="v$(git rev-parse --short=8 HEAD)" echo "version=$VERSION" >> $GITHUB_OUTPUT 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%+ with: path: | ~/go/pkg/mod # Go mod依赖缓存 ~/.cache/go-build # Go编译缓存(新增,大幅加快二次编译) key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }} # 包含sum文件,缓存更精准 restore-keys: | ${{ runner.os }}-go- fail-on-cache-miss: false # 缓存未命中也不中断 # 核心优化2:升级Go版本工具到v5 + 预下载依赖 - name: Set up Go 1.25 uses: actions/setup-go@v5 # 升级到v5,支持更多优化 with: go-version: '1.25' cache: true # 自动缓存Go依赖(和上面的缓存互补,双重保障) # 核心优化3:提前下载所有依赖,避免编译时边下载边编译 - name: 预下载Go依赖 run: go mod download -x # -x显示下载过程,便于排查 shell: bash # 核心优化4:编译参数极致优化(速度+体积双提升) - name: 编译logic服务(加速版) run: | mkdir -p build # 编译优化参数说明: # -p=4:并行编译(适配ubuntu-latest的2核CPU,提升编译速度) # -trimpath:移除文件路径信息(减小体积+加快编译) # -buildvcs=false:禁用版本控制信息(加快编译) # ldflags优化:-s(移除符号表)、-w(移除调试信息)、-buildid=(去掉buildid) go build -v \ -p=4 \ -trimpath \ -buildvcs=false \ -ldflags "-s -w -buildid= -extldflags '-static'" \ -o ./build/logic_${{ needs.prepare-version.outputs.build_version }} \ ./logic shell: bash # 优化七牛云上传:指定远程路径,避免根目录混乱,加快上传 - name: 上传到七牛云 uses: cumt-robin/upload-to-qiniu-action@v1 with: access_key: ${{ secrets.QINIU_AK }} secret_key: ${{ secrets.QINIU_SK }} bucket: ${{ secrets.QINIU_BUCKET_NAME }} region: z2 local_dir: build remote_dir: releases/ # 新增:统一放到releases目录,便于管理 overwrite: true # 覆盖同名文件,避免上传失败 # 优化Artifact上传:增加校验,确保产物存在 - name: Upload Build 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 }}