Skip to content

Commit 77c95dd

Browse files
committed
기능: Web Computer 북극성 수명주기를 통합
내구 Web Computer 수명주기와 원자적 서명 이미지 이관을 공개 핸들에 결합했다. Python과 Buildroot Linux를 패킷, 디스크, 화면, 입력 장치 경계로 연결했다. Buildroot 재현 입력에 9P, VT, 자동 마운트 구성을 추가하고 레시피를 v2로 분리했다. 알 수 없는 boot 옵션과 PYMACHINE2 및 host proxy 이미지 경계를 명시적으로 거부한다. 은퇴한 mainPlan은 복원하지 않고 docs, tests, Git 이력으로 정본을 수렴했다. 검증: npm test 3198/3198, 타입 검사와 자산 provenance 검사 통과.
1 parent c07c67d commit 77c95dd

261 files changed

Lines changed: 2805 additions & 16385 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/buildroot-guest.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ jobs:
2424
env:
2525
PYPROC_BUILDROOT_WORKSPACE: ${{ github.workspace }}/../pyproc-buildroot-${{ matrix.slot }}
2626
steps:
27-
- uses: actions/checkout@v7
28-
- uses: actions/setup-node@v7
27+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
28+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
2929
with:
3030
node-version: 22
3131
cache: npm
@@ -38,15 +38,15 @@ jobs:
3838
echo "dist=$(realpath "$PYPROC_BUILDROOT_WORKSPACE/dist")" >> "$GITHUB_OUTPUT"
3939
echo "legal=$(realpath "$PYPROC_BUILDROOT_WORKSPACE/output/legal-info")" >> "$GITHUB_OUTPUT"
4040
- name: Upload independent build evidence
41-
uses: actions/upload-artifact@v7
41+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
4242
with:
4343
name: pyproc-buildroot-guest-${{ matrix.slot }}
4444
path: ${{ steps.evidence.outputs.dist }}/
4545
if-no-files-found: error
4646
retention-days: 30
4747
- name: Upload complete legal material
4848
if: matrix.slot == 'a'
49-
uses: actions/upload-artifact@v7
49+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
5050
with:
5151
name: pyproc-buildroot-legal-info
5252
path: ${{ steps.evidence.outputs.legal }}/
@@ -60,11 +60,11 @@ jobs:
6060
runs-on: ubuntu-24.04
6161
timeout-minutes: 15
6262
steps:
63-
- uses: actions/download-artifact@v8
63+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
6464
with:
6565
name: pyproc-buildroot-guest-a
6666
path: .cache/repro/a
67-
- uses: actions/download-artifact@v8
67+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
6868
with:
6969
name: pyproc-buildroot-guest-b
7070
path: .cache/repro/b
@@ -98,7 +98,7 @@ jobs:
9898
await writeFile(`${base}/reproducibility-manifest.json`, `${JSON.stringify(receipt, null, 2)}\n`);
9999
NODE
100100
- name: Upload verified reproducible guest
101-
uses: actions/upload-artifact@v7
101+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
102102
with:
103103
name: pyproc-buildroot-guest-verified
104104
path: .cache/repro/verified/

.github/workflows/ci.yml

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ on:
88
# 게시 경로가 같은 게이트 집합을 재사용한다(목록 이중 관리 = 표류의 씨앗).
99
workflow_call:
1010

