-
Notifications
You must be signed in to change notification settings - Fork 5
228 lines (192 loc) · 6.06 KB
/
ci.yml
File metadata and controls
228 lines (192 loc) · 6.06 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
225
226
227
228
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Check formatting
run: deno task fmt:check
- name: Run linter
run: deno task lint
- name: Type check
run: deno task check
test:
name: Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Run tests
run: deno task test:coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: cov.lcov
fail_ci_if_error: false
test-examples:
name: Example Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Test echo agent example
run: |
cd packages/lib
timeout 10s deno run --allow-net --allow-env examples/echo-agent.ts --help || [ $? -eq 124 ]
package-check:
name: Package Validation
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Check package exports
run: |
# Test package imports
deno eval "
import * as schema from './packages/schema/mod.ts';
import * as lib from './packages/lib/mod.ts';
console.log('Package imports work');
"
- name: Validate deno.json files
run: |
# Check deno.json validity
deno eval "
const schemaConfig = JSON.parse(Deno.readTextFileSync('./packages/schema/deno.json'));
const libConfig = JSON.parse(Deno.readTextFileSync('./packages/lib/deno.json'));
const rootConfig = JSON.parse(Deno.readTextFileSync('./deno.json'));
console.log('deno.json files are valid');
"
security:
name: Security Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Check dependencies
run: |
# Check for external dependencies
deno info --json packages/schema/mod.ts | jq '.modules[].specifier' | grep -E "(npm:|jsr:)" || echo "No external dependencies"
deno info --json packages/lib/mod.ts | jq '.modules[].specifier' | grep -E "(npm:|jsr:)" || echo "No external dependencies"
benchmark:
name: Performance
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Performance test
run: |
# Simple timing test
time deno task test:unit
publish-check:
name: Publish Check
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Dry run publish all packages
run: deno task publish:dry-run
integration:
name: Integration
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Run integration tests
run: deno task test:integration
- name: Test cross-package imports
run: |
# Test package imports
deno eval "
import { RuntimeAgent } from './packages/lib/src/runtime-agent.ts';
import { events, schema } from './packages/schema/mod.ts';
console.log('Cross-package imports work');
"
cross-platform:
name: Cross Platform
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- name: Configure git (Windows fix)
if: matrix.os == 'windows-latest'
run: |
git config --system core.autocrlf false
git config --system core.eol lf
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Deno
uses: denoland/setup-deno@v2
with:
deno-version: v2.x
cache: true
- name: Run core tests
run: deno task test:unit
notify:
name: Notify
runs-on: ubuntu-latest
needs: [lint, test, test-examples, package-check, integration]
if: always()
steps:
- name: Notify on success
if: ${{ needs.lint.result == 'success' && needs.test.result == 'success' && needs.test-examples.result == 'success' && needs.package-check.result == 'success' && needs.integration.result == 'success' }}
run: echo "All checks passed"
- name: Notify on failure
if: ${{ needs.lint.result == 'failure' || needs.test.result == 'failure' || needs.test-examples.result == 'failure' || needs.package-check.result == 'failure' || needs.integration.result == 'failure' }}
run: |
echo "Some checks failed"
echo "Lint: ${{ needs.lint.result }}"
echo "Test: ${{ needs.test.result }}"
echo "Test Examples: ${{ needs.test-examples.result }}"
echo "Package Check: ${{ needs.package-check.result }}"
echo "Integration: ${{ needs.integration.result }}"
exit 1