1616
1717jobs :
1818 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
19- # 🔍 Security Audit
19+ # 🔬 Main CI Pipeline
2020 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
21- audit :
22- name : 🔒 Security Audit
21+ ci :
22+ name : 🔬 CI Pipeline
2323 runs-on : ubuntu-latest
24- timeout-minutes : 5
24+ timeout-minutes : 15
2525
2626 steps :
2727 - name : 📥 Checkout
@@ -41,165 +41,62 @@ jobs:
4141 - name : 📚 Install dependencies
4242 run : pnpm install --frozen-lockfile
4343
44- - name : 🔍 Run security audit
44+ # ─────────────────────────────────────────────────────────────────
45+ # Security & Quality Checks
46+ # ─────────────────────────────────────────────────────────────────
47+ - name : 🔒 Security audit
4548 run : pnpm audit-ci --config .audit-ci.json
4649
47- - name : 📊 Summary
48- if : always()
49- run : |
50- echo "### 🔒 Security Audit Complete" >> $GITHUB_STEP_SUMMARY
51- echo "" >> $GITHUB_STEP_SUMMARY
52- echo "✅ No critical vulnerabilities detected" >> $GITHUB_STEP_SUMMARY
53-
54- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
55- # 💎 Code Quality
56- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57- lint :
58- name : 💎 Lint & Format
59- runs-on : ubuntu-latest
60- timeout-minutes : 5
61-
62- steps :
63- - name : 📥 Checkout
64- uses : actions/checkout@v4
65-
66- - name : 📦 Setup pnpm
67- uses : pnpm/action-setup@v4
68- with :
69- version : 10
70-
71- - name : 🔧 Setup Node.js
72- uses : actions/setup-node@v4
73- with :
74- node-version : ${{ env.NODE_VERSION_MAIN }}
75- cache : ' pnpm'
76-
77- - name : 📚 Install dependencies
78- run : pnpm install --frozen-lockfile
79-
80- - name : 🎨 Run linting
50+ - name : 💎 Lint & format check
8151 run : pnpm lint
8252
83- - name : 📊 Summary
84- if : always()
85- run : |
86- echo "### 💎 Code Quality Check" >> $GITHUB_STEP_SUMMARY
87- echo "" >> $GITHUB_STEP_SUMMARY
88- echo "- ✅ Biome linting passed" >> $GITHUB_STEP_SUMMARY
89- echo "- ✅ Prettier formatting verified" >> $GITHUB_STEP_SUMMARY
90-
91- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
92- # 🧪 Unit Tests (Matrix)
93- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
94- test :
95- name : 🧪 Test (Node ${{ matrix.node-version }})
96- runs-on : ubuntu-latest
97- timeout-minutes : 10
98-
99- strategy :
100- fail-fast : false
101- matrix :
102- node-version : ['18', '20', '22']
103-
104- steps :
105- - name : 📥 Checkout
106- uses : actions/checkout@v4
107-
108- - name : 📦 Setup pnpm
109- uses : pnpm/action-setup@v4
110- with :
111- version : 10
112-
113- - name : 🔧 Setup Node.js ${{ matrix.node-version }}
114- uses : actions/setup-node@v4
115- with :
116- node-version : ${{ matrix.node-version }}
117- cache : ' pnpm'
118-
119- - name : 📚 Install dependencies
120- run : pnpm install --frozen-lockfile
53+ # ─────────────────────────────────────────────────────────────────
54+ # Build & Test
55+ # ─────────────────────────────────────────────────────────────────
56+ - name : 🏗️ Build TypeScript
57+ run : pnpm build
12158
12259 - name : 🧪 Run unit tests
12360 run : pnpm test -- --ci --runInBand --coverage
124- env :
125- JEST_JUNIT_CLASSNAME : ' {filepath}'
12661
127- - name : 📊 Upload coverage to Codecov
62+ - name : 🚀 Run integration tests
63+ run : pnpm test:integration
64+
65+ # ─────────────────────────────────────────────────────────────────
66+ # Coverage & Summary
67+ # ─────────────────────────────────────────────────────────────────
68+ - name : 📊 Upload coverage
12869 uses : codecov/codecov-action@v5
129- if : matrix.node-version == env.NODE_VERSION_MAIN
13070 with :
13171 token : ${{ secrets.CODECOV_TOKEN }}
13272 files : ./coverage/coverage-final.json
13373 flags : unittests
134- name : node-${{ matrix.node-version }}
13574 fail_ci_if_error : false
13675
137- - name : 📈 Summary
76+ - name : ✅ CI Summary
13877 if : always()
13978 run : |
140- echo "### 🧪 Unit Tests - Node ${{ matrix.node-version }} " >> $GITHUB_STEP_SUMMARY
79+ echo "### ✅ CI Pipeline Complete " >> $GITHUB_STEP_SUMMARY
14180 echo "" >> $GITHUB_STEP_SUMMARY
142- if [ -f coverage/coverage-summary.json ]; then
143- echo "**Coverage Summary:**" >> $GITHUB_STEP_SUMMARY
144- echo '```' >> $GITHUB_STEP_SUMMARY
145- cat coverage/coverage-summary.json | head -20 >> $GITHUB_STEP_SUMMARY
146- echo '```' >> $GITHUB_STEP_SUMMARY
147- fi
148-
149- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
150- # 🏗️ Build
151- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
152- build :
153- name : 🏗️ Build
154- runs-on : ubuntu-latest
155- timeout-minutes : 5
156-
157- steps :
158- - name : 📥 Checkout
159- uses : actions/checkout@v4
160-
161- - name : 📦 Setup pnpm
162- uses : pnpm/action-setup@v4
163- with :
164- version : 10
165-
166- - name : 🔧 Setup Node.js
167- uses : actions/setup-node@v4
168- with :
169- node-version : ${{ env.NODE_VERSION_MAIN }}
170- cache : ' pnpm'
171-
172- - name : 📚 Install dependencies
173- run : pnpm install --frozen-lockfile
174-
175- - name : 🔨 Build TypeScript
176- run : pnpm build
177-
178- - name : 📦 Upload build artifacts
179- uses : actions/upload-artifact@v4
180- with :
181- name : build-output
182- path : build/
183- retention-days : 7
184-
185- - name : 📊 Summary
186- if : always()
187- run : |
188- echo "### 🏗️ Build Complete" >> $GITHUB_STEP_SUMMARY
81+ echo "**Checks Run:**" >> $GITHUB_STEP_SUMMARY
82+ echo "- 🔒 Security audit" >> $GITHUB_STEP_SUMMARY
83+ echo "- 💎 Linting & formatting" >> $GITHUB_STEP_SUMMARY
84+ echo "- 🏗️ TypeScript build" >> $GITHUB_STEP_SUMMARY
85+ echo "- 🧪 Unit tests with coverage" >> $GITHUB_STEP_SUMMARY
86+ echo "- 🚀 Integration tests" >> $GITHUB_STEP_SUMMARY
18987 echo "" >> $GITHUB_STEP_SUMMARY
190- echo "**Build Artifacts:**" >> $GITHUB_STEP_SUMMARY
191- echo '```' >> $GITHUB_STEP_SUMMARY
192- ls -lah build/ | head -20 >> $GITHUB_STEP_SUMMARY
193- echo '```' >> $GITHUB_STEP_SUMMARY
88+ echo "🎉 All checks passed!" >> $GITHUB_STEP_SUMMARY
19489
19590 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
196- # 🚀 Integration Tests
91+ # 🧪 Multi-Version Compatibility Check (Node 18, 20)
19792 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
198- integration :
199- name : 🚀 Integration Tests
93+ compat :
94+ name : 🧪 Node ${{ matrix.node-version }}
20095 runs-on : ubuntu-latest
201- needs : [build, test]
20296 timeout-minutes : 10
97+ strategy :
98+ matrix :
99+ node-version : ['18', '20']
203100
204101 steps :
205102 - name : 📥 Checkout
@@ -210,60 +107,17 @@ jobs:
210107 with :
211108 version : 10
212109
213- - name : 🔧 Setup Node.js
110+ - name : 🔧 Setup Node.js ${{ matrix.node-version }}
214111 uses : actions/setup-node@v4
215112 with :
216- node-version : ${{ env.NODE_VERSION_MAIN }}
113+ node-version : ${{ matrix.node-version }}
217114 cache : ' pnpm'
218115
219116 - name : 📚 Install dependencies
220117 run : pnpm install --frozen-lockfile
221118
222- - name : 📥 Download build artifacts
223- uses : actions/download-artifact@v4
224- with :
225- name : build-output
226- path : build/
227-
228- - name : 🚀 Run integration tests
229- run : pnpm test:integration
230-
231- - name : 📊 Summary
232- if : always()
233- run : |
234- echo "### 🚀 Integration Tests Complete" >> $GITHUB_STEP_SUMMARY
235- echo "" >> $GITHUB_STEP_SUMMARY
236- echo "- ✅ Server-side runtime env injection verified" >> $GITHUB_STEP_SUMMARY
237- echo "- ✅ Client-side window.__ENV script verified" >> $GITHUB_STEP_SUMMARY
238- echo "- ✅ Context provider mode verified" >> $GITHUB_STEP_SUMMARY
239- echo "- ✅ Next.js standalone mode verified" >> $GITHUB_STEP_SUMMARY
240-
241- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
242- # ✅ Status Check
243- # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
244- ci-success :
245- name : ✅ CI Success
246- runs-on : ubuntu-latest
247- needs : [audit, lint, test, build, integration]
248- if : always()
249-
250- steps :
251- - name : ✅ All checks passed
252- if : needs.audit.result == 'success' && needs.lint.result == 'success' && needs.test.result == 'success' && needs.build.result == 'success' && needs.integration.result == 'success'
253- run : |
254- echo "### ✅ All CI Checks Passed!" >> $GITHUB_STEP_SUMMARY
255- echo "" >> $GITHUB_STEP_SUMMARY
256- echo "🎉 Ready for review and merge!" >> $GITHUB_STEP_SUMMARY
119+ - name : 🏗️ Build
120+ run : pnpm build
257121
258- - name : ❌ CI checks failed
259- if : needs.audit.result != 'success' || needs.lint.result != 'success' || needs.test.result != 'success' || needs.build.result != 'success' || needs.integration.result != 'success'
260- run : |
261- echo "### ❌ CI Checks Failed" >> $GITHUB_STEP_SUMMARY
262- echo "" >> $GITHUB_STEP_SUMMARY
263- echo "**Status:**" >> $GITHUB_STEP_SUMMARY
264- echo "- Audit: ${{ needs.audit.result }}" >> $GITHUB_STEP_SUMMARY
265- echo "- Lint: ${{ needs.lint.result }}" >> $GITHUB_STEP_SUMMARY
266- echo "- Test: ${{ needs.test.result }}" >> $GITHUB_STEP_SUMMARY
267- echo "- Build: ${{ needs.build.result }}" >> $GITHUB_STEP_SUMMARY
268- echo "- Integration: ${{ needs.integration.result }}" >> $GITHUB_STEP_SUMMARY
269- exit 1
122+ - name : 🧪 Test
123+ run : pnpm test -- --ci --runInBand
0 commit comments