mcpField
R
release-code

release-code

github.com/a-green-hand-jack开发45 次安装
代码仓库

关于 release-code

release-code 是用于准备公开发布研究代码仓库的技能。它指导安全与整洁度审计、补齐发布文件、版本打标签及可选的 GitHub 发布,并设置用户确认环节。

主要功能

  1. 01扫描密钥和敏感文件
  2. 02检查仓库文件与工具链门槛
  3. 03生成缺失的 README、许可证和引用文件
  4. 04审核发布前检查清单
  5. 05标记版本并可选发布 GitHub Release

适用场景

  1. 01发布前审计研究代码仓库
  2. 02补充缺失的发布文档和元数据
  3. 03准备匿名会议投稿代码包
  4. 04经确认创建版本标签和 GitHub Release

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/a-green-hand-jack/ml-research-skills --skill release-code

安装后在 Claude Code 中输入/release-code确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

checklist.md
templates/
CITATION.cff
README_ml_paper.md

详细介绍

发布代码

为公开发布准备研究代码仓库:审查安全问题,生成缺失的资源(README、引用信息、许可证),标记版本并创建 GitHub release。

发布流程以项目工具链检查作为依据,而不是装饰。优先运行不会修改文件的检查。只有在用户要求或项目策略要求时,才运行会修改文件的格式化或修复命令,随后审查差异。

技能目录结构

<installed-skill-dir>/
├── SKILL.md
├── checklist.md                      # Detailed item-by-item checklist reference
└── templates/
    ├── README_ml_paper.md            # README template for ML paper repos
    └── CITATION.cff                  # Citation file template

操作步骤

1. 了解发布背景

在一条消息中询问用户:

  1. 论文信息:标题、作者、会议/年份(例如“CVPR 2025”)、arXiv ID 或 URL(如有)
  2. 发布类型:完整代码发布 / 最小可复现软件包 / 匿名会议投稿?
  3. 许可证:MIT / Apache-2.0 / CC-BY-4.0 / 其他?(默认:代码使用 MIT,模型/数据使用 CC-BY-4.0)
  4. 包含内容:训练代码?评估?预训练权重?数据集?演示?
  5. 版本标签:例如 v1.0.0(首次发布时默认使用 v1.0.0)
  6. GitHub release?:是否创建附带发布说明的 GitHub release?(是/否)
  7. 模型权重:是否提供预训练权重?如果有,将托管在哪里?(HuggingFace Hub / Google Drive / 项目页面)
2. 审查仓库

运行以下检查(静默读取输出,向用户报告摘要):

2a. 安全扫描 — 密钥和凭证
# Check for common secret patterns
git -C "$(git rev-parse --show-toplevel)" log --all --oneline | head -5
grep -rI --include="*.py" --include="*.yaml" --include="*.json" --include="*.env" \
  -E "(password|secret|api_key|token|credential|private_key)\s*=\s*['\"][^'\"]{6}" \
  "$(git rev-parse --show-toplevel)" 2>/dev/null | head -20

# Prefer dedicated scanners when available
command -v gitleaks >/dev/null && gitleaks dir --no-banner --redact "$(git rev-parse --show-toplevel)"
command -v detect-secrets >/dev/null && detect-secrets scan "$(git rev-parse --show-toplevel)"
2b. 大文件检查
# Find large files that shouldn't be in the repo
find "$(git rev-parse --show-toplevel)" -type f -size +50M \
  ! -path "*/.git/*" ! -path "*/outputs/*" ! -path "*/wandb/*" 2>/dev/null
2c. 敏感文件模式
# Check for files that should not be public
find "$(git rev-parse --show-toplevel)" -type f \( \
  -name ".env" -o -name "*.pem" -o -name "*.key" -o \
  -name "secrets.yaml" -o -name "credentials.json" \
  \) ! -path "*/.git/*" 2>/dev/null
2d. 检查现有内容
ROOT="$(git rev-parse --show-toplevel)"
for f in README.md LICENSE CITATION.cff .gitignore requirements.txt pyproject.toml setup.py; do
  [ -f "$ROOT/$f" ] && echo "EXISTS: $f" || echo "MISSING: $f"
done
2e. Git 状态
git -C "$(git rev-parse --show-toplevel)" status --short
git -C "$(git rev-parse --show-toplevel)" log --oneline -5
2f. 工具链和源代码规范检查

运行可用的非修改性检查,并明确报告跳过的工具:

