初始化 why-here skill 仓库
发布 skill / release (push) Successful in 12s

This commit is contained in:
2026-08-31 15:42:46 +08:00
commit 83d03a3dab
4 changed files with 369 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
name: 发布 skill
# 推送与 v* 匹配的 annotated tag 时,将 skill/ 目录打包为 ZIP 文件,并发布到当前仓库的 Release。
# ZIP 根目录直接包含 SKILL.md;Release 正文使用 annotated tag message。
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: 检出源代码
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 读取版本说明并打包 skill
id: pack
run: |
set -eu
tag_ref="refs/tags/$GITHUB_REF_NAME"
# actions/checkout may replace an annotated tag ref with its peeled commit
# when a branch has the same name. Fetch the full tag ref again before
# reading its object type and message.
git fetch --force origin "$tag_ref:$tag_ref"
object_type=$(git cat-file -t "$tag_ref")
test "$object_type" = tag || {
echo "发布 tag 必须是 annotated tag,当前对象类型:$object_type"
exit 1
}
git for-each-ref "$tag_ref" --format='%(contents)' > release-message.md
test -s release-message.md || {
echo "annotated tag message 为空"
exit 1
}
name=$(sed -n 's/^name:[[:space:]]*//p' skill/SKILL.md | head -1)
test -n "$name" || {
echo "无法从 skill/SKILL.md 读取 name 字段"
exit 1
}
(cd skill && zip -qr "../$name.zip" .)
echo "name=$name" >> "$GITHUB_OUTPUT"
echo "已生成 ZIP 文件:$name.zip"
echo "ZIP 文件清单:"
unzip -l "$name.zip"
- name: 创建 Release 并上传附件
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }}
TAG: ${{ github.ref_name }}
ZIP: ${{ steps.pack.outputs.name }}.zip
run: |
set -eu
payload=$(python3 - <<'PY'
import json
import os
from pathlib import Path
print(json.dumps({
"tag_name": os.environ["TAG"],
"name": os.environ["TAG"],
"body": Path("release-message.md").read_text(encoding="utf-8").rstrip(),
}))
PY
)
response=$(curl -fsS -X POST "$API/releases" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d "$payload")
id=$(printf '%s' "$response" | python3 -c 'import json, sys; print(json.load(sys.stdin)["id"])')
curl -fsS -X POST "$API/releases/$id/assets?name=$ZIP" \
-H "Authorization: token $TOKEN" \
-F "attachment=@$ZIP"
echo "已发布 Release:$TAG"
echo "已上传附件:$ZIP"