贡献指南¶
感谢你考虑为 Shortener 项目做出贡献!
行为准则¶
请友善和尊重他人。我们致力于为每个人提供一个友好、安全和欢迎的环境。
如何贡献¶
报告 Bug¶
如果你发现了 bug,请在 GitHub Issues 创建一个问题,并包含:
- 清晰的标题和描述
- 重现步骤
- 预期行为和实际行为
- 你的环境信息(操作系统、Rust 版本等)
- 相关的日志或错误信息
建议新功能¶
我们欢迎新功能建议!请在 GitHub Discussions 中讨论你的想法。
提交代码¶
- Fork 仓库
点击 GitHub 页面右上角的 "Fork" 按钮。
- 克隆你的 Fork
- 创建分支
-
进行更改
-
遵循现有的代码风格
- 为新功能编写测试
- 更新相关文档
-
确保所有测试通过
-
提交更改
提交信息格式:
- 添加: - 新功能
- 修复: - Bug 修复
- 文档: - 文档更新
- 重构: - 代码重构
- 测试: - 测试相关
- 推送到你的 Fork
- 创建 Pull Request
在 GitHub 上打开一个 Pull Request,描述你的更改。
开发设置¶
前提条件¶
- Rust 1.98 或更高版本(由 mise 自动安装,无需手动管理)
- mise(工具链管理器,自动安装 Rust / Node / pnpm / prek)
- Git
设置开发环境¶
项目使用 mise 管理开发工具链(Rust、Node、pnpm、prek),
进入仓库目录即自动加载根目录 mise.toml:
# 安装 mise(一次性)
curl https://mise.run | sh
# 克隆仓库
git clone https://github.com/jetsung/shortener.git
cd shortener
# 自动安装 mise.toml 声明的工具链
mise install
# 构建项目
mise exec -- cargo build
# 运行测试
mise exec -- cargo test
# 运行服务器(环境变量由 mise 自动加载 .env)
mise exec -- cargo run -p shortener-server
已在 shell 中激活 mise(
mise activate)或配置 direnv 集成时,可省略mise exec --前缀。
服务端环境变量(SERVER__ADDRESS 等)由 mise 自动加载仓库根目录 .env,
详见 环境变量参考。
开发工具¶
安装推荐的开发工具:
代码风格¶
- 使用
cargo fmt格式化代码 - 使用
cargo clippy检查代码 - 遵循 Rust 命名约定
- 为公共 API 编写文档注释
运行测试¶
# 运行所有测试
cargo test
# 运行特定包的测试
cargo test -p shortener-server
# 运行测试并显示输出
cargo test -- --nocapture
# 运行基准测试
cargo bench
代码检查¶
在提交前运行:
文档¶
更新文档¶
如果你的更改影响用户可见的行为,请更新相关文档:
README.md- 项目概述docs/- 详细文档- 代码注释 - 内联文档
构建文档¶
Pull Request 指南¶
好的 PR 应该:¶
- 解决一个明确的问题或添加一个明确的功能
- 包含测试
- 更新相关文档
- 通过所有 CI 检查
- 有清晰的提交信息
- 保持较小的更改范围
PR 流程¶
- 确保你的分支是最新的
- 所有测试通过
- 代码已格式化和检查
- 文档已更新
- 提交 PR 并等待审查
- 根据反馈进行修改
- PR 被合并
发布流程¶
发布由维护者处理:
- 更新版本号并创建 Git 标签:
just release 0.2.0(自动同步Cargo.toml、openapi.yml、shortener-frontend/package.json三处版本号,再提交并打标签) - 只同步版本号、不提交打标签:
just bump-version 0.2.0(不带参数just bump-version或make bump-version会默认读取Cargo.toml的当前版本同步) - 构建发布二进制文件:
just release-build
版本同步机制:根
Cargo.toml的workspace.package.version是唯一版本源, 子 crate(server/cli/common)通过version.workspace = true继承,依赖声明用workspace = true/path引用(不带 version),因此bump-version只需改根Cargo.toml一处,后端二进制版本与前端package.json版本即全链路自动同步。 4. 发布到 GitHub Releases
获取帮助¶
如果你需要帮助:
- 📖 阅读 文档
- 💬 在 Discussions 提问
- 🐛 在 Issues 报告问题
- 📧 联系维护者:i@jetsung.com
许可证¶
通过贡献,你同意你的贡献将在 Apache-2.0 许可证下授权。
致谢¶
感谢所有贡献者!你的贡献使这个项目变得更好。