Files
why-here/.gitea/workflows/release.yml
T
im0o 83d03a3dab
发布 skill / release (push) Successful in 12s
初始化 why-here skill 仓库
2026-08-31 15:42:46 +08:00

89 lines
2.9 KiB
YAML
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: 发布 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"