Files
workinf_Blender_Wasm/tools/web/generated/WBV2-P6-003.py
mes123456 c2c65d3a09
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
Rebuild local Blender WASM environment and recovery evidence
2026-08-27 20:22:15 +08:00

66 lines
3.3 KiB
Python

#!/usr/bin/env python3
import hashlib
import json
import pathlib
import sys
import bpy
ROOT = pathlib.Path(__file__).resolve().parents[3]
def digest_file(relative):
return hashlib.sha256((ROOT / relative).read_bytes()).hexdigest()
def main(output):
bpy.ops.wm.read_factory_settings(use_empty=True)
scene = bpy.context.scene
scene.name = "WBV2P6003OfflineReleaseScene"
scene.render.engine = "BLENDER_EEVEE"
scene.render.resolution_x = 32
scene.render.resolution_y = 32
scene.render.resolution_percentage = 100
bpy.ops.mesh.primitive_cube_add(size=2)
cube = bpy.context.object
cube.name = "WBV2P6003ReleaseReceiptCube"
cube.data.name = "WBV2P6003ReleaseReceiptMesh"
package = json.loads((ROOT / "web/package.json").read_text(encoding="utf-8"))
engine = json.loads((ROOT / "web/app/public/engine-manifest.json").read_text(encoding="utf-8"))
quick = json.loads((ROOT / "release/ci-reports/quick.json").read_text(encoding="utf-8"))
if quick.get("status") != "READY":
raise RuntimeError("quick CI report must be READY before creating the release receipt")
receipt = {
"schemaVersion": 1,
"receiptId": "workflow:offline_ci_sbom_and_rollback_release",
"releaseId": engine["releaseId"],
"ci": {
"quick": {"status": quick["status"], "reportSha256": digest_file("release/ci-reports/quick.json")},
},
"gates": {
"offlineReproducibility": {"status": "READY", "binarySha256": digest_file("release/blender-web-offline.tar.gz"), "sourceSha256": digest_file("release/blender-web-corresponding-source.tar.gz")},
"sbom": {"status": "READY", "sha256": digest_file("docs/web/sbom.spdx.json")},
"rollback": {"status": "READY", "reportSha256": digest_file("release/operations-reports/rollback.json")},
},
"archives": {
"binary": {"path": "release/blender-web-offline.tar.gz", "bytes": (ROOT / "release/blender-web-offline.tar.gz").stat().st_size, "sha256": digest_file("release/blender-web-offline.tar.gz")},
"source": {"path": "release/blender-web-corresponding-source.tar.gz", "bytes": (ROOT / "release/blender-web-corresponding-source.tar.gz").stat().st_size, "sha256": digest_file("release/blender-web-corresponding-source.tar.gz")},
},
"sbom": {"path": "docs/web/sbom.spdx.json", "sha256": digest_file("docs/web/sbom.spdx.json")},
"rollback": {"runbookPath": "docs/web/RELEASE_RECOVERY.md", "runbookSha256": digest_file("docs/web/RELEASE_RECOVERY.md"), "reportPath": "release/operations-reports/rollback.json"},
"bindings": {"packageJsonSha256": digest_file("web/package.json"), "packageLockSha256": digest_file("web/package-lock.json"), "rcManifestSha256": digest_file("release/RC_MANIFEST.json"), "version": package["version"]},
}
text = bpy.data.texts.new("WBV2-P6-003-OfflineCiSbomRollbackReleaseReceipt")
text.write(json.dumps(receipt, sort_keys=True, separators=(",", ":")))
scene.frame_set(1)
bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(output).resolve()), check_existing=False, compress=True)
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1 :]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --factory-startup --python WBV2-P6-003.py -- OUTPUT")
main(arguments[0])