Skip to content

Contribute

Ed Sungik Choi edited this page Aug 29, 2023 · 11 revisions

기여하기

이 문서는 Bezier React에 기여하는 개발자를 위한 가이드를 제공합니다.

행동 강령

우리는 모든 기여자가 기여자 행동 강령 규약을 준수하길 기대합니다.

오픈 소스

이 프로젝트는 채널코퍼레이션에서 관리하고 있지만, 오픈 소스 라이선스 하에 공개되어 있습니다. 이는 외부 기여자들도 프로젝트에 참여할 수 있음을 의미합니다. 우리는 외부인의 기여를 환영합니다! 실제로 다양한 관점과 경험은 프로젝트를 더욱 성장시키는 데 큰 도움이 됩니다.

라이선스

이 프로젝트는 Apache 2.0 라이선스를 따릅니다. 이 라이선스 하에, 어떠한 형태로든 코드를 사용, 수정, 배포할 수 있습니다.

유의적 버전 명세(SemVer)

우리는 사용자에게 안정적이고 예측 가능한 업데이트를 제공하기 위해 유의적 버전 명세(SemVer)를 따르고 있습니다. 명세에 따라 버전은 다음과 같은 규칙을 따라 증가합니다.

주.부.수 (ex: 1.0.0)
  1. 수(패치) 버전은 기존 버전과 호환되는 버그 수정에 따라 증가합니다.
  2. 부(마이너) 버전은 기존 버전과 호환되는 새로운 기능 추가에 따라 증가합니다.
  3. 주(메이저) 버전은 기존 버전과 호환되지 않는 변경 사항이 있을 때 증가합니다.

아래는 어떤 버전이 어떤 경우에 증가하는지에 대한 대표적인 예시입니다.

주 버전

  • 컴포넌트 제거
  • 컴포넌트의 속성 제거
  • 기존 속성의 호환되지 않는 타입 변경
  • 공개된 함수 및 믹스인의 호환되지 않는 변경

부 버전

  • 새로운 컴포넌트 추가
  • 컴포넌트에 새로운 속성 추가
  • 기존 속성의 타입 확장
  • 컴포넌트, 속성, 공개된 함수, 믹스인 등의 지원 중지(deprecated) 처리

수 버전

  • 컴포넌트가 생성하는 HTML의 변경(클래스 추가, 제거, 이름 변경 등)
  • 공개된 API에 영향을 주지 않는 변경
  • 비공개된 함수 및 믹스인의 호환되지 않는 변경

호환되지 않는 변경(Breaking Change)

호환되지 않는 변경은 필수불가결합니다. 하지만 호환되지 않는 변경사항이 있을 때마다 주 버전을 증가시키는 건 버전 관리에 있어서 좋지 않습니다. 의존하는 프로젝트가 업그레이드를 하는 데 드는 비용이 너무 크기 때문입니다.

우리는 먼저 지원 중지 처리를 하고, 다음 주 버전에서 실제 변경사항을 적용하는 방식을 사용하고 있습니다. 호환되지 않는 변경사항을 처리하고, 지원 중지 하는 과정에 대한 자세한 가이드는 지원 중지 가이드라인을 참고해주세요.

기여 방법

이슈 제출하기

이슈를 통해 메인테이너 및 다른 기여자들과 의견을 공유할 수 있습니다. 개발하기 이전에 먼저 이슈를 검색해주세요. 이미 해당 이슈가 존재한다면, 해당 이슈에서 논의를 진행해주세요. 존재하지 않는다면, 새로운 이슈를 생성해주세요.

버그 리포트

템플릿을 통해 이슈를 제출해주세요.

개선 사항 및 새로운 기능 요청

템플릿을 통해 이슈를 제출해주세요.

개발하기

브랜치 전략

  • 기본적으로 단일 기본 브랜치(main) 하나만 운영합니다. 이 브랜치에서 안정된 버전 배포가 이루어집니다. 이 브랜치에서 새로운 브랜치를 생성하고, PR을 보내는 방식으로 개발이 진행됩니다.
  • 필요한 경우 alphanext 같은 브랜치가 추가되어 개발이 진행될 수 있습니다.

커밋 메시지

테스트

테스트 작성법은 테스트 가이드를 참고해주세요.

Pull Request 보내기

코드 리뷰

PR이 생성되면 1. 프로젝트 메인테이너와 2. 해당 변경사항에 영향을 받는 코드의 코드 오너가 코드 리뷰를 진행합니다. 모든 테스트를 통과하고, 리뷰어의 승인을 받으면 변경 사항을 머지할 수 있습니다.

머지

머지는 Squash and merge 전략을 사용하여 진행합니다. 각 PR이 하나의 커밋으로 표현되기 때문에, 커밋 히스토리가 깔끔해지는 장점이 있습니다.

릴리즈

릴리즈 방식은 릴리즈 가이드를 참고해주세요.

Clone this wiki locally