11+
permissions:
12+
contents: read
13+
1114
jobs:
1215
structure:
1316
runs-on: ubuntu-latest
1417
steps:
15-
- uses: actions/checkout@v7
16-
- uses: actions/setup-node@v7
18+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
19+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
1720
with:
1821
node-version: 22
1922
# 의존성 0이지만 lockfile 정합(extraneous 잔재 감지)을 위해 npm ci를 먼저 돈다.
@@ -27,8 +30,8 @@ jobs:
2730
browser:
2831
runs-on: ubuntu-latest
2932
steps:
30-
- uses: actions/checkout@v7
31-
- uses: actions/setup-node@v7
33+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
34+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
3235
with:
3336
node-version: 22
3437
# ubuntu 러너에 Google Chrome이 프리인스톨되어 있다. CI=true라 --no-sandbox가 자동 적용된다.
@@ -38,10 +41,11 @@ jobs:
3841
PYPROC_GATE_OUT: gateMeasurements.json
3942
# 제품 소비자 게이트: npm pack으로 설치한 pyproc을 브라우저 앱이 public specifier로 import한다.
4043
- run: npm run test:consumer
44+
- run: npm run test:golden
4145
env:
4246
PYPROC_BROWSER: /usr/bin/google-chrome
4347
# 러너 실측 수치를 보존한다: 원장/리드미의 로컬 수치와 비교 가능한 근거.
44-
- uses: actions/upload-artifact@v7
48+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
4549
if: always()
4650
with:
4751
name: gate-measurements
@@ -64,7 +68,7 @@ jobs:
6468
PYPROC_NO_COI: "1"
6569
# WASI 세션 게이트: pyproc/wasi subpath(bootWasi/WasiSession)의 실배선.
6670
# 30MB 자산은 릴리즈 zip에서 준비하고 버전 키로 캐시해 SKIP이 아니라 실제 GREEN으로 돈다.
67-
- uses: actions/cache@v4
71+
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
6872
with:
6973
path: |
7074
tests/attempts/enginePort/python-3.14.6.wasm
@@ -89,16 +93,56 @@ jobs:
8993
env:
9094
PYPROC_BROWSER: /usr/bin/google-chrome
9195

96+
# 실제 Microsoft Edge의 Windows 배포 경계. 설치 tarball 소비자/골든 경로와 핵심 브라우저
97+
# 계약을 Chrome과 독립해 문다. examples는 Chrome의 동일 쇼케이스를 그대로 반복해 비용이
98+
# 커서 제외하고, WASI/v86 실행 자산 레인은 아래 Ubuntu 전용 job이 계속 소유한다.
99+
edge-release:
100+
runs-on: windows-latest
101+
env:
102+
PYPROC_BROWSER: 'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe'
103+
steps:
104+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
105+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
106+
with:
107+
node-version: 22
108+
- name: Microsoft Edge 설치 확인
109+
shell: pwsh
110+
run: |
111+
if (-not (Test-Path -LiteralPath $env:PYPROC_BROWSER -PathType Leaf)) {
112+
throw "Microsoft Edge executable not found: $env:PYPROC_BROWSER"
113+
}
114+
$edge = Get-Item -LiteralPath $env:PYPROC_BROWSER
115+
Write-Host "Microsoft Edge $($edge.VersionInfo.ProductVersion)"
116+
- run: npm ci
117+
- run: npm test
118+
- run: npm run test:browser
119+
env:
120+
PYPROC_GATE_OUT: edgeGateMeasurements.json
121+
# npm pack 설치물의 public specifier와 골든 워크플로를 실제 Edge에서 검증한다.
122+
- run: npm run test:consumer
123+
- run: npm run test:golden
124+
# 무자산 Web Machine 계약만 실행한다. v86/WASI 자산 준비는 의도적으로 하지 않는다.
125+
- run: npm run test:web-machine
126+
# 로컬 relay/TCP만 쓰는 통합면은 추가 다운로드 없이 Edge 차이를 잡을 수 있어 함께 돈다.
127+
- run: npm run test:socket
128+
- run: npm run test:mcp
129+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
130+
if: always()
131+
with:
132+
name: edge-gate-measurements
133+
path: edgeGateMeasurements.json
134+
if-no-files-found: error
135+
92136
web-computer:
93137
runs-on: ubuntu-latest
94138
steps:
95-
- uses: actions/checkout@v7
96-
- uses: actions/setup-node@v7
139+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
140+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
97141
with:
98142
node-version: 22
99143
# 실행 자산(v86 engine/firmware/guest image)은 hash 고정 development channel이며
100144
# 미추적이다: 준비 스크립트가 받아오고 catalog 버전 키로 캐시한다.
101-
- uses: actions/cache@v4
145+
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
102146
with:
103147
path: apps/webComputer/assets
104148
key: web-computer-assets-${{ hashFiles('apps/webComputer/assetCatalog.json') }}
@@ -113,11 +157,11 @@ jobs:
113157
web-machine-x86:
114158
runs-on: ubuntu-latest
115159
steps:
116-
- uses: actions/checkout@v7
117-
- uses: actions/setup-node@v7
160+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
161+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
118162
with:
119163
node-version: 22
120-
- uses: actions/cache@v4
164+
- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
121165
with:
122166
path: tests/webMachine/fixtures/v86/assets
123167
key: web-machine-v86-assets-${{ hashFiles('scripts/assetCatalog.json') }}

