|
1 | | - |
2 | 1 | # ๐ ๏ธ DevFactory Contributing Guide |
3 | 2 |
|
4 | | -## 1. ๋ธ๋์น ์ ๋ต |
5 | | -- ๊ธฐ๋ณธ ๋ธ๋์น: `main`, `dev` |
6 | | -- ์์
๋ธ๋์น: `feat/`, `fix/`, `docs/` ๋ฑ prefix ์ฌ์ฉ |
7 | | - - ์์: `feat/login`, `fix/navbar-crash` |
8 | | -- ๋จธ์ง๋ `PR(Pull Request)`๋ฅผ ํตํด ์งํ |
9 | | - |
10 | | -## 2. ์ปค๋ฐ ๋ฉ์์ง ๊ท์น |
11 | | -- [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) ํ์ ์ฌ์ฉ |
12 | | - ``` |
13 | | - <type> <short summary> |
14 | | - โ โ |
15 | | - โ โโโซธ Summary in present tense. Not capitalized. No period at the end. |
16 | | - โ |
17 | | - โโโซธ Commit Type: build|ci|docs|feat|fix|perf|refactor|test |
18 | | - ``` |
19 | | -- Commit type (ex: feat: commit message) |
20 | | - ``` |
21 | | - build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm) |
22 | | - ci: Changes to our CI configuration files and scripts (examples: CircleCi, SauceLabs) |
23 | | - docs: Documentation only changes |
24 | | - feat: A new feature |
25 | | - fix: A bug fix |
26 | | - perf: A code change that improves performance |
27 | | - refactor: A code change that neither fixes a bug nor adds a feature |
28 | | - test: Adding missing tests or correcting existing tests |
29 | | - ``` |
30 | | - |
31 | | -## 3. PR(Pull Request) ๊ท์น |
32 | | -- PR ์ ๋ชฉ์ ์์
๋ชฉ์ ์ด ๋๋ฌ๋๋๋ก ์์ฑ |
33 | | -- PR ์ค๋ช
์ **์์
๋ด์ฉ**, **๊ด๋ จ ์ด์**, **์คํฌ๋ฆฐ์ท** ๋ฑ ํฌํจ |
34 | | -- ์ต์ 1๋ช
์ด์์ ๋ฆฌ๋ทฐ์ด ์น์ธ ํ ๋จธ์ง |
35 | | - - ์ํฉ์ ๋ฐ๋ผ ์ ๋์ ์ผ๋ก ์ ์ฉ |
36 | | -- ๋ฆฌ๋ทฐ ํ **๋ณธ์ธ์ด ๋จธ์ง ์งํ** |
37 | | - |
38 | | -## 4. ์ฝ๋ ํ์ง |
39 | | -- Lint, Test๋ PR ์ ์ ๋ฐ๋์ ํต๊ณผ |
40 | | -- CI ์๋ ๊ฒ์ฌ(GitHub Actions ๋ฑ) ์ ์ฉ |
41 | | - |
42 | | -## 5. Issue ๊ด๋ฆฌ(์ ํ) |
43 | | -- ์์
์์ ์ ๊ด๋ จ ์ด์ ์์ฑ ๋๋ ์ฐ๊ฒฐ |
44 | | -- ๋ผ๋ฒจ(label) ์ง์ : `bug`, `feature`, `question`, `urgent` ๋ฑ |
45 | | -- ์๋ฃ๋ ์ด์๋ PR๊ณผ ํจ๊ป ์๋ ๋ซํ (`Fixes #์ด์๋ฒํธ`) |
46 | | - |
47 | | -## 6. ๋ณด์ ๋ฐ ํ๊ฒฝ ๋ณ์ |
48 | | -- `.env` ํ์ผ ๋๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ Git์ ์ปค๋ฐ ๊ธ์ง |
49 | | -- `gitignore`์ ํฌํจ๋ ํ์ผ ๋ชฉ๋ก ํ์ธ ํ์ |
50 | | -- ํ์์ `.env.example` ์ ๊ณต |
51 | | - |
52 | | - |
53 | | - |
54 | | -## EX) ์์ ์ํฌํ๋ก์ฐ |
55 | | -1. `dev` ๋ธ๋์น ์ต์ ์ํ๋ก๋ถํฐ ์์
๋ธ๋์น ์์ฑ |
56 | | - `git checkout -b feat/search dev` |
57 | | - |
58 | | -2. ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฐ ์ปค๋ฐ |
59 | | - `git commit -m "feat: ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ"` |
60 | | - |
61 | | -3. ์๊ฒฉ ํธ์ ๋ฐ PR ์์ฑ |
62 | | - `git push origin feat/search` |
63 | | - |
64 | | -4. `feat/search` -> `dev` PR ์์ฑ โ ๋ฆฌ๋ทฐ์ด ์ง์ โ ๋ฆฌ๋ทฐ ํ ๋จธ์ง |
65 | | - `main` ๋ธ๋์น๋ ๋ฐฐํฌ์ฉ์ผ๋ก๋ง ์ฌ์ฉ |
| 3 | +> Last updated: 2025-11-05 |
| 4 | +> |
| 5 | +> |
| 6 | +> Maintainer: **DevFactory Team** |
| 7 | +> |
| 8 | +
|
| 9 | +--- |
| 10 | + |
| 11 | +## ๐งญ Branch Strategy |
| 12 | + |
| 13 | +DevFactory๋ **๋ชจ๋
ธ๋ ํฌ(Monorepo)** ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
| 14 | + |
| 15 | +์ฌ๋ฌ ์๋น์ค(`getcloser`, `cert-system`)๋ฅผ ํ๋์ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๊ด๋ฆฌํ๋ฉฐ, |
| 16 | + |
| 17 | +์ผ๋ถ ํ๋ก์ ํธ(`JobPT`, `event-bingo`)๋ **๋ณ๋ ๋ฆฌํฌ์งํ ๋ฆฌ**๋ก ์ด์ํฉ๋๋ค. |
| 18 | + |
| 19 | +| ๋ธ๋์น | ์ญํ | ๋น๊ณ | |
| 20 | +| --- | --- | --- | |
| 21 | +| `main` | ํ๋ก๋์
ํตํฉ | ์ ์ฒด ์๋น์ค์ ํตํฉ ๋ฐ ๋ฐฐํฌ์ฉ ๋ธ๋์น | |
| 22 | +| `feat/*` | ๊ธฐ๋ฅ ๊ฐ๋ฐ | ์๋น์ค๋ณ ๊ธฐ๋ฅ ๋จ์ ๊ฐ๋ฐ ๋ธ๋์น | |
| 23 | +| `fix/*` | ๋ฒ๊ทธ ์์ | ์๋น์ค๋ณ ๋ฒ๊ทธ ์์ ๋ธ๋์น | |
| 24 | +| `docs/*` | ๋ฌธ์ ์์ | README, CONTRIBUTING ๋ฑ ๋ฌธ์ ์ ์ฉ ๋ธ๋์น | |
| 25 | + |
| 26 | +> ๋ธ๋์น๋ช
์์ |
| 27 | +> |
| 28 | +> - `feat/getcloser/auto-deploy` |
| 29 | +> - `fix/getcloser/auth-refresh` |
| 30 | +> - `docs/getcloser/update-deploy-guide` |
| 31 | +> - `chore/devfactory/github-actions-update` |
| 32 | +
|
| 33 | +--- |
| 34 | + |
| 35 | +## โ๏ธ Workflow |
| 36 | + |
| 37 | +1. **๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ธ๋์น ์์ฑ** |
| 38 | + |
| 39 | + ```bash |
| 40 | + git checkout main |
| 41 | + git checkout -b feat/<feature-name> |
| 42 | + # ์์ |
| 43 | + git checkout -b feat/auto-deploy |
| 44 | + ``` |
| 45 | + |
| 46 | +2. **๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ์ปค๋ฐ** |
| 47 | + |
| 48 | + ```bash |
| 49 | + git commit -m "feat(getcloser): add CI/CD auto deploy pipeline" |
| 50 | + ``` |
| 51 | + |
| 52 | +3. **PR ์์ฑ** |
| 53 | + |
| 54 | + ```bash |
| 55 | + git push origin feat/auto-deploy |
| 56 | + ``` |
| 57 | + |
| 58 | + - `feat/*` โ `main`์ผ๋ก PR ์์ฑ |
| 59 | + - PR ์ ๋ชฉ์ ์์
๋ชฉ์ ์ ๋ช
ํํ ์์ฑ |
| 60 | + ์: `fix(getcloser): resolve API timeout issue` |
| 61 | +4. **๋ฆฌ๋ทฐ ๋ฐ ๋ณํฉ** |
| 62 | + - ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ์น์ธ ํ ๋ณํฉ |
| 63 | + - ์ดํ ๋ธ๋์น๋ **์ญ์ ๊ถ์ฅ** (`Delete branch after merge`) |
| 64 | + - ์์ธํ ๋ด์ฉ์ ๋ณํฉ ๋ฐ ๋ฆฌ๋ทฐ ๊ท์น ์ฐธ๊ณ |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## ๐ชถ Commit Convention |
| 69 | + |
| 70 | +๋ชจ๋ ์ปค๋ฐ์ [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) ๊ท์น์ ๋ฐ๋ฆ
๋๋ค. |
| 71 | + |
| 72 | +```bash |
| 73 | +<type>(<scope>): <short summary> |
| 74 | +``` |
| 75 | + |
| 76 | +| Type | ์ค๋ช
| |
| 77 | +| --- | --- | |
| 78 | +| `feat` | ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ | |
| 79 | +| `fix` | ๋ฒ๊ทธ ์์ | |
| 80 | +| `docs` | ๋ฌธ์ ๋ณ๊ฒฝ (README, CONTRIBUTING ๋ฑ) | |
| 81 | +| `chore` | ๋น๋, ์์กด์ฑ, ์ค์ ๋ฑ ๋ณ๊ฒฝ (๋น์ฆ๋์ค ๋ก์ง ์ํฅ ์์) | |
| 82 | +| `refactor` | ์ฝ๋ ๋ฆฌํฉํ ๋ง | |
| 83 | +| `test` | ํ
์คํธ ์ฝ๋ ์ถ๊ฐ ๋๋ ์์ | |
| 84 | +| `perf` | ์ฑ๋ฅ ๊ฐ์ | |
| 85 | + |
| 86 | +> ์ปค๋ฐ ์์ |
| 87 | +> |
| 88 | +> - `feat(getcloser): add automatic deploy pipeline` |
| 89 | +> - `fix(getcloser): handle login token issue` |
| 90 | +> - `docs(devfactory): update contributing guide` |
| 91 | + |
| 92 | +--- |
| 93 | + |
| 94 | +## ๐ Merge & Review Rules |
| 95 | + |
| 96 | +- **์ง์ push ๊ธ์ง** (`main` ๋ธ๋์น ํฌํจ) |
| 97 | +- ๋ชจ๋ ๋ณ๊ฒฝ์ **Pull Request(PR)**๋ฅผ ํตํด ์งํ |
| 98 | +- **์๋น์ค ๊ตฌ๋ถ ๋ผ๋ฒจ(`์นํด์ง๊ธธ๋ฐ๋ผ`, `์๋ฃ์ฆ`, `devfactory`, `Bingo`) ์๋ ์ถ๊ฐ ํ์** |
| 99 | +- **๋ฆฌ๋ทฐ์ด 1์ธ ์ด์ ์น์ธ ํ์** |
| 100 | +- **PR ์์ฑ์๊ฐ ์ง์ ๋ณํฉ (rebase merge ๊ถ์ฅ)** |
| 101 | +- **๋ณํฉ ํ ๋ธ๋์น ์ญ์ ๊ถ์ฅ** |
| 102 | + |
| 103 | +๐ก **PR ์ํ๋ ๋ผ๋ฒจ์ ํตํด ๊ด๋ฆฌ๋ฉ๋๋ค.** |
| 104 | + |
| 105 | +| ๋ผ๋ฒจ | ์ค๋ช
| ๋ถ์ฌ ๋ฐฉ์ | |
| 106 | +| --- | --- | --- | |
| 107 | +| ๐จ `needs-review` | ์ PR ์์ฑ ์ ์๋ ๋ถ์ฌ (๋ฆฌ๋ทฐ ๋๊ธฐ ์ํ) | ์๋ | |
| 108 | +| ๐ง `changes-requested` | ๋ฆฌ๋ทฐ์ด๊ฐ ์ฝ๋ ์์ ์์ฒญ์ ๋จ๊ธด ์ํ | ๋ฆฌ๋ทฐ์ด๊ฐ ์๋ ๋ณ๊ฒฝ | |
| 109 | +| ๐ฉ `approved` | ๋ฆฌ๋ทฐ์ด ์น์ธ ์๋ฃ, ๋ณํฉ ๊ฐ๋ฅํ ์ํ | ๋ฆฌ๋ทฐ์ด๊ฐ ์๋ ๋ณ๊ฒฝ | |
| 110 | +| ๐ช `merged` | PR ๋ณํฉ ์๋ฃ ์ ์๋ ๋ถ์ฌ | ์๋ | |
| 111 | + |
| 112 | +๐ **๋ฆฌ๋ทฐ์ด ๊ฐ์ด๋** |
| 113 | +- ์ฝ๋ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ โ `changes-requested` |
| 114 | +- ์์ ํ์ธ ํ ์น์ธ ์ โ `approved` |
| 115 | + |
| 116 | +๐ง **PR ์์ฑ์ ๊ฐ์ด๋** |
| 117 | +- PR์ด **`approved` ์ํ**๊ฐ ๋๋ฉด **rebase merge** ๋ฐฉ์์ผ๋ก ์ง์ ๋ณํฉํฉ๋๋ค. |
| 118 | +- ๋ณํฉ์ด ์๋ฃ๋๋ฉด `merged` ๋ผ๋ฒจ์ด ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## โ
Pull Request Guide |
| 123 | + |
| 124 | +1. **PR ์ ๋ชฉ ๊ท์น** |
| 125 | + |
| 126 | + ``` |
| 127 | + feat(getcloser): add deploy pipeline |
| 128 | + fix(getcloser): resolve API error |
| 129 | + docs(devfactory): update contributing guide |
| 130 | + |
| 131 | + ``` |
| 132 | + |
| 133 | +2. **PR ๋ณธ๋ฌธ ํ
ํ๋ฆฟ** |
| 134 | + - **์์ฝ:** ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ๋ตํ ์ค๋ช
|
| 135 | + - **๊ด๋ จ ์ด์:** `Closes #123` |
| 136 | + - **ํ
์คํธ ๊ฒฐ๊ณผ:** ๊ฒ์ฆ ๋ฐฉ๋ฒ ๋ช
์ |
| 137 | + - **์คํฌ๋ฆฐ์ท (์ ํ):** UI ๋ณ๊ฒฝ ์ ์ฒจ๋ถ |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## ๐ Security & Environment Files |
| 142 | + |
| 143 | +- `.env`, API ํค, ๋น๋ฐ๋ฒํธ ๋ฑ **๋ฏผ๊ฐํ ์ ๋ณด ์ปค๋ฐ ๊ธ์ง** |
| 144 | +- `.env.example`๋ง Git์ ํฌํจ |
| 145 | +- ์ค์ ํ๊ฒฝ ๋ณ์๋ GitHub **Secrets / Variables**์์ ๊ด๋ฆฌ |
| 146 | + |
| 147 | +--- |
| 148 | + |
| 149 | +## ๐ก Workflow Example |
| 150 | + |
| 151 | +```bash |
| 152 | +# 1. ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ |
| 153 | +git checkout main |
| 154 | +git checkout -b feat/auto-deploy |
| 155 | +
|
| 156 | +# 2. ์์
๋ฐ ์ปค๋ฐ |
| 157 | +git commit -m "feat(getcloser): add CI/CD pipeline" |
| 158 | +
|
| 159 | +# 3. ์๊ฒฉ ํธ์ & PR ์์ฑ |
| 160 | +git push origin feat/auto-deploy |
| 161 | +
|
| 162 | +# 4. PR ์์ฑ โ 'needs-review' ์๋ ๋ถ์ฌ |
| 163 | +# 5. ๋ฆฌ๋ทฐ ์น์ธ โ rebase merge โ 'merged' ์๋ ๋ถ์ฌ |
| 164 | +# 6. ๋ธ๋์น ์ญ์ |
| 165 | +
|
| 166 | +``` |
| 167 | + |
| 168 | +--- |
| 169 | + |
| 170 | +## ๐ Notes |
| 171 | + |
| 172 | +- ์ฃผ์ ์๋น์ค: `getcloser`, `cert-system` |
| 173 | +- ๋ณ๋ ๋ฆฌํฌ์งํ ๋ฆฌ: `JobPT`, `event-bingo` |
0 commit comments