This commit is contained in:
2026-04-08 21:26:18 +08:00
commit 8fdc7ac0c3
401 changed files with 53093 additions and 0 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}\"
}
}"