Skip to content

docs(windows): README/CHANGELOG + prebuilt cef_host distribution scaffolding - #28

Open
wenkaifan0720 wants to merge 2 commits into
mainfrom
feat/windows-dist-and-docs
Open

docs(windows): README/CHANGELOG + prebuilt cef_host distribution scaffolding#28
wenkaifan0720 wants to merge 2 commits into
mainfrom
feat/windows-dist-and-docs

Conversation

@wenkaifan0720

Copy link
Copy Markdown
Collaborator

What

Follow-up to the Windows port merge (#24): documentation + the prebuilt-cef_host distribution scaffolding.

Docs

  • README status line now reads "macOS 12+ and Windows 10+" with an honest parity summary; the How-it-works diagram shows both host paths and the shared opcode protocol; Building gains the Windows path; Roadmap marks Windows landed with a precise hardening-not-features pending list (per-tile CDP isolation, sandbox, signing, double-buffering).
  • CHANGELOG gains an Unreleased entry. No version bump — that is a federation-wide publish decision left to the maintainer.

Windows prebuilt distribution (packages/flutter_cef_windows/tool/)

Mirrors the macOS GCS/content-hash/fetch model so Campus can eventually fetch a prebuilt cef_host instead of compiling it. Signing is stubbed pending an Authenticode certificate.

  • cef_host_hash.ps1 — deterministic 64-hex content hash of the build inputs (the GCS object key).
  • fetch_cef_host.ps1 — fail-open on missing (build from source), fail-closed on checksum + Authenticode verification. The signature gate is real but accepts unsigned only with FLUTTER_CEF_ALLOW_UNSIGNED_HOST=1 until the cert lands.
  • publish-cef-host.ps1 — build → signtool (only when a cert is configured) → zip + .sha256 → idempotent gsutil upload keyed by hash.
  • windows/CMakeLists.txt — prefers a fetched prebuilt (only when its stamp matches this tree hash), else the unchanged from-source build.

Verified (my own runs)

  • Hash deterministic (57ba6732…); all .ps1 ASCII/no-BOM/parse-clean.
  • From-source flutter build windows still succeeds via fetch fail-open (real 404 → build from source → Built).
  • packages/flutter_cef_macos zero diffs.

Not exercised (needs your infra)

  • signtool signing (no Authenticode cert) and gsutil upload/download (no GCS write creds) — logic verified by dry-runs + AST-extracted branch tests, but the signed-and-published end state awaits the cert procurement decision flagged during the port.

🤖 Generated with Claude Code

wenkaifan0720 and others added 2 commits July 27, 2026 13:45
…istribution

Docs:
- README status line: macOS-only -> "macOS 12+ and Windows 10+", with an honest
  parity summary and what's still pending (per-tile CDP, sandbox, signing).
- How-it-works diagram now shows both host paths (IOSurface/Unix-socket vs
  DXGI-shared-texture/named-pipe) and the one shared opcode protocol.
- Building: added the Windows path (flutter run -d windows drives fetch+compile).
- Roadmap: Windows marked landed with a precise hardening-not-features list;
  Linux noted as not-started.
- CHANGELOG: an Unreleased entry (no version bump — a federation publish decision).

Windows prebuilt distribution scaffolding (packages/flutter_cef_windows/tool/,
mirrors the macOS GCS/fetch model; signing STUBBED pending an Authenticode cert):
- cef_host_hash.ps1: deterministic 64-hex content hash of the 5 build inputs
  (CR-stripped so autocrlf can't perturb it) = the GCS object key.
- fetch_cef_host.ps1: consumer fetch — fail-OPEN on missing (build from source),
  fail-CLOSED on sha mismatch and on Authenticode verification. The signature
  gate is real (Get-AuthenticodeSignature, Status=Valid + thumbprint/subject
  pin) but accepts UNSIGNED only with FLUTTER_CEF_ALLOW_UNSIGNED_HOST=1 until the
  cert lands.
- publish-cef-host.ps1: build -> signtool (only when FLUTTER_CEF_SIGN_THUMBPRINT
  set, else skip) -> zip + .sha256 -> idempotent gsutil upload keyed by hash.
- windows/CMakeLists.txt: prefer a fetched prebuilt (only when its stamp matches
  this tree's hash — guards a stale prebuilt/), else the unchanged from-source
  build; a fail-closed fetch result FATALs rather than silently building.
- Makefile: publish-cef-host-windows target; .gitignore: prebuilt/.

Verified (my own runs): hash deterministic (57ba6732...); all 3 .ps1
ASCII/no-BOM/parse-clean; from-source build still succeeds via fetch fail-open
(real 404 -> build from source -> Built); macOS zero-diff. Stubbed/untestable
without infra: signtool signing and gsutil upload/download (no cert, no GCS
creds) — logic verified by dry-runs + AST-extracted branch tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…terFlow EV cert)

publish-cef-host.ps1 gains a GOOGLECLOUD signing mode that reuses the SAME EV
code-signing cert + GCloud KMS key the FlutterFlow desktop app already signs
with (flutterflow/windows/Makefile): jsign --storetype GOOGLECLOUD against
projects/flutterflow-cicd/.../windows-code-sign, auth via
'gcloud auth print-access-token', verified with Get-AuthenticodeSignature. So
cef_host is signed by 'FlutterFlow, Inc.' with no new cert to procure and no key
material on disk. signtool/thumbprint stays as mode 2; unsigned as mode 3.

Set FLUTTER_CEF_SIGN_GCLOUD_KEYSTORE + FLUTTER_CEF_SIGN_CERTFILE to enable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant