@@ -86,18 +86,15 @@ jobs:
8686 - name : Install dependencies
8787 run : |
8888 python -m pip install --upgrade pip setuptools wheel
89- # Install from the shared requirements directory
9089 if [ -f "${{ env.SHARED_DIR }}/requirements.txt" ]; then
9190 python -m pip install -r "${{ env.SHARED_DIR }}/requirements.txt"
9291 fi
93- # Install test-specific tools
9492 python -m pip install pytest pytest-cov pytest-asyncio
9593
9694 - name : Run backend test suite
9795 working-directory : ${{ env.BACKEND_DIR }}
9896 run : |
9997 set -euo pipefail
100- # Running pytest from the backend dir, ensuring coverage includes local code
10198 pytest tests/ \
10299 --tb=short \
103100 --strict-markers \
@@ -112,3 +109,40 @@ jobs:
112109 name : backend-coverage-report
113110 path : code/backend/coverage.xml
114111 retention-days : 30
112+
113+ # ============================================================
114+ # Job 3 -- Web Frontend Build
115+ # ============================================================
116+ frontend_build :
117+ name : Frontend Build
118+ runs-on : ubuntu-latest
119+ needs : code_quality
120+
121+ defaults :
122+ run :
123+ working-directory : web-frontend
124+
125+ steps :
126+ - name : Checkout repository
127+ uses : actions/checkout@v4
128+
129+ - name : Set up Node.js 20
130+ uses : actions/setup-node@v4
131+ with :
132+ node-version : " 20"
133+ cache : " npm"
134+ cache-dependency-path : web-frontend/package-lock.json
135+
136+ - name : Install dependencies
137+ run : npm ci
138+
139+ - name : Build frontend
140+ run : npm run build
141+
142+ - name : Upload build artifacts
143+ if : success()
144+ uses : actions/upload-artifact@v4
145+ with :
146+ name : frontend-dist
147+ path : web-frontend/dist/
148+ retention-days : 7
0 commit comments