研发协作
准备并发布 GitHub Release…
在将项目公开发布到 GitHub 前,先做密钥扫描、个人文件清理、LICENSE/README 校验,再打标签并通过 gh CLI 发布。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
准备并发布 GitHub Release通用
解决思路
- Phase 1 清理(发布前必须执行,遇到阻塞项即停止):
- 1. 扫描密钥(阻塞项):运行 `gitleaks detect --no-git --source=. --verbose`;若发现密钥则停止,移除密钥并改为环境变量;用 `git log -S "secret_value"` 检查历史,若历史中存在则使用 BFG Repo-Cleaner 清理。若未安装 gitleaks,则手动检查:`find . -name ".env*" -not -path "*/node_modules/*"`,以及 `grep -ri "api_key\|token\|secret\|password" wrangler.toml wrangler.jsonc .dev.vars 2>/dev/null`。
- 2. 移除个人产物:检查并删除不应发布的会话/规划文件,如 `SESSION.md`、`planning/`、`screenshots/`、`test-*.ts`、`test-*.js`;删除它们或加入 `.gitignore`。
- 3. 校验 LICENSE:运行 `ls LICENSE LICENSE.md LICENSE.txt 2>/dev/null`;若缺失则创建;用 `gh repo view --json visibility -q '.visibility'` 检查仓库可见性,公开仓库用 MIT,私有仓库考虑专有许可证。
- 4. 校验 README:确认存在且包含基本章节,运行 `grep -i "## Install\|## Usage\|## License" README.md`;缺失章节则在发布前补齐。
- 5. 检查 .gitignore:确认包含必要模式,运行 `grep -E "node_modules|\.env|dist/|\.dev\.vars" .gitignore`。
- 6. 构建测试(非阻塞):运行 `npm run build 2>&1`。
- 7. 依赖审计(非阻塞):运行 `npm audit --audit-level=high`。
- 8. 创建清理提交:若清理过程中有改动,运行 `git add -A` 和 `git commit -m "chore: prepare for release"`。
- Phase 2 发布:
- 1. 确定版本:查看 `package.json` 当前版本或询问用户,确保版本以 `v` 前缀开头。
- 2. 检查标签是否已存在:运行 `git tag -l "v[version]"`;若存在,询问用户是删除重建还是换版本。
- 3. 展示将要发布的内容:`LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")`,若为空则 `git log --oneline --no-merges HEAD | head -20`,否则 `git log --oneline --no-merges ${LAST_TAG}..HEAD`。
- 4. 创建标签并推送:`git tag -a v[version] -m "Release v[version]"`,然后 `git push origin $(git branch --show-current)` 和 `git push origin --tags`。
- 5. 创建 GitHub Release:`gh release create v[version] --title "Release v[version]" --notes "[auto-generated from commits]"`;预发布加 `--prerelease`,草稿加 `--draft`。
- 6. 汇报:向用户展示 Release URL 及后续步骤(如适用则 npm publish、公告)。
适用边界 · 注意事项
- 未安装并认证 `gh` CLI 时(需先 `gh auth status` 通过)
- 未安装 `gitleaks` 且不愿做手动密钥检查时
- Git 仓库未配置远程仓库时