Update logic_CI.yml

This commit is contained in:
2026-01-22 10:02:58 +08:00
committed by GitHub
parent e51b11cc18
commit 6108cfaf63

View File

@@ -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 }}
# name: logic_${{ steps.set-version.outputs.build_version }}
# path: ./build/
# if-no-files-found: error
# retention-days: 1