Files
bl/.github/workflows/logic_CI.yml
2025-10-05 07:29:35 +00:00

115 lines
4.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:
workflow_dispatch: # 仅支持手动触发
inputs:
servicePort: # 手动设置服务启动端口必填
description: '服务启动序号'
required: true
type: number
jobs:
# 生成随机版本号8位字母数字作为screen会话名核心标识
prepare-version:
runs-on: ubuntu-latest
outputs:
build_version: ${{ steps.set-random-version.outputs.version }}
steps:
- name: Set random build version
id: set-random-version
run: |
# 生成8位随机字母数字大小写混合确保版本与会话名唯一性
RANDOM_SUFFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)
echo "version=v$RANDOM_SUFFIX" >> $GITHUB_OUTPUT
build:
needs: prepare-version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 缓存Go依赖
id: go-cache
uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod') }}
restore-keys: |
${{ runner.os }}-go-
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.20'
- name: 编译logic服务
run: go build -o ./public/logic_${{ needs.prepare-version.outputs.build_version }} -v ./logic
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
name: logic_${{ needs.prepare-version.outputs.build_version }}
path: ./public/logic_${{ needs.prepare-version.outputs.build_version }}
- name: 推送到服务器并通过screen启动服务会话名无端口
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.BLAZING }}
REMOTE_HOST: "122.10.117.123"
REMOTE_USER: "root"
SOURCE: "public/"
TARGET: "/home/"
ARGS: "-avz --chown=git:git"
# 核心调整会话名仅用随机版本号格式logic-{版本号} logic-v7aB9x2zF
SCRIPT_AFTER: |
# 定义screen会话名仅含服务标识+随机版本号无端口
SCREEN_NAME="logic-${{ needs.prepare-version.outputs.build_version }}"
# 停止同名旧会话仅清理当前版本不影响其他版本
screen -S $SCREEN_NAME -X quit 2>/dev/null || true
# 启动服务并传入-port参数
screen -dmS $SCREEN_NAME /home/logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort }}
# 输出完整关联信息方便管理会话名端口版本一一对应
echo "======================================"
echo "服务启动成功!"
echo "Screen会话名$SCREEN_NAME"
echo "服务端口:${{ github.event.inputs.servicePort }}"
echo "对应版本:${{ needs.prepare-version.outputs.build_version }}"
echo "管理命令:"
echo " - 进入会话screen -r $SCREEN_NAME"
echo " - 查看所有会话screen -ls"
echo " - 停止服务screen -S $SCREEN_NAME -X quit"
echo "======================================"
# 自动创建GitHub Release同步会话名与端口关联关系
create-release:
needs: [prepare-version, build]
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Download build artifact
uses: actions/download-artifact@v4
with:
name: logic_${{ needs.prepare-version.outputs.build_version }}
path: ./public
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
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.inputs.servicePort }}
- Screen会话名: logic-${{ needs.prepare-version.outputs.build_version }}
- 可执行文件: logic_${{ needs.prepare-version.outputs.build_version }}
- 启动命令: ./logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort }}
files: ./public/logic_${{ needs.prepare-version.outputs.build_version }}
draft: false
prerelease: false