-
-
Notifications
You must be signed in to change notification settings - Fork 1
243 lines (236 loc) · 11.1 KB
/
Copy pathci.yml
File metadata and controls
243 lines (236 loc) · 11.1 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
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# CI: 구조 게이트 + 브라우저 런타임 게이트. 게이트 정의의 SSOT는 tests/ (여기는 디스패치만).
name: ci
on:
push:
branches: [main]
pull_request:
# 게시 경로가 같은 게이트 집합을 재사용한다(목록 이중 관리 = 표류의 씨앗).
workflow_call:
permissions:
contents: read
jobs:
structure:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 22
# 의존성 0이지만 lockfile 정합(extraneous 잔재 감지)을 위해 npm ci를 먼저 돈다.
- run: npm ci
- run: npm run skills:check
- run: npm run skills:test-routing
- run: npm run skills:test-package
- run: npm run skills:test-mcp
- run: npm run skills:test-forward
- run: npm run skills:test-performance
- run: npm run test:contracts
- run: npm run test:engine-independence
- run: npm run test:package
- run: npm test
# 타입 계약 게이트: 손으로 유지하는 d.ts에 컴파일러를 붙인다. typescript는 CI 도구로만
# 쓰고 package 의존성으로 넣지 않는다(설치 의존성 0 유지).
- run: npm run test:types
browser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 22
# ubuntu 러너에 Google Chrome이 프리인스톨되어 있다. CI=true라 --no-sandbox가 자동 적용된다.
- run: npm run test:browser
env:
PYPROC_BROWSER: /usr/bin/google-chrome
PYPROC_GATE_OUT: gateMeasurements.json
# 설치 패키지 게이트: npm pack으로 설치한 pyproc을 격리 브라우저가 public specifier로 import한다.
- run: npm run test:installed
- run: npm run test:golden
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# 러너 실측 수치를 보존한다: 원장/리드미의 로컬 수치와 비교 가능한 근거.
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
name: gate-measurements
path: gateMeasurements.json
# 증거가 없으면 조용히 넘기지 않는다: PYPROC_GATE_OUT 배선이 죽으면 실측이 사라지고
# "측정했다"는 기록만 남는다. 러너는 RED에서도 이 파일을 쓴다.
if-no-files-found: error
# 예제 실행 게이트: 데모 페이지가 사람이 여는 그대로 완주하는지(진열장 회귀 방지).
- run: npm run test:examples
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# 공유 러너(4 vCPU)는 4-워커 샤딩이 물리적으로 2.0x를 못 넘는다(실측 1.90-1.98x).
# 여기서의 게이트는 데모 완주+정확성이고, 속도 주장 인증은 artifact 계약(S1)이다.
PYPROC_EXAMPLES_MIN_SPEEDUP: "1.3"
# 헤더 없는 호스팅 진단 게이트.
- run: npm run test:preflight
env:
PYPROC_BROWSER: /usr/bin/google-chrome
PYPROC_NO_COI: "1"
# Web Machine의 무자산 host, persistence, owner, fleet 계약.
- run: npm run test:web-machine
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: npm run test:web-machine-conformance
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# MCP 레시피 게이트: stdio JSON-RPC, sandbox control, read-only skill 도구의 실왕복.
- run: npm run test:mcp
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# 설치 tarball의 stable bin으로 Python, ordered screenshot, chunk read/delete를 완주한다.
- run: npm run test:mcp-product
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# 같은 제품 런타임의 언어 중립 Control Protocol, cancel, binary attachment를 설치물에서 검증한다.
- run: npm run test:control-product
- run: npm run test:frame-space
- run: npm run test:app-space
- run: npm run test:replay-graph
- run: npm run test:actuation
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: npm run test:windows-motor
if: runner.os == 'Windows'
- run: npm run test:delegated-tab
if: runner.os == 'Windows'
- run: npm run test:replay-space
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: python -m pip install -r pythonSdk/buildRequirements.txt
- run: npm run test:python-sdk
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# APX 정식 제품 게이트: occlusion, identity, delta, visual artifact와 EvidenceLoop를 검증한다.
- run: npm run test:apx
- run: npm run test:perception-computer
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# strict Experience Contract를 실제 Chromium에서 audit하고 Evidence Pack verify와 replay를 검증한다.
- run: npm run test:experience-verification
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# Opt-in browser automation broker: compact observe, 고수준 action pipeline, Python restore와
# 외부 Chromium effect의 비복원 경계, permission, 취소와 사망 outcome을 같은 MCP 흐름에서 검증한다.
- run: npm run test:browser-control
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: npm run test:browser-control-stress
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: npm run test:automation-lifecycle
env:
PYPROC_BROWSER: /usr/bin/google-chrome
- run: npm run test:action-convergence
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# 실제 Microsoft Edge의 Windows 배포 경계. 설치 tarball/골든 경로와 핵심 브라우저
# 계약을 Chrome과 독립해 문다. examples는 Chrome의 동일 쇼케이스를 그대로 반복해 비용이
# 커서 제외하고, WASI/v86 실행 자산 레인은 Ubuntu 전용 job이 계속 소유한다.
edge-release:
runs-on: windows-latest
env:
PYPROC_BROWSER: 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 22
- name: Microsoft Edge 설치 확인
shell: pwsh
run: |
if (-not (Test-Path -LiteralPath $env:PYPROC_BROWSER -PathType Leaf)) {
throw "Microsoft Edge executable not found: $env:PYPROC_BROWSER"
}
$edge = Get-Item -LiteralPath $env:PYPROC_BROWSER
Write-Host "Microsoft Edge $($edge.VersionInfo.ProductVersion)"
- run: npm ci
- run: npm run skills:check
- run: npm run skills:test-routing
- run: npm run skills:test-package
- run: npm run skills:test-mcp
- run: npm run skills:test-forward
- run: npm run skills:test-performance
- run: npm test
- run: npm run test:browser
env:
PYPROC_GATE_OUT: edgeGateMeasurements.json
# npm pack 설치물의 public specifier와 골든 워크플로를 실제 Edge에서 검증한다.
- run: npm run test:installed
- run: npm run test:golden
# 무자산 Web Machine 계약만 실행한다. 실제 WASI/v86 guest는 Ubuntu 레인이 소유한다.
- run: npm run test:web-machine
- run: npm run test:web-machine-conformance
- run: npm run test:mcp
- run: npm run test:mcp-product
- run: npm run test:control-product
- run: npm run test:frame-space
- run: npm run test:app-space
- run: npm run test:replay-graph
- run: npm run test:actuation
- run: npm run test:windows-motor
if: runner.os == 'Windows'
- run: npm run test:delegated-tab
if: runner.os == 'Windows'
- run: npm run test:replay-space
- run: python -m pip install -r pythonSdk/buildRequirements.txt
- run: npm run test:python-sdk
- run: npm run test:apx
- run: npm run test:perception-computer
- run: npm run test:experience-verification
- run: npm run test:browser-control
- run: npm run test:browser-control-stress
- run: npm run test:automation-lifecycle
- run: npm run test:action-convergence
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
if: always()
with:
name: edge-gate-measurements
path: edgeGateMeasurements.json
if-no-files-found: error
web-computer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 22
# 실행 자산(v86 engine/firmware/guest image)은 hash 고정 development channel이며
# 미추적이다: 준비 스크립트가 받아오고 catalog 버전 키로 캐시한다.
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: apps/webComputer/assets
key: web-computer-assets-${{ hashFiles('apps/webComputer/assetCatalog.json') }}
# 3-process 제품 E2E: 초기 부팅 -> 브라우저 프로세스 재시작 콜드 복원 -> 새 프로필 import.
- run: npm run test:web-computer
env:
PYPROC_BROWSER: /usr/bin/google-chrome
# x86 자산 레인. 오랫동안 "자산이 gitignore라 CI에서 못 돈다"고 적혀 있었지만 그것은 낡은
# 문장이었다: 위 job이 같은 catalog의 같은 자산을 매 push마다 받아온다. gitignore는 "받을 수
# 없다"가 아니라 "커밋하지 않는다"이고, 준비 스크립트가 SHA-256 핀으로 받아온다.
web-machine-x86:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
with:
node-version: 22
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: tests/webMachine/fixtures/v86/assets
key: web-machine-v86-assets-${{ hashFiles('scripts/assetCatalog.json') }}
# 실 x86 Linux guest를 부팅해 dual-boot과 장치(디스플레이·프레임버퍼·패킷·포인터)를 문다.
# 타임아웃을 올린 이유는 공유 러너에서 v86 부팅이 느리기 때문이다(자산이 아니라 CPU 몫).
- run: npm run test:web-machine:v86
env:
PYPROC_BROWSER: /usr/bin/google-chrome
PYPROC_GATE_TIMEOUT: "600000"
# exact packed package가 Python, Linux, source-pinned Node를 한 signed computer로 옮기고
# 변조 Node image를 active swap 전에 거절하는지 같은 x86 asset lane에서 반복한다.
- run: npm run test:node-guest
env:
PYPROC_BROWSER: /usr/bin/google-chrome
PYPROC_GATE_TIMEOUT: "900000"
PYPROC_NODE_GUEST_HEADED: "0"