diff --git a/.github/workflows/nodejs-ci.yml b/.github/workflows/nodejs-ci.yml new file mode 100644 index 0000000..752745a --- /dev/null +++ b/.github/workflows/nodejs-ci.yml @@ -0,0 +1,47 @@ +name: Node.js CI + +on: + push: + branches: [ "main", "feature/*" ] + pull_request: + branches: [ "main" ] + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x, 20.x] + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Start server and test endpoints + run: | + npm start & + sleep 5 + + # Test health endpoint + curl -f http://localhost:3000/health || exit 1 + + # Test version endpoint + curl -f http://localhost:3000/api/v1/version || exit 1 + + # Test prices endpoint + curl -f http://localhost:3000/api/v1/prices || exit 1 + + # Test rate limiting + for i in {1..5}; do curl -s http://localhost:3000/api/v1/test; done + + # Kill server + pkill -f "node server.js" diff --git a/server.js b/server.js index 54acfcb..420139d 100644 --- a/server.js +++ b/server.js @@ -1,9 +1,14 @@ const express = require('express'); const rateLimit = require('express-rate-limit'); const axios = require('axios'); +const packageJson = require('./package.json'); require('dotenv').config(); +function logWithTime(message) { + console.log(`[${new Date().toISOString()}] ${message}`); +} + const app = express(); const PORT = process.env.PORT || 3000; @@ -74,6 +79,6 @@ app.get('/api/v1/test', (req, res) => { }); app.listen(PORT, () => { - console.log(`Server running on port ${PORT}`); - console.log(`Health check available at: http://localhost:${PORT}/health`); + logWithTime(`Server running on port ${PORT}`); + logWithTime(`Health check available at: http://localhost:${PORT}/health`); });