Skip to Content
操作流程提交版本

提交版本

誰: 部門管理者。端點: POST /worker/versions(multipart)。CLI 會幫你做完這一切(teamsync-worker submit);這一頁是線上契約。還沒有 CLI?可以從範本開始,或取得你的後端所提供的 CLI:範本與原始碼下載。

請求

恰好一個 multipart part:

POST {BASE}/private/module/edge-workers/worker/versions Authorization: Bearer <jwt> Content-Type: multipart/form-data; boundary=… field name: project filename: department-worker.tar.gz (exactly) content type: application/gzip (exactly) body: the deterministic archive (≤ 2 MiB)

用 teamsync-worker pack --out department-worker.tar.gz 產生壓縮檔 — 必須是確定性格式(gzip 時間戳歸零、tar metadata 固定、路徑排序);一般 tar czf 產生的壓縮檔會被拒絕:API 回應 422 project_invalid(見下),其背後的 builder 代碼是 project_archive_not_deterministic。CLI 不會為手工建出的壓縮檔顯示該代碼,因為 teamsync-worker validate、pack 與 submit 一律自己從專案目錄建出確定性壓縮檔。三種壓縮檔可以原封不動上傳:pack 的輸出、範本現成的 department-worker.tar.gz,以及從 GET /worker/versions/{version_id}/source 下載的壓縮檔(範本與原始碼下載)。

成功 — 201

{ "worker": { "id": "…", "status": "draft|active|paused", "latest_revision": N, "current_version_id": …, … }, "version": { "id": "…", "revision": N, "state": "ready", "manifest_digest": "…", "bundle_digest": "…", "sbom": { /* CycloneDX 1.6 */ }, "build_receipt": { /* receiptVersion "1" */ }, … } }

首次提交也會建立單例 Worker(status: "draft")。記下 version.id 與 worker.latest_revision — 部署要用。此時還沒部署任何東西。

失敗分支

狀態意義你會看到
413外層 > 2 162 688 B,或壓縮檔 part > 2 MiBWorker submission request exceeds limit/project archive exceeds 2097152 bytes
422外層形狀project_multipart_invalid、project_archive_filename_invalid、project_archive_content_type_invalid、project_archive_required、project_archive_invalid(非 gzip)
422builder 拒絕(任何原因)detail: [{loc: ["body","project"], type: "project_invalid", msg: "project failed the locked Worker build policy"}] — 具體的 builder 代碼(例如 manifest_route_ambiguous)不會出現在回應裡。用同一個後端提供的 CLI 執行 teamsync-worker validate 才看得到(目錄)
422manifest 重新驗證type: "manifest_v2_invalid",msg 為 root teamsync.worker.json is not a valid Worker manifest v2(或 root teamsync.worker.json must contain valid Unicode)— builder 接受了專案,但後端對回傳 manifest 的自我檢查失敗
409併發的首次提交比你快a Worker already exists for this department — 重新 GET /worker 再提交;修訂版計數器現在屬於那個 Worker
503builder 無法使用,或其證據被拒絕帶代碼的 detail:{"code": "builder_unavailable", "message": "Department Worker builder is unavailable"};{"code": "builder_invalid_output", "message": "Department Worker builder is unavailable"} 或 {"code": "builder_invalid_output", "message": "Department Worker builder returned invalid evidence"} — 稍後重試;什麼都沒建立
503產物儲存無法使用Edge Worker artifact storage is unavailable、Edge Worker artifact compensation is unavailable — 稍後重試;什麼都沒建立
503provider 未設定Edge Worker provider is not configured — 最先檢查,在任何壓縮檔檢查之前;是部署環境的 EDGE_WORKERS_PROVIDER 設定或地端設定有誤,屬於營運方的問題;什麼都沒建立

伺服器端發生的事

provider 關卡 → 外層關卡 → 無憑證建置(驗證 + 打包 + SBOM + 回執)→ 提交清理意圖 → 產物儲存上傳 → 單一交易建立 ready 修訂版並收養意圖。確定性:同一壓縮檔在同一 builder 政策下重新提交會得到相同摘要(但新的修訂版 — 修訂版是只增的階梯)。每個修訂版都以後端目前的 builder 政策建置(5.22.0 為 department-worker-project-v2.10),政策決定它的 release 能用什麼:要讓較舊的 Worker 使用 Worker 機密、逐操作存取或服務帳號,請重新上傳專案並部署新的修訂版(能力表)。細節:提交管線。

取回已提交的壓縮檔

GET /worker/versions/{version_id}/source(部門管理者)會回傳 Worker 任何版本(含已被取代的版本)所儲存的壓縮檔:200 application/gzip,位元組與提交時完全相同,檔名 department-worker.tar.gz。它的 SHA-256 等於該版本的 project_digest。可以編輯後把結果當作新修訂版提交,或原封不動重新提交。完整契約、錯誤表與壓縮檔內容:範本與原始碼下載。

下一步:部署與輪詢。

Last updated on