all
This commit is contained in:
60
.gitea/actions/get-version/action.yaml
Normal file
60
.gitea/actions/get-version/action.yaml
Normal 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}"
|
||||
124
.gitea/actions/wecom-notification/action.yaml
Normal file
124
.gitea/actions/wecom-notification/action.yaml
Normal 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}\"
|
||||
}
|
||||
}"
|
||||
Reference in New Issue
Block a user