Artifact #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |