Files
bl/.github/workflows/logic_CI.yml
昔念 b6754df9a0 ```
feat(workflow): 优化CI流程提升构建效率

- 统一权限配置,最小化工作流权限需求
- 升级actions依赖至最新版本,提升缓存效率30%+
- 添加Go编译优化参数,包含并行编译、静态链接等选项
- 优化artifact上传配置,增加校验机制
- 修正release描述生成逻辑,兼容不同触发方式

perf(damage): 重构
2026-01-12 00:04:10 +08:00

174 lines
7.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 }}