Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[배포] 메인 브랜치 반영(PR#73) #74

Merged
merged 2 commits into from
Sep 19, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 112 additions & 3 deletions docs/tech.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,22 @@
## 목차

- [목차](#목차)
- [의존성 제한](#의존성-제한)
- [코드 품질 제한](#코드-품질-제한)
- [의존성 제한](#의존성-제한)
- [코드 품질 제한](#코드-품질-제한)
- [일관성 있는 코드](#일관성-있는-코드)
- [린트 도구](#린트-도구)
- [협업 방법](#협업-방법)
- [이슈 등록](#이슈-등록)
- [이슈 라벨](#이슈-라벨)
- [이슈 네이밍](#이슈-네이밍)
- [신규 브랜치 생성](#신규-브랜치-생성)
- [브랜치 네이밍](#브랜치-네이밍)
- [개발 중 커밋 컨벤션](#개발-중-커밋-컨벤션)
- [풀 리퀘스트](#풀-리퀘스트)
- [풀 리퀘스트 네이밍](#풀-리퀘스트-네이밍)
- [풀 리퀘스트 라벨링](#풀-리퀘스트-라벨링)
- [테스트 전용](#테스트-전용)
- [메인 브랜치 반영 이후](#메인-브랜치-반영-이후)

## 의존성 제한

Expand All @@ -17,11 +31,106 @@

## 코드 품질 제한

### 일관성 있는 코드

- 코드 베이스 반영 전에 import 최적화를 수행합니다.
- 코드 베이스 반영 전에 불필요한 공백이 있는지 확인합니다.
- 테스트가 실패할 경우, 코드 베이스에 절대 반영하지 않습니다.
- 프로젝트 라인 커버리지 제한은 70% 이지만, 90% 이상을 목표로 합니다.
- 중요하지 않은 hotfix를 제외한 모든 유형의 코드 반영은 PR을 통해 이루어져야 합니다.
- develop 코드 베이스에 반영할 경우 gpt 리뷰를 받습니다.
- 모든 develop 브랜치에 병합되는 PR은 협업자간에 코드 리뷰를 수행합니다.
- 만약, 시간적인 제약으로 인해서 코드 리뷰를 받지 못하는 경우에는 PR에 `run: gpt code review` 라벨을 붙이고 ChatGPT에게 리뷰를 받습니다.

### 린트 도구

- 린트와 인텔리제이 코드 자동 정렬 설정을 협업자간에 동일하게 구성합니다.
- git commit 이전에 린트 검사를 수행합니다.
- commit 이전에 자동으로 스타일 검사를 수행하기 위해서 다음 명령어로 Hook을 등록합니다.
- `./gradlew addKtlintCheckGitPreCommitHook`
- 린트로 인해 빌드가 안될 경우에 빌드 디렉터리에 들어가 원인을 파악하고 코드를 수정합니다.
- 코드를 수정한 다음, `./gradlew ktlintCheck` 를 수행해 린트 검사 결과를 최신화합니다.
- 만약, 어떻게 코드를 수정해야하는지 모르겠다면, `./gradlew ktlintFormat` 을 수행해 코드를 자동 수정할 수 있습니다.

## 협업 방법

### 이슈 등록

새로운 작업을 하기 이전에 깃헙 이슈를 등록합니다.

#### 이슈 라벨

이슈에 등록 가능한 라벨의 유형은 다음과 같습니다. problem은 problem 이슈 템플릿을, 나머지는 task 이슈 템플릿을 사용합니다.

- `new` : 신규 개발
- `enhancement` : 리팩터링과 최적화를 비롯한 개선 작업
- `chore` : 설정을 비롯한 부수적인 작업
- `problem` : 문제 발생
- `documentation` : 문서화

#### 이슈 네이밍

- 이슈의 이름 형식은 `[type] title` 입니다.

- 이슈의 이름 형식 타입은 PR에서 사용하는 제목의 타입과 동일합니다. 단, PR 제목 타입에는 `배포`가 추가됩니다.
- `기능 구현` : new
- `개선` : enhancement
- `설정` : chore
- `문서` : documenation
- `문제` : problem

### 신규 브랜치 생성

현재 개인 환경에 있는 브랜치가 저장소에 있는 최신 코드인지 확인하고, **develop 브랜치**에서 신규 브랜치를 생성합니다.

#### 브랜치 네이밍

- 브랜치의 이름 형식은 `type/이슈 번호` 입니다.

- 브랜치 이름의 타입은 다음과 같습니다. (앵귤러 JS 커밋 컨벤션의 타입을 따름)
- `feat` : new
- `refactor` : enhancement
- `chore` : chore
- `fix` : problem
- `docs` : documentation
- 기타 추가 가능

### 개발 중 커밋 컨벤션

개발 시 커밋 메시지는 [앵귤러 JS 커밋 컨벤션](https://gist.github.com/stephenparish/9941e89d80e2bc58a153)을 따르되, `type` + `subject`까지만
작성해도 괜찮습니다.

### 풀 리퀘스트

#### 풀 리퀘스트 네이밍

- 개발이 끝나면 develop 브랜치로 PR을 생성합니다.
- 풀 리퀘스트 이름 형식은 이슈 형식과 거의 동일합니다.
- 차이점은 PR 뒤에 () 내부에 연관 이슈를 추가하는 것입니다.
- 예시 : `[문서] 가이드 문서 작성(issue#58)`
- 관련 이슈가 한 개가 아니라면 구분자를 콤마(,)를 이용해 나열합니다.
- **(중요)** main 브랜치에 반영되는 경우에는 `[배포]`를 접두어로 사용하고, `deployment` 혹은 `no-deployment` 라벨을 등록합니다.
- **(중요)** main 브랜치에 반영되는 경우에는 () 내부에 연관 PR을 추가합니다.
- 예시 :
- `[배포] 메인 브랜치 반영(PR#23,PR#28)` : 버전이 증가하지 않는 경우
- `[배포] v0.0.1(PR#12,PR#98)` : 버전이 증가하는 경우

#### 풀 리퀘스트 라벨링

- 현재 풀 리퀘스트의 라벨을 이용해서 자동으로 실행하는 github actions 작업이 존재합니다.
- `run: ci` : 빌드, 테스트, 테스트 커버리지 분석, 린트, 정적 코드 분석 실행
- `run: gradle test` : 빌드, 테스트, 테스트 커버리지 분석 실행
- `run: gpt code review` : ChatGPT 코드 리뷰 실행
- `no-deployment` : 컨테이너 이미지 저장소(docker hub)에 신규 이미지 릴리즈하지 않음

#### 테스트 전용

- `[테스트]` 접두어를 사용하고, `ignore` 라벨을 등록합니다.
- 테스트 전용 PR은 코드 베이스에 반영하지 않습니다.

### 메인 브랜치 반영 이후

- 개인 개발 환경에서 머지 커밋을 포함한 최신 main 브랜치의 코드를 내려받습니다.
- 태그를 만들고, 태그를 저장소에 push 합니다.
- 해당 태그로 새로운 릴리즈 노트를 작성합니다.

[⬆ 위로 올라가기](#목차)