跳转到内容

贡献指南

我们欢迎对 Wails 的贡献!无论你是修复 bug、添加新功能还是改进文档,你的帮助都备受感激。

发现了 bug?提交一个 issue,并包含以下内容:

  • 清晰的描述
  • 复现步骤
  • 预期行为与实际行为对比
  • 系统信息
  • 代码示例

我们非常欢迎对文档的改进:

  • 修复拼写和错误
  • 添加示例
  • 澄清解释
  • 翻译内容

通过拉取请求(Pull Request)提交代码:

  • Bug 修复
  • 新功能
  • 性能改进
  • 测试
Terminal window
# 在 GitHub 上 Fork 仓库
# 然后克隆你的 Fork
git clone https://github.com/YOUR_USERNAME/wails.git
cd wails
# 添加上游远程仓库
git remote add upstream https://github.com/wailsapp/wails.git
Terminal window
# 安装依赖
go mod download
# 构建 Wails CLI
cd v3/cmd/wails3
go build
# 测试你的构建
./wails3 version
Terminal window
# 运行所有测试
go test ./...
# 运行特定包的测试
go test ./v3/pkg/application
# 运行带覆盖率报告的测试
go test -cover ./...
Terminal window
# 更新 main 分支
git checkout main
git pull upstream main
# 创建功能分支
git checkout -b feature/my-feature
  1. 编写代码,遵循 Go 语言规范
  2. 添加测试,覆盖新功能
  3. 更新文档(如有需要)
  4. 运行测试,确保没有破坏现有功能
  5. 提交更改,使用清晰的提交信息
Terminal window
# 良好的提交信息示例
git commit -m "fix: resolve window focus issue on macOS"
git commit -m "feat: add support for custom window chrome"
git commit -m "docs: improve bindings documentation"
# 使用约定式提交(Conventional Commits):
# - feat: 新功能
# - fix: Bug 修复
# - docs: 文档
# - test: 测试
# - refactor: 代码重构
# - chore: 维护工作
Terminal window
# 推送到你的 Fork
git push origin feature/my-feature
# 在 GitHub 上打开拉取请求
# 提供清晰的描述
# 引用相关问题
## 描述
简要描述所做的更改
## 更改内容
- 添加了功能 X
- 修复了 Bug Y
- 更新了文档
## 测试
- 在 macOS 14 上测试
- 在 Windows 11 上测试
- 所有测试通过
## 相关问题
修复 #123
  • 代码遵循 Go 语言规范
  • 已添加/更新测试
  • 文档已更新
  • 所有测试通过
  • 无破坏性更改(或有文档说明)
  • 提交信息清晰
// ✅ 良好:清晰、有文档、有测试
// ProcessData 处理输入数据并返回结果。
// 如果数据无效,则返回错误。
func ProcessData(data string) (string, error) {
if data == "" {
return "", errors.New("data cannot be empty")
}
result := process(data)
return result, nil
}
// ❌ 糟糕:无文档、无错误处理
func ProcessData(data string) string {
return process(data)
}
func TestProcessData(t *testing.T) {
tests := []struct {
name string
input string
want string
wantErr bool
}{
{"valid input", "test", "processed", false},
{"empty input", "", "", true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ProcessData(tt.input)
if (err != nil) != tt.wantErr {
t.Errorf("ProcessData() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("ProcessData() = %v, want %v", got, tt.want)
}
})
}
}

文档使用 Starlight (Astro) 构建:

Terminal window
cd docs
npm install
npm run dev
  • 使用国际英语拼写
  • 从问题入手
  • 提供可运行的示例
  • 包含故障排除
  • 交叉引用相关内容

请保持尊重、包容和专业。我们都是为了共同构建优秀的软件而聚在这里。

贡献者将在以下地方得到认可:

  • 发布说明
  • 贡献者列表
  • GitHub 洞察数据

感谢你对 Wails 的贡献!🎉