本文档概述了为 frp 项目贡献的指南。它提供了关于开发工作流程、代码标准以及如何提交有效的拉取请求以帮助维护高质量代码的信息。
frp 是一个开源的快速反向代理,允许您将 NAT 或防火墙后面的本地服务器暴露给互联网。作为一个开源项目,frp 欢迎任何有兴趣改进该项目的人的贡献。本指南旨在帮助新贡献者了解如何有效地为 frp 做出贡献。
来源: README.md100-105 README_zh.md75-85
来源: README_zh.md75-85 .github/workflows/goreleaser.yml .github/workflows/golangci-lint.yml
Fork the repository:首先,在 GitHub 上 fork frp 仓库 到您的账户。
Clone your fork:将您的 fork 克隆到本地机器以开始开发。
git clone https://github.com/YOUR-USERNAME/frp.git
cd frp
Add the upstream remote:这允许您同步您的 fork 与原始存储库。
git remote add upstream https://github.com/fatedier/frp.git
Stay updated:定期将您的 fork 与上游存储库同步,尤其是在创建新分支之前。
git fetch upstream
git checkout dev
git merge upstream/dev
来源: README_zh.md75-85 .github/workflows/goreleaser.yml .github/workflows/golangci-lint.yml
frp 使用两个主要分支
贡献时,始终从 dev 分支创建您的功能分支,而不是 master 分支。
来源: README_zh.md82 .github/workflows/golangci-lint.yml3-7
dev 分支。首先创建一个 Issue:在实现新功能之前,创建一个描述性的 Issue
等待批准:等待维护者讨论并批准该功能。
实现:批准后,实现功能并提交一个引用该 Issue 的拉取请求。
来源: .github/workflows/golangci-lint.yml .circleci/config.yml .golangci.yml
frp 使用 golangci-lint 进行代码 linting。配置可以在 .golangci.yml 中找到。启用的 linter 包括
errcheck:检查未检查的错误gofumpt:更严格的 gofmtgoimports:格式化导入revive:Go 的 Lintergosimple:简化代码govet:报告可疑的构造.golangci.yml 中配置的许多其他 linter。您可以在提交 PR 之前在本地运行 linting。
golangci-lint run
所有贡献都应包含适当的测试
运行现有测试:确保您的更改不会破坏现有功能。
make alltest
添加新测试:对于新功能或 Bug 修复,请添加涵盖新代码的测试。
frp 使用 Makefile 系统进行构建和测试。主要命令包括:
make:构建 frpc 和 frpsmake frpc:仅构建客户端make frps:仅构建服务器make alltest:运行所有测试对于交叉编译,项目使用自定义的 Makefile.cross-compiles 和 package.sh 脚本。
来源: dockerfiles/Dockerfile-for-frpc6 dockerfiles/Dockerfile-for-frps6 .github/workflows/goreleaser.yml20-22
强烈鼓励改进文档,尤其是英文文档。在贡献文档时
来源: README_zh.md81
报告问题时
使用 issues 可以帮助其他人找到类似问题的解决方案,并避免维护者反复回答相同的问题。
来源: README_zh.md77-78 README_zh.md85
了解项目结构有助于贡献者更有效地浏览代码库。
来源: README.md33-47 client/proxy/general_tcp.go23-34
frp 中的拉取请求会经历以下审查流程
在审查过程中请保持耐心,因为维护者可能时间有限。使您的 PR 保持专注和简洁,以便更容易审查。
来源: .github/workflows/golangci-lint.yml .circleci/config.yml
如有问题、建议或超出 GitHub issue 范围的合作,您可以通过 fatedier@gmail.com 联系维护者。
请记住,使用 GitHub Issues 来提问项目相关的问题,可以帮助其他人找到类似问题的解决方案,并避免维护者重复回答相同的问题。
当贡献实验性功能或可能存在破坏性更改的功能时,请使用特性门(feature gates)系统
特性门允许有条件地启用实验性功能。在添加新的特性门功能时,请遵循现有模式。
来源: README.md96-99
frp遵循版本方案,其中:
贡献时,请考虑您的更改适合哪个版本。
来源: README.md108-116
frp的所有贡献都必须根据Apache License 2.0进行许可,如文件头部所示。贡献代码时,请确保您的贡献符合此许可。
示例头部
来源: pkg/util/wait/backoff.go1-14 pkg/util/util/util.go1-14 client/proxy/general_tcp.go1-14
为frp做出贡献是改进这个广泛用于网络隧道和反向代理功能的工具的一个好方法。通过遵循这些准则,您可以帮助维护项目的质量并确保贡献过程顺利。
感谢您对改进frp的兴趣!