운영: mainPlan을 git 추적에서 뺀다 #312
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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" |