.github/workflows/engine-watch.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
watch:
1919
runs-on: ubuntu-latest
2020
steps:
21-
- uses: actions/checkout@v7
21+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2222
- name: 핀 vs 최신 릴리즈 비교, 새 버전이면 후보 Issue
2323
env:
2424
GH_TOKEN: ${{ github.token }}

.github/workflows/pages.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ jobs:
2525
name: github-pages
2626
url: ${{ steps.deployment.outputs.page_url }}
2727
steps:
28-
- uses: actions/checkout@v7
29-
- uses: actions/setup-node@v7
28+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
29+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
3030
with:
3131
node-version: 22
3232
# RED 커밋이 공개 진열장으로 나가지 않게 한다. 배포는 사람이 보는 표면이고, 구조 게이트는
@@ -42,8 +42,8 @@ jobs:
4242
cp src/capabilities/pyprocSw.js _site/pyprocSw.js
4343
# 랜딩은 examples/index.html이 정본이고 배포 루트로 승격된다(상대 경로가 루트 기준).
4444
mv _site/examples/index.html _site/index.html
45-
- uses: actions/upload-pages-artifact@v3
45+
- uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
4646
with:
4747
path: _site
4848
- id: deployment
49-
uses: actions/deploy-pages@v4
49+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4

.github/workflows/publish.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,33 @@ on:
1717

1818
permissions:
1919
contents: read
20-
id-token: write # OIDC 신원 증명. 이게 없으면 trusted publishing이 성립하지 않는다.
2120

2221
jobs:
2322
# 게시는 되돌릴 수 없다(버전 번호 재사용 불가). 그래서 ci의 게이트 집합 전부를 통과해야 한다.
2423
# 목록을 여기 복사하지 않는 이유: 복사본은 ci가 자랄 때 조용히 뒤처진다.
2524
gates:
25+
permissions:
26+
contents: read
2627
uses: ./.github/workflows/ci.yml
2728

2829
publish:
2930
needs: gates
3031
runs-on: ubuntu-latest
32+
permissions:
33+
contents: read
34+
id-token: write # npm Trusted Publishing OIDC는 게시 job에만 연다.
3135
steps:
3236
# 태그 확인을 위해 전체 이력을 받는다(dispatch 경로는 ref가 태그가 아니다).
33-
- uses: actions/checkout@v7
37+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
3438
with:
3539
fetch-depth: 0
36-
- uses: actions/setup-node@v7
40+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
3741
with:
3842
node-version: 22
3943
registry-url: https://registry.npmjs.org
4044

4145
# trusted publishing은 npm >= 11.5.1에서만 동작한다(node 22 번들은 10.x).
42-
- run: npm install -g npm@latest
46+
- run: npm install -g npm@11.19.0
4347

4448
# 릴리즈 정책: package.json 버전과 태그는 항상 같은 값이다. 어긋나면 여기서 멈춘다
4549
# (태그만 앞서 나가 엉뚱한 버전이 게시되는 사고 방지). 이 검증에는 조건을 걸지 않는다:

0 commit comments

Comments
 (0)