Skip to content

Artifact

Artifact #4

Workflow file for this run

name: CI Workflow
on:
push:
branches:
- week5
- main
pull_request:
branches:
- main
workflow_dispatch:
jobs:
backend-tests:
name: Backend Tests (Node.js ${{ matrix.node-version }})
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: week5/backend/package-lock.json
- name: Install backend dependencies
run: |
cd week5/backend
npm ci
- name: Run backend tests
run: |
cd week5/backend
npm test -- --coverage --coverageReporters=json --coverageReporters=lcov
- name: Upload backend test artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: backend-test-results-node-${{ matrix.node-version }}
path: |
week5/backend/coverage/
week5/backend/package.json
week5/backend/jest.config.js
retention-days: 30
- name: Start backend server and health check
run: |
cd week5/backend
npm start &
sleep 5
curl -f http://localhost:3000/health
curl -f http://localhost:3000/api/users
pkill -f "node server.js"
- name: Validate backend deployment
run: |
cd week5/backend
# Start server in background for validation
npm start &
SERVER_PID=$!
sleep 8
echo "πŸš€ Running comprehensive API validation..."
# Test health endpoint
echo "βœ… Testing health endpoint..."
curl -f -s http://localhost:3000/health | jq '.'
# Test root endpoint
echo "βœ… Testing root endpoint..."
curl -f -s http://localhost:3000/ | jq '.'
# Test get all users
echo "βœ… Testing GET /api/users..."
curl -f -s http://localhost:3000/api/users | jq '.'
# Test create user
echo "βœ… Testing POST /api/users..."
NEW_USER=$(curl -f -s -X POST http://localhost:3000/api/users \
-H "Content-Type: application/json" \
-d '{"name":"CI Test User","email":"ci-test@example.com"}')
echo "$NEW_USER" | jq '.'
USER_ID=$(echo "$NEW_USER" | jq -r '.id')
# Test get specific user
echo "βœ… Testing GET /api/users/$USER_ID..."
curl -f -s http://localhost:3000/api/users/$USER_ID | jq '.'
# Test delete user
echo "βœ… Testing DELETE /api/users/$USER_ID..."
curl -f -s -X DELETE http://localhost:3000/api/users/$USER_ID | jq '.'
# Test 404 handling
echo "βœ… Testing 404 handling..."
curl -s http://localhost:3000/nonexistent | jq '.'
echo "πŸŽ‰ All API endpoints validated successfully!"
# Clean up
kill $SERVER_PID
frontend-tests:
name: Frontend Tests (Node.js ${{ matrix.node-version }})
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
cache-dependency-path: week5/frontend/package-lock.json
- name: Install frontend dependencies
run: |
cd week5/frontend
npm ci
- name: Run frontend tests
run: |
cd week5/frontend
npm test -- --coverage --coverageReporters=json --coverageReporters=lcov
- name: Upload frontend test artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: frontend-test-results-node-${{ matrix.node-version }}
path: |
week5/frontend/coverage/
week5/frontend/package.json
week5/frontend/jest.config.js
retention-days: 30
- name: Validate frontend deployment
run: |
cd week5/frontend
# Start a simple HTTP server for frontend
python3 -m http.server 8080 &
SERVER_PID=$!
sleep 5
echo "πŸš€ Running frontend validation..."
# Test if HTML loads
echo "βœ… Testing HTML page load..."
curl -f -s http://localhost:8080/index.html | head -20
# Test if CSS loads
echo "βœ… Testing CSS file..."
curl -f -s http://localhost:8080/styles.css | head -10
# Test if JavaScript loads
echo "βœ… Testing JavaScript file..."
curl -f -s http://localhost:8080/app.js | head -10
echo "πŸŽ‰ Frontend files validated successfully!"
# Clean up
kill $SERVER_PID