콘텐츠로 이동

기여하기

Wails에 대한 기여를 환영합니다! 버그 수정, 기능 추가, 문서 개선 등 여러분의 도움이 매우 감사합니다.

버그를 발견하셨나요? 다음 내용을 포함하여 이슈를 열어주세요:

  • 명확한 설명
  • 재현 단계
  • 기대 동작과 실제 동작
  • 시스템 정보
  • 코드 샘플

문서 개선은 항상 환영합니다:

  • 오타 및 오류 수정
  • 예제 추가
  • 설명 명확화
  • 콘텐츠 번역

풀 리퀘스트(Pull Request)를 통해 코드를 기여하세요:

  • 버그 수정
  • 새로운 기능
  • 성능 개선
  • 테스트
Terminal window
# GitHub에서 저장소를 포크한 후
# 자신의 포크를 클론합니다
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: 버그 수정
# - docs: 문서
# - test: 테스트
# - refactor: 코드 리팩토링
# - chore: 유지보수
Terminal window
# 자신의 포크로 푸시
git push origin feature/my-feature
# GitHub에서 풀 리퀘스트 열기
# 명확한 설명 제공
# 관련 이슈 참조
## 설명
변경 사항에 대한 간략한 설명
## 변경 사항
- 기능 X 추가
- 버그 Y 수정
- 문서 업데이트
## 테스트
- macOS 14에서 테스트 완료
- Windows 11에서 테스트 완료
- 모든 테스트 통과
## 관련 이슈
Fixes #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에 기여해 주셔서 감사합니다! 🎉