Release pipeline
A release (for example 3.0.0-pre.18) is one Shared candidate plus one
Product candidate, built reproducibly, retained by BuildOps, approved by the
owner and delivered to GameStudio3/SDK-Packages. The BuildOps runbooks are
the authority for every step:
sdk-candidate,
approval,
sdk-delivery,
sdk-adoption.
Stages
| # | Stage | Where | Output |
|---|---|---|---|
| 1 | Shared candidate | build-shared-sdk.yml (BuildOps, runner 22) with sdk-release, crosssdk-revision, plan-id | Shared candidate sha256:… and its handoff |
| 2 | Take Shared into ProjectV-SDK | ci/update-shared-runtime.py on a branch from v3; restamp the Product packages to the release; PR into v3 | ProjectV-SDK source revision |
| 3 | Product candidate | verification/Invoke-LocalProjectVCandidate.ps1 Run1, Run2 and Compare, then Invoke-ProjectVCandidateAcceptance.ps1 -Gate Profiles | Product candidate sha256:… and handoff |
| 4 | Catalog | BuildOps sdk_release_cli import into sdk/releases.json and sdk/plan-preparations.json; runner local configuration; read-only preflight | Release tuple and plan ID |
| 5 | Retain | build-sdk.yml stage=candidate, then stage=retain | Retained, verified artifacts |
| 6 | Approve | Owner review receipt on the approval issue; delivery-authority record | Approved scope |
| 7 | Deliver | publish-sdk.yml operation=plan, then operation=candidate-delivery | Package PR, then index PR on SDK-Packages |
| 8 | Verify | Merge both SDK-Packages PRs; rerun candidate-delivery until it reports VERIFIED_COMPLETE | Selectable delivery: package revision + index |
| 9 | Adopt | Client pins the 14 URLs, profile and CROSSSDK_DELIVERY_PIN.json; full local flow; PR | Client on the release |
Run1 and Run2 must be byte-identical; the comparison and four profile acceptances are part of the handoff. Nothing is dispatched, published or pushed without the owner's go-ahead.
Delivery layout
SDK-Packages/
packages/shared/<package-id>/<version>/... 9 Shared packages
packages/products/projectv/<package-id>/<version>/... 5 ProjectV packages
deliveries/candidate/<plan-id>/index.json delivery index
The Client pins every package at the package revision (the package PR's
merge commit). CROSSSDK_DELIVERY_PIN.json records the plan, candidate,
package revision, index revision, index path and hashes, so the delivery can
be re-verified later.
Package contents
Each package contains package.json, README.md, CHANGELOG.md,
LICENSE.md, Unity .meta files, the managed assemblies it owns (per
platform under Runtime/Plugins and Editor/Plugins) and required native
bridges. No C# source, no PDBs, no machine paths. Assemblies are explicitly
referenced except the high-level SilverTiger.ProjectV.Unity and
.Unity.VContainer.
Third-party inputs
com.silvertiger.crosssdk.core depends on org.nuget.system.text.json
(OpenUPM); the VContainer integration depends on jp.hadashikick.vcontainer
1.17.0. Consumers declare the OpenUPM scoped registry and VContainer
themselves.