关于 release-code
release-code 是用于准备公开发布研究代码仓库的技能。它指导安全与整洁度审计、补齐发布文件、版本打标签及可选的 GitHub 发布,并设置用户确认环节。
主要功能
- 01扫描密钥和敏感文件
- 02检查仓库文件与工具链门槛
- 03生成缺失的 README、许可证和引用文件
- 04审核发布前检查清单
- 05标记版本并可选发布 GitHub Release
适用场景
- 01发布前审计研究代码仓库
- 02补充缺失的发布文档和元数据
- 03准备匿名会议投稿代码包
- 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.mdtemplates/CITATION.cffREADME_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. 了解发布背景
在一条消息中询问用户:
- 论文信息:标题、作者、会议/年份(例如“CVPR 2025”)、arXiv ID 或 URL(如有)
- 发布类型:完整代码发布 / 最小可复现软件包 / 匿名会议投稿?
- 许可证:MIT / Apache-2.0 / CC-BY-4.0 / 其他?(默认:代码使用 MIT,模型/数据使用 CC-BY-4.0)
- 包含内容:训练代码?评估?预训练权重?数据集?演示?
- 版本标签:例如
v1.0.0(首次发布时默认使用v1.0.0) - GitHub release?:是否创建附带发布说明的 GitHub release?(是/否)
- 模型权重:是否提供预训练权重?如果有,将托管在哪里?(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)
处理匿名投稿
当用户表示这是用于匿名会议投稿时:
- 不要创建公开的 GitHub Release。
- 不要在已提交的文件中包含作者姓名。
- 改为生成匿名 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" - 在投稿前检查 zip 包内容,确认不包含任何可识别作者身份的信息。
- 提醒用户进行匿名化处理:通过 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”徽章
[](https://github.com/username/repo)
[](https://arxiv.org/abs/2401.00000)
[](LICENSE)
论文的 Code 链接
发布后,提交到 paperswithcode.com,以自动将代码库关联到论文。