링크풀 프로젝트에 기여해 주셔서 감사합니다! 이 문서는 프로젝트에 기여하는 방법을 안내합니다.
모든 기여자는 서로 존중하고 건설적인 피드백을 제공해야 합니다.
- 다양한 의견과 경험을 존중합니다
- 건설적인 비판을 수용합니다
- 커뮤니티에 가장 좋은 것에 집중합니다
- 다른 커뮤니티 구성원에게 공감을 보여줍니다
자세한 설정 방법은 개발 환경 설정 가이드를 참조하세요.
# 1. 저장소 Fork 및 Clone
git clone https://github.com/<your-username>/ac_project_app.git
cd ac_project_app
# 2. 업스트림 추가
git remote add upstream https://github.com/Monday-Rocket/ac_project_app.git
# 3. 환경 설정
make setup
# 4. 앱 실행
fvm flutter runmain (production)
└── develop (개발)
├── feature/기능명
├── fix/버그명
└── refactor/개선사항
| 타입 | 형식 | 예시 |
|---|---|---|
| 기능 | feature/기능명 |
feature/share-folder |
| 버그 수정 | fix/버그명 |
fix/login-crash |
| 리팩토링 | refactor/개선사항 |
refactor/api-structure |
| 문서 | docs/문서명 |
docs/readme-update |
| 테스트 | test/테스트명 |
test/folder-api |
# 최신 develop 브랜치에서 시작
git checkout develop
git pull upstream develop
git checkout -b feature/your-feature-name<타입>(<범위>): <제목>
<본문>
<꼬리말>
| 타입 | 설명 |
|---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
docs |
문서 수정 |
style |
코드 포맷팅 (기능 변경 없음) |
refactor |
코드 리팩토링 |
test |
테스트 추가/수정 |
chore |
빌드, 설정 파일 수정 |
feat(folder): 폴더 공유 기능 추가
- 로컬 DB 폴더 CRUD 구현
- 폴더 목록 화면 연동
- 폴더 관련 Cubit 추가
Closes #123
fix(folder): 폴더 삭제 시 링크 미삭제 수정
CASCADE 설정 누락으로 폴더 삭제 시 하위 링크가 남는 문제 해결
# 1. 린트 검사
make lint
# 2. 테스트 실행
make test
# 3. 또는 한 번에
make precommit-
develop 브랜치와 동기화
git fetch upstream git rebase upstream/develop
-
테스트 통과 확인
make test -
린트 검사 통과
make lint
## 변경 사항
- 변경 내용 1
- 변경 내용 2
## 관련 이슈
- Closes #이슈번호
## 테스트
- [ ] 단위 테스트 추가/수정
- [ ] 통합 테스트 확인
- [ ] 수동 테스트 완료
## 스크린샷 (UI 변경 시)
| Before | After |
|--------|-------|
| 이미지 | 이미지 |
## 체크리스트
- [ ] 코드 스타일 가이드 준수
- [ ] 테스트 통과
- [ ] 문서 업데이트 (필요시)- 작은 단위로 PR 생성: 하나의 PR에 하나의 기능/수정
- 명확한 제목: 커밋 메시지 규칙과 동일
- 상세한 설명: 변경 사항과 이유 명시
- 리뷰어 지정: 최소 1명 이상의 리뷰어
- CI 통과: 모든 CI 검사 통과 필수
프로젝트는 very_good_analysis 린트 규칙을 따릅니다.
// DO: 명확한 변수명 사용
final List<Folder> myFolders = [];
// DON'T: 축약형 변수명
final List<Folder> f = [];
// DO: const 사용 가능한 경우 const 사용
const EdgeInsets.all(16);
// DO: trailing comma 사용
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(16),
child: Text('Hello'), // trailing comma
);
}// 1. imports (dart → package → relative)
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../models/local/local_folder.dart';
// 2. part 선언
part 'folder.freezed.dart';
// 3. 상수/typedef
const int maxFolders = 100;
// 4. 클래스
class FolderWidget extends StatelessWidget {
// ...
}# 자동 포맷팅
make lint-fix
# 또는 직접 실행
fvm flutter format .자세한 테스트 가이드는 테스트 가이드를 참조하세요.
- 새 기능: 단위 테스트 필수
- 버그 수정: 회귀 테스트 추가
- DB 변경: Repository 테스트 업데이트
# 전체 테스트
make test
# 커버리지 포함
make test-coverage
# 특정 테스트
fvm flutter test test/provider/local/local_folder_repository_test.dart- 전체: 10% 이상 (점진적 증가 목표)
- 신규 코드: 80% 이상
## 버그 설명
명확하고 간결한 버그 설명
## 재현 방법
1. '...'로 이동
2. '...' 클릭
3. '...'까지 스크롤
4. 오류 확인
## 예상 동작
예상했던 동작 설명
## 스크린샷
해당되는 경우 스크린샷 첨부
## 환경
- OS: [예: iOS 15.0]
- 앱 버전: [예: 1.0.73]
- 기기: [예: iPhone 14]## 기능 설명
제안하는 기능에 대한 명확하고 간결한 설명
## 문제점
이 기능이 해결하는 문제 설명
## 대안
고려한 대안 솔루션이나 기능
## 추가 정보
기능 요청에 대한 다른 컨텍스트나 스크린샷문의사항이 있으시면 이슈를 생성해 주세요!