From bea22d5e9eaeb6c7f39a45c08353c3e08e0f3078 Mon Sep 17 00:00:00 2001 From: chendelian <116870791@qq.com> Date: Tue, 24 Mar 2026 16:14:06 +0800 Subject: [PATCH] ci: enforce tag-based version and strict sync checks Use Git tag as release version, validate SKILL.md version consistency, and fail workflow when API business code is not success. --- .github/workflows/release_skill.yaml | 40 +++++++++++++++++++++++++--- SKILL.md | 2 +- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release_skill.yaml b/.github/workflows/release_skill.yaml index 05ea84f..b6193fc 100644 --- a/.github/workflows/release_skill.yaml +++ b/.github/workflows/release_skill.yaml @@ -30,8 +30,26 @@ jobs: import frontmatter, os, json, shutil post = frontmatter.load('SKILL.md') metadata = post.metadata - slug = metadata['name'] - version = metadata['version'] + # slug 优先从 openclaw.slug 读取,兼容历史用 name + openclaw_meta = metadata.get('metadata', {}).get('openclaw', {}) + slug = (openclaw_meta.get('slug') or metadata.get('slug') or metadata.get('name') or '').strip() + if not slug: + raise Exception('SKILL.md 缺少 slug/name,无法构建发布包') + + # 以 Git Tag 为准(严格模式) + ref_name = (os.environ.get('GITHUB_REF_NAME') or '').strip() + if not ref_name: + ref_name = (os.environ.get('GITHUB_REF') or '').strip().split('/')[-1] + if not ref_name.startswith('v'): + raise Exception(f'非法标签: {ref_name},要求以 v 开头,例如 v1.0.10') + + version = ref_name.lstrip('v') + skill_version = str(metadata.get('version') or '').strip() + if skill_version != version: + raise Exception(f'SKILL.md 版本({skill_version})与 Git Tag 版本({version})不一致') + + # 统一覆盖,确保后续输出与上传完全一致 + metadata['version'] = version # 安全写入输出 with open(os.environ['GITHUB_OUTPUT'], 'a') as f: f.write(f'slug={slug}\n') @@ -53,7 +71,14 @@ jobs: url = 'https://jc2009.com/api/skill/update' res = requests.post(url, json=metadata) print(f'DB Sync Result: {res.text}') - if res.status_code != 200: exit(1) + if res.status_code != 200: + exit(1) + try: + payload = res.json() + except Exception: + exit(1) + if payload.get('code') != 200: + exit(1) " # 6. 上传物理包 @@ -71,5 +96,12 @@ jobs: with open(f'{slug}.zip', 'rb') as f: res = requests.post(url, data=payload, files={'file': f}) print(f'Upload Result: {res.text}') - if res.status_code != 200: exit(1) + if res.status_code != 200: + exit(1) + try: + payload = res.json() + except Exception: + exit(1) + if payload.get('code') != 200: + exit(1) " diff --git a/SKILL.md b/SKILL.md index c5c499f..5ae6188 100644 --- a/SKILL.md +++ b/SKILL.md @@ -14,7 +14,7 @@ allowed-tools: - bash --- -# 账号管理器 +# 账号管理 ## 使用时机