|
62 | 62 | strategy: |
63 | 63 | fail-fast: false |
64 | 64 | matrix: |
65 | | - app: [web, admin] |
| 65 | + include: |
| 66 | + - app: web |
| 67 | + filter: web |
| 68 | + - app: admin |
| 69 | + filter: admin |
| 70 | + - app: design-system |
| 71 | + filter: '@muneo/design-system' |
66 | 72 |
|
67 | 73 | steps: |
68 | 74 | - name: Checkout code |
@@ -90,22 +96,22 @@ jobs: |
90 | 96 | - name: Type check |
91 | 97 | id: type-check |
92 | 98 | continue-on-error: true |
93 | | - run: pnpm turbo type-check --filter=${{ matrix.app }} |
| 99 | + run: pnpm turbo type-check --filter=${{ matrix.filter }} |
94 | 100 |
|
95 | 101 | - name: Lint check |
96 | 102 | id: lint |
97 | 103 | continue-on-error: true |
98 | | - run: pnpm turbo lint --filter=${{ matrix.app }} |
| 104 | + run: pnpm turbo lint --filter=${{ matrix.filter }} |
99 | 105 |
|
100 | 106 | - name: Run tests |
101 | 107 | id: test |
102 | 108 | continue-on-error: true |
103 | | - run: pnpm turbo test --filter=${{ matrix.app }} |
| 109 | + run: pnpm turbo test --filter=${{ matrix.filter }} |
104 | 110 |
|
105 | 111 | - name: Build |
106 | 112 | id: build |
107 | 113 | continue-on-error: true |
108 | | - run: pnpm turbo build --filter=${{ matrix.app }} |
| 114 | + run: pnpm turbo build --filter=${{ matrix.filter }} |
109 | 115 |
|
110 | 116 | - name: Write CI result |
111 | 117 | if: always() |
@@ -203,27 +209,40 @@ jobs: |
203 | 209 | return JSON.parse(fs.readFileSync(filePath, 'utf8')); |
204 | 210 | }; |
205 | 211 |
|
206 | | - const icon = (status) => status === 'success' ? '✅' : status === 'skipped' ? '⏭️' : '❌'; |
207 | | - const label = (status) => status === 'success' ? '통과' : status === 'skipped' ? '스킵' : '실패'; |
| 212 | + const icon = (status) => { |
| 213 | + if (status === 'success') return '✅'; |
| 214 | + if (status === 'skipped') return '⏭️'; |
| 215 | + if (status === 'not-applicable') return '➖'; |
| 216 | + return '❌'; |
| 217 | + }; |
| 218 | + const label = (status) => { |
| 219 | + if (status === 'success') return '통과'; |
| 220 | + if (status === 'skipped') return '스킵'; |
| 221 | + if (status === 'not-applicable') return '해당 없음'; |
| 222 | + return '실패'; |
| 223 | + }; |
208 | 224 |
|
209 | 225 | const formatResult = getStepResult(formatJob, 'Format check'); |
210 | 226 | const webResult = readAppResult('web'); |
211 | 227 | const adminResult = readAppResult('admin'); |
| 228 | + const dsResult = readAppResult('design-system'); |
| 229 | + // 디자인 시스템은 라이브러리라 build 단계가 의도적으로 없음 |
| 230 | + dsResult.build = 'not-applicable'; |
212 | 231 |
|
213 | 232 | const rows = [ |
214 | | - ['Type', webResult.typeCheck, adminResult.typeCheck], |
215 | | - ['Prettier', formatResult, formatResult], |
216 | | - ['Lint', webResult.lint, adminResult.lint], |
217 | | - ['tests', webResult.test, adminResult.test], |
218 | | - ['Build', webResult.build, adminResult.build], |
| 233 | + ['Type', webResult.typeCheck, adminResult.typeCheck, dsResult.typeCheck], |
| 234 | + ['Prettier', formatResult, formatResult, formatResult], |
| 235 | + ['Lint', webResult.lint, adminResult.lint, dsResult.lint], |
| 236 | + ['tests', webResult.test, adminResult.test, dsResult.test], |
| 237 | + ['Build', webResult.build, adminResult.build, dsResult.build], |
219 | 238 | ]; |
220 | 239 |
|
221 | 240 | let comment = '## 🔍 CI 검증 결과\n\n'; |
222 | | - comment += '| 검증 항목 | web | admin |\n'; |
223 | | - comment += '|-----------|-----|-------|\n'; |
| 241 | + comment += '| 검증 항목 | web | admin | design-system |\n'; |
| 242 | + comment += '|-----------|-----|-------|---------------|\n'; |
224 | 243 |
|
225 | | - for (const [name, webStatus, adminStatus] of rows) { |
226 | | - comment += `| **${name}** | ${icon(webStatus)} ${label(webStatus)} | ${icon(adminStatus)} ${label(adminStatus)} |\n`; |
| 244 | + for (const [name, webStatus, adminStatus, dsStatus] of rows) { |
| 245 | + comment += `| **${name}** | ${icon(webStatus)} ${label(webStatus)} | ${icon(adminStatus)} ${label(adminStatus)} | ${icon(dsStatus)} ${label(dsStatus)} |\n`; |
227 | 246 | } |
228 | 247 |
|
229 | 248 | try { |
|
0 commit comments