-
Notifications
You must be signed in to change notification settings - Fork 10
150 lines (122 loc) · 3.76 KB
/
Copy pathci.yml
File metadata and controls
150 lines (122 loc) · 3.76 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
name: CI
permissions:
contents: read
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
paths-ignore:
- 'CHANGELOG.md'
- 'docs/**'
- '*.md'
jobs:
test:
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: Run linter
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Run all tests with coverage
run: npm run test:coverage
env:
SKIP_INTEGRATION_TESTS: true
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: matrix.node-version == '18.x'
with:
name: coverage-report
path: coverage/
- name: Update coverage badge
if: matrix.node-version == '18.x' && github.ref == 'refs/heads/main' && github.event_name == 'push'
run: |
# Check if coverage file exists
if [ -f "coverage/coverage-summary.json" ]; then
# Extract coverage percentage
COVERAGE=$(node -e "
const coverage = require('./coverage/coverage-summary.json');
const pct = coverage.total.statements.pct;
console.log(pct.toFixed(2));
")
# Create a simple JSON for later use
echo "{\"coverage\": \"$COVERAGE\"}" > coverage-percentage.json
else
echo "Coverage file not found, skipping badge update"
fi
- name: Upload coverage percentage
if: matrix.node-version == '18.x' && github.ref == 'refs/heads/main' && github.event_name == 'push' && hashFiles('coverage-percentage.json') != ''
uses: actions/upload-artifact@v4
with:
name: coverage-percentage
path: coverage-percentage.json
integration-test:
runs-on: ubuntu-latest
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
services:
postgres:
image: postgres:15
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: langfuse
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 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run integration tests
run: npm run test:integration
env:
LANGFUSE_PUBLIC_KEY: ${{ secrets.TEST_LANGFUSE_PUBLIC_KEY }}
LANGFUSE_SECRET_KEY: ${{ secrets.TEST_LANGFUSE_SECRET_KEY }}
LANGFUSE_HOST: ${{ secrets.TEST_LANGFUSE_HOST }}
docker-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v6
with:
context: .
push: false
tags: claude-telemetry-bridge:test
cache-from: type=gha
cache-to: type=gha,mode=max
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18.x
- name: Install dependencies
run: npm ci
- name: Run npm audit
run: npm audit --audit-level=high
continue-on-error: true