ROOT="$(git rev-parse --show-toplevel)"
command -v pre-commit >/dev/null && pre-commit run --all-files || true
command -v shellcheck >/dev/null && find "$ROOT" -name "*.sh" -not -path "*/.git/*" -print0 | xargs -0 shellcheck || true
command -v shfmt >/dev/null && shfmt -d "$ROOT" || true
command -v actionlint >/dev/null && actionlint "$ROOT/.github/workflows"/*.yml "$ROOT/.github/workflows"/*.yaml 2>/dev/null || true
command -v nbstripout >/dev/null && find "$ROOT" -name "*.ipynb" -not -path "*/.git/*" -print0 | xargs -0 nbstripout --dry-run || true
command -v lychee >/dev/null && lychee --no-progress "$ROOT/README.md" "$ROOT/docs/**/*.md" || true
command -v taplo >/dev/null && find "$ROOT" -name "*.toml" -not -path "*/.git/*" -print0 | xargs -0 taplo fmt --check || true
command -v yamllint >/dev/null && yamllint "$ROOT" || true

将未通过的必需检查视为发布阻碍。除非项目策略要求,否则将缺失的可选工具视为已跳过。

以清单形式向用户报告审查结果:

  • 🔴 阻碍项 — 发布前必须修复(发现密钥、凭证或大型二进制文件)
  • 🟡 警告 — 建议处理(缺少 README、没有许可证、没有 .gitignore、跳过了可选的规范检查)
  • 🟢 正常 — 状态良好

请用户先修复所有阻碍项,再继续。

3. 生成缺失文件

根据 2d 审查结果,生成缺失文件。覆盖现有文件前,先询问用户的偏好。

LICENSE

如果缺失,则生成适当的许可证文件:

  • MIT(ML 代码中最常用):
    MIT License
    Copyright (c) {YEAR} {AUTHORS}
    [standard MIT text]
    
  • Apache-2.0:使用标准 Apache 2.0 文本
  • CC-BY-4.0:如果用户指定,则用于数据/模型

写入 {PROJECT_ROOT}/LICENSE。

CITATION.cff

从 <installed-skill-dir>/templates/CITATION.cff 读取模板。

填写占位符:

占位符值
{TITLE}论文标题
{AUTHORS_LIST}以 YAML 列表格式填写作者(参见模板格式)
{YEAR}发表年份
{VENUE}会议/期刊名称
{ARXIV_ID}arXiv ID(如有)
{GITHUB_REPO}github.com/username/repo
{DATE_RELEASED}今天的日期(YYYY-MM-DD)

写入 {PROJECT_ROOT}/CITATION.cff。

README.md

如果 README 缺失或内容过于简略(少于 50 行):

从 <installed-skill-dir>/templates/README_ml_paper.md 读取模板。

填写所有占位符。对于需要用户提供的内容(例如准确的性能数据、数据集下载链接),保留 [TODO: ...] 标记。

不要覆盖内容充实的现有 README——应找出缺失的章节,并提出追加这些章节。

.gitignore

如果缺失,则生成 Python/ML .gitignore:

# Python
__pycache__/
*.py[cod]
*.egg-info/
.eggs/
dist/
build/
.venv/
venv/

# ML outputs (keep jobs/ but ignore outputs/)
outputs/
wandb/
*.ckpt
*.pt
*.pth
*.pkl
runs/
lightning_logs/

# Data (large files)
data/
datasets/

# Secrets
.env
*.pem
*.key
secrets.yaml
credentials.json

# IDE
.vscode/settings.json
.idea/
*.DS_Store
4. 发布前清单审查

阅读 <installed-skill-dir>/checklist.md,查看完整项目列表。

按类别向用户展示精简版清单。逐项报告状态(✅ 已完成 / ⚠️ 需要注意 / ❌ 缺失):

📁 Repository hygiene
  ✅ .gitignore covers outputs/, wandb/, *.ckpt
  ⚠️  outputs/ directory exists — confirm not committed

📄 Documentation
  ✅ README.md present (142 lines)
  ❌ No CITATION.cff — will generate
  ⚠️  README missing "Pre-trained Models" section

🔐 Security
  ✅ No secrets detected
  ✅ No large files in git history

🧰 Toolchain gates
  ✅ pre-commit / ruff / pytest release gates passed
  ⚠️  lychee skipped — not installed
  ❌ gitleaks found possible secret in config.yaml

