-
Notifications
You must be signed in to change notification settings - Fork 1
224 lines (176 loc) · 5.64 KB
/
test.yml
File metadata and controls
224 lines (176 loc) · 5.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
name: Test PostgreSQL Integration
on:
push:
branches: [main, develop]
pull_request:
branches: [main, develop]
jobs:
unit-tests:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Compile TypeScript
run: npm run compile
- name: Run unit tests
run: npm run test
- name: Generate coverage report
run: npm run coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
files: ./coverage/coverage-final.json
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false
integration-tests:
runs-on: ubuntu-latest
strategy:
matrix:
postgres-version: [12, 14, 15, 16, 17]
services:
postgres:
image: postgres:${{ matrix.postgres-version }}-alpine
env:
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
POSTGRES_DB: testdb
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Compile TypeScript
run: npm run compile
- name: Run integration tests
run: npm run test:integration
env:
DB_HOST: localhost
DB_PORT: 5432
DB_USER: testuser
DB_PASSWORD: testpass
DB_NAME: testdb
- name: Upload integration test results
if: always()
uses: actions/upload-artifact@v4
with:
name: integration-test-results-pg${{ matrix.postgres-version }}
path: test-results/
renderer-component-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Compile TypeScript
run: npm run compile
- name: Run renderer component tests
run: npm run test:renderer
- name: Generate renderer test coverage
run: npm run test:renderer:coverage
docker-integration:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Install PostgreSQL client
run: |
sudo apt-get update
sudo apt-get install -y postgresql-client
- name: Start PostgreSQL test containers
run: docker compose -f docker-compose.test.yml up -d
- name: Wait for PostgreSQL services
run: |
for port in 5412 5414 5415 5416 5417; do
echo "Waiting for PostgreSQL on port $port..."
until pg_isready -h localhost -p $port -U testuser; do
sleep 1
done
done
env:
PGPASSWORD: testpass
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Compile TypeScript
run: npm run compile
- name: Run version compatibility tests
run: npm run test:versions
env:
DB_HOST: localhost
DB_USER: testuser
DB_PASSWORD: testpass
DB_NAME: testdb
- name: Cleanup Docker containers
if: always()
run: docker compose -f docker-compose.test.yml down
lint-and-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Check TypeScript
run: npm run compile -- --noEmit
coverage-report:
runs-on: ubuntu-latest
needs: [unit-tests, integration-tests, renderer-component-tests]
if: always()
steps:
- uses: actions/checkout@v4
- name: Download all coverage reports
uses: actions/download-artifact@v4
with:
path: coverage-reports
- name: Generate coverage summary
run: |
echo "## Test Coverage Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Unit Tests: ✓ Completed" >> $GITHUB_STEP_SUMMARY
echo "Integration Tests: ✓ Completed (PostgreSQL 12-17)" >> $GITHUB_STEP_SUMMARY
echo "Renderer Component Tests: ✓ Completed" >> $GITHUB_STEP_SUMMARY
echo "Docker Integration: ✓ Completed" >> $GITHUB_STEP_SUMMARY
security-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run security audit
run: npm audit --audit-level=moderate || true
- name: Check for known vulnerabilities
run: |
npm list | grep vulnerable || echo "No known vulnerabilities found"