chore: gitea actions

This commit is contained in:
2026-01-30 13:23:51 +08:00
parent 76226a32c9
commit fc0b363a33
11 changed files with 347 additions and 7 deletions

View File

@@ -0,0 +1,60 @@
name: Get Version
description: 从 package.json 读取版本号,与最新 tag 对比决定使用哪个版本
outputs:
version:
description: 最终确定的版本号 (带 v 前缀)
value: ${{ steps.get_version.outputs.version }}
runs:
using: composite
steps:
- name: Get version from package.json
id: get_version
shell: bash
run: |
PKG_VERSION=$(node -p "require('./package.json').version")
echo "Package.json version: ${PKG_VERSION}"
# 获取最新的tag按版本号排序
LATEST_TAG=$(git ls-remote --tags origin 'refs/tags/v*' 2>/dev/null | sed 's/.*refs\/tags\///' | sed 's/\^{}//' | sort -V | tail -n 1 || echo "")
echo "Latest tag: ${LATEST_TAG}"
# 版本比较函数
version_compare() {
# 返回: 0 = 相等, 1 = v1 > v2, 2 = v1 < v2
if [[ "$1" == "$2" ]]; then echo 0; return; fi
local IFS=.
local i v1=($1) v2=($2)
for ((i=0; i<${#v1[@]} || i<${#v2[@]}; i++)); do
local n1=${v1[i]:-0} n2=${v2[i]:-0}
if ((n1 > n2)); then echo 1; return; fi
if ((n1 < n2)); then echo 2; return; fi
done
echo 0
}
if [[ -z "${LATEST_TAG}" ]]; then
# 没有任何tag直接使用package.json版本
NEW_TAG="v${PKG_VERSION}"
echo "No existing tags, using package.json version: ${NEW_TAG}"
else
# 去掉v前缀进行比较
LATEST_VERSION="${LATEST_TAG#v}"
COMPARE_RESULT=$(version_compare "${PKG_VERSION}" "${LATEST_VERSION}")
if [[ "${COMPARE_RESULT}" == "1" ]]; then
# package.json版本更大使用它
NEW_TAG="v${PKG_VERSION}"
echo "Package.json version is greater, using: ${NEW_TAG}"
else
# 最新tag版本更大或相等在其基础上递增patch
IFS='.' read -r MAJOR MINOR PATCH <<< "${LATEST_VERSION}"
PATCH=$((PATCH + 1))
NEW_TAG="v${MAJOR}.${MINOR}.${PATCH}"
echo "Incrementing from latest tag, new version: ${NEW_TAG}"
fi
fi
echo "version=${NEW_TAG}" >> $GITHUB_OUTPUT
echo "Final Version: ${NEW_TAG}"

View File

@@ -0,0 +1,124 @@
name: WeChat Work Notification
description: 发送企业微信群机器人通知
author: Your Team
inputs:
webhook_url:
description: 企业微信群机器人 Webhook URL
required: true
status:
description: 构建状态 (success/failure/cancelled)
required: true
default: success
title:
description: 通知标题
required: true
repository:
description: 仓库名称
required: false
default: ${{ github.repository }}
branch:
description: 分支名称
required: false
default: ''
version:
description: 版本号
required: false
default: ''
actor:
description: 构建触发人
required: false
default: ${{ github.actor }}
run_number:
description: 运行序号
required: false
default: ${{ github.run_number }}
run_url:
description: 运行详情 URL
required: false
default: ''
failed_step:
description: 失败的步骤名称
required: false
default: ''
extra_content:
description: 额外的通知内容 (markdown 格式)
required: false
default: ''
runs:
using: composite
steps:
- name: Send WeChat Work Notification
shell: bash
run: |
# 设置状态图标和文本
if [ "${{ inputs.status }}" = "success" ]; then
STATUS_ICON="✅"
STATUS_TEXT="成功"
elif [ "${{ inputs.status }}" = "cancelled" ]; then
STATUS_ICON="⚠️"
STATUS_TEXT="已取消"
else
STATUS_ICON="❌"
STATUS_TEXT="失败"
fi
# 构建通知内容
CONTENT="## ${STATUS_ICON} ${{ inputs.title }} ${STATUS_TEXT}"
# 添加仓库信息
if [ -n "${{ inputs.repository }}" ]; then
CONTENT="${CONTENT}\n> **仓库**: ${{ inputs.repository }}"
fi
# 添加分支信息
if [ -n "${{ inputs.branch }}" ]; then
CONTENT="${CONTENT}\n> **分支**: ${{ inputs.branch }}"
fi
# 添加版本信息
if [ -n "${{ inputs.version }}" ]; then
CONTENT="${CONTENT}\n> **版本**: ${{ inputs.version }}"
fi
# 添加构建人
if [ -n "${{ inputs.actor }}" ]; then
CONTENT="${CONTENT}\n> **构建人**: ${{ inputs.actor }}"
fi
# 添加运行序号
if [ -n "${{ inputs.run_number }}" ]; then
CONTENT="${CONTENT}\n> **运行序号**: #${{ inputs.run_number }}"
fi
# 添加失败步骤信息
if [ -n "${{ inputs.failed_step }}" ]; then
CONTENT="${CONTENT}\n> **失败步骤**: ${{ inputs.failed_step }}"
fi
# 添加额外内容
if [ -n "${{ inputs.extra_content }}" ]; then
CONTENT="${CONTENT}\n> ${{ inputs.extra_content }}"
fi
# 添加查看详情链接
if [ -n "${{ inputs.run_url }}" ]; then
CONTENT="${CONTENT}\n> [查看详情](${{ inputs.run_url }})"
fi
echo "========== 企业微信通知 =========="
echo "状态: ${STATUS_ICON} ${STATUS_TEXT}"
echo "标题: ${{ inputs.title }}"
echo "Webhook URL: ${{ inputs.webhook_url }}"
echo "=================================="
# 发送通知
curl -s -X POST "${{ inputs.webhook_url }}" \
-H "Content-Type: application/json" \
-d "{
\"msgtype\": \"markdown\",
\"markdown\": {
\"content\": \"${CONTENT}\"
}
}"

View File

@@ -0,0 +1,58 @@
name: Deploy Dev
on:
workflow_dispatch:
inputs:
# 分支
target_branch:
description: 请输入要发布的分支名称
required: true
default: dev
type: string
jobs:
build-and-deploy:
runs-on: node-22
steps:
- uses: https://gitee.com/youtellme/checkout@v4
with:
ref: ${{ inputs.target_branch }}
fetch-depth: 1
- name: Setup pnpm
id: setup_pnpm
uses: https://gitee.com/youtellme/pnpm-action-setup@v4
with:
version: 9
- name: Install dependencies
id: install
run: |
rm -rf pnpm-lock.yaml node_modules
pnpm install
- run: pnpm run build:web
# 压缩 dist 文件夹
- name: zip dist folder
run: |
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BRANCH_NAME="${{ inputs.target_branch }}"
SAFE_BRANCH_NAME="${BRANCH_NAME//\//_}"
mkdir -p zip-output
zip -r -q zip-output/cslab-dcs-web_${SAFE_BRANCH_NAME}_${TIMESTAMP}.zip apps/web/dist/
ls -lh zip-output/
# 上传 zip 文件到 RustFS
- name: Upload zip to RustFS (S3)
uses: jakejarvis/s3-sync-action@master
with:
args: --acl public-read
env:
AWS_S3_BUCKET: ${{ vars.RUSTFS_AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ vars.RUSTFS_ACCESS_KEY }}
AWS_SECRET_ACCESS_KEY: ${{ vars.RUSTFS_SECRET_KEY }}
AWS_REGION: us-east-1
AWS_S3_ENDPOINT: ${{ vars.RUSTFS_AWS_S3_ENDPOINT }}
SOURCE_DIR: zip-output