📦 Reproducibility
  ✅ requirements.txt / pyproject.toml present
  ⚠️  No environment.yml for conda users
  ⚠️  No Dockerfile

⚖️  Legal
  ✅ LICENSE (MIT) present

询问:“你准备好继续标记版本并发布了吗?还是想先处理上述事项?”

5. 提交并创建标签

用户确认后:

ROOT="$(git rev-parse --show-toplevel)"
# Stage only new/modified tracked files (not untracked outputs)
git -C "$ROOT" add LICENSE CITATION.cff README.md .gitignore 2>/dev/null || true
git -C "$ROOT" diff --staged --stat

请用户确认已暂存的更改,然后提交:

git -C "$ROOT" commit -m "chore: prepare code for public release ({VERSION})"

创建附注标签:

git -C "$ROOT" tag -a "{VERSION}" -m "$(cat <<'EOF'
Release {VERSION} — {PAPER_TITLE}

Published at {VENUE}
Paper: {PAPER_URL}

Includes: {WHAT_INCLUDED}
EOF
)"

询问:“是否将提交和标签推送到 origin?”

CURRENT_BRANCH="$(git -C "$ROOT" branch --show-current)"
git -C "$ROOT" push origin "$CURRENT_BRANCH"
git -C "$ROOT" push origin "{VERSION}"
6. GitHub 发布(可选)

如果用户要求发布 GitHub Release:

检查是否已安装 gh:

gh --version 2>/dev/null && echo "gh available" || echo "gh not found"

如果已安装,起草发布说明并创建发布:

gh release create "{VERSION}" \
  --title "{PAPER_TITLE} ({VERSION})" \
  --notes "$(cat <<'EOF'
## {PAPER_TITLE}

**{VENUE}** | [Paper]({PAPER_URL}) | [Project Page]({PROJECT_PAGE_URL})

### What's included
{INCLUDED_ITEMS}

### Installation
\`\`\`bash
pip install -r requirements.txt
\`\`\`

### Citation
\`\`\`bibtex
{BIBTEX}
\`\`\`
EOF
)"

如果未安装 gh,将发布说明以文本形式输出,供用户粘贴到 GitHub。

7. 摘要和后续步骤

打印最终摘要:

✅ Release {VERSION} complete!

Files generated/updated:
  • LICENSE
  • CITATION.cff
  • README.md
  • .gitignore

Git:
  • Commit: {COMMIT_HASH}
  • Tag: {VERSION} → pushed to origin

GitHub:
  • Release: https://github.com/{REPO}/releases/tag/{VERSION}

Recommended next steps:
  □ Upload pre-trained weights to HuggingFace Hub / project page
  □ Add repo link to the paper's arXiv abstract page
  □ Tweet / post about the release
  □ Email the mailing list / post to r/MachineLearning
  □ Add a "Code" badge to the paper PDF (camera-ready only)

处理匿名投稿

当用户表示这是用于匿名会议投稿时:

  1. 不要创建公开的 GitHub Release。
  2. 不要在已提交的文件中包含作者姓名。
  3. 改为生成匿名 zip 包:
    ROOT="$(git rev-parse --show-toplevel)"
    PROJ=$(basename "$ROOT")
    git -C "$ROOT" archive --format=zip HEAD -o "/tmp/${PROJ}-anonymous.zip"
    echo "Anonymous zip: /tmp/${PROJ}-anonymous.zip"
    
  4. 在投稿前检查 zip 包内容,确认不包含任何可识别作者身份的信息。
  5. 提醒用户进行匿名化处理:通过 git log 可见的提交消息、配置文件中的个人路径、代码注释中的电子邮件地址。

常见模式

HuggingFace Hub 模型上传

当用户希望将权重推送到 HuggingFace 时:

# Requires: pip install huggingface_hub
python -c "
from huggingface_hub import HfApi
api = HfApi()
api.upload_folder(
    folder_path='checkpoints/',
    repo_id='username/model-name',
    repo_type='model',
)
"
在 README 中添加“Code”徽章
[![GitHub](https://img.shields.io/github/stars/username/repo?style=social)](https://github.com/username/repo)
[![arXiv](https://img.shields.io/badge/arXiv-2401.00000-b31b1b.svg)](https://arxiv.org/abs/2401.00000)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
论文的 Code 链接

发布后,提交到 paperswithcode.com,以自动将代码库关联到论文。

评论

支持 Markdown