Repository navigation
149 lines (139 loc) · 4.76 KB
/
Copy pathci.yml
File metadata and controls
149 lines (139 loc) · 4.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
name: CI
# Scope: keyless, self-contained checks only. Everything that needs API keys or
# local benchmark data — eval:* and benchmark:* scripts, OmniMemEval suites,
# summary/judge providers — stays local by design.
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
static:
name: Static and package contracts
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
- run: npm ci
# Subpackage builds (verify:packages) use pnpm via the dsh/dsh-nmg
# pnpm-lock.yaml; corepack is bundled with the Node distribution.
- name: Enable corepack pnpm
run: |
corepack enable
pnpm --version
- name: Every test suite is run by a CI job, or acknowledged
run: npm run ci:uncovered-tests
- name: Shared static verification contract
run: npm run verify:static
- name: Dependency audit
run: npm audit --production --audit-level=high
onlion:
name: Service backend (onlion)
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
# Two manifests: the service builds its prompt tables with a root-level
# tool, so both dependency trees are installed.
cache-dependency-path: |
package-lock.json
onlion/package-lock.json
- run: npm ci
- name: Install service dependencies
run: npm ci
working-directory: onlion
- name: Service verification contract
run: npm run verify:onlion
tests:
name: Product tests and coverage
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
- run: npm ci
- name: Shared product verification contract
run: npm run verify:product-ci
research-tests:
name: Research characterization (non-blocking)
# Deliberately not aggregated by `all-checks-passed`, so a failure here never blocks a merge.
# It used to also carry `continue-on-error`, which made the job look green whatever happened:
# a track that cannot be told apart from "never ran" is the failure mode this repository
# forbids. Non-blocking is a branch-protection property, so the job now reports its real
# result (a visible red check on the pull request) while the required aggregate stays green.
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
- run: npm ci
- name: Shared research verification contract
run: npm run verify:research
node-compat:
name: Node 22 compatibility
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "22.19.0"
cache: npm
- run: npm ci
- name: Shared minimum-Node verification contract
run: npm run verify:node-compat
chaos:
name: Windows chaos tests
# These reproduce Windows-specific EPERM file pins and WAL locking. One
# supported runtime is enough here; Node compatibility is checked above.
# The job failed once in 153 runs, on main, so it runs on main pushes
# instead of every pull request: 2026-09-09-chaos-tests-on-main-pushes.
if: github.event_name == 'push'
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "24"
cache: npm
- run: npm ci
- name: Chaos tests (Windows)
env:
NMG_DAEMON_READY_TIMEOUT_MS: "60000"
run: npm run verify:chaos
all-checks-passed:
name: All checks passed
if: ${{ always() }}
needs: [static, tests, node-compat, chaos]
runs-on: ubuntu-latest
steps:
- name: Verify required jobs
env:
STATIC_RESULT: ${{ needs.static.result }}
TESTS_RESULT: ${{ needs.tests.result }}
NODE_COMPAT_RESULT: ${{ needs.node-compat.result }}
CHAOS_RESULT: ${{ needs.chaos.result }}
run: |
test "$STATIC_RESULT" = success
test "$TESTS_RESULT" = success
test "$NODE_COMPAT_RESULT" = success
# chaos is skipped on pull requests and required on main pushes.
test "$CHAOS_RESULT" = success || test "$CHAOS_RESULT" = skipped