Some checks failed
CultMesh QUIC native / Build win32-x64 (push) Has been skipped
CultMesh QUIC native / Build linux-x64 (push) Has been skipped
CultMesh QUIC native / Release native binaries (push) Has been skipped
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (push) Has been cancelled
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (push) Has been cancelled
37 lines
2.4 KiB
Markdown
37 lines
2.4 KiB
Markdown
# NuGet Packaging
|
|
|
|
See `docs/semver-policy.md` for what a version bump on these packages is
|
|
required to mean and how a release is checked against that before it ships.
|
|
|
|
CultLib publishes the managed dependency graph as separate packages. The leaf
|
|
package is `GameCult.Mesh`; its NuGet dependencies preserve the CultMesh,
|
|
CultNet, and CultCache ownership boundaries.
|
|
|
|
```powershell
|
|
powershell -ExecutionPolicy Bypass -File .\scripts\pack-nuget.ps1
|
|
```
|
|
|
|
The command packs `GameCult.Mesh`, `GameCult.Networking.WebSockets`, and every
|
|
project they reach through `ProjectReference` (including `GameCult.Math`, which
|
|
carries its own version) into a local feed under `artifacts/nuget`. It verifies
|
|
that each of those packages exists at the identity MSBuild reports for it, then
|
|
restores and runs a clean .NET consumer using only
|
|
`PackageReference Include="GameCult.Mesh"`.
|
|
|
|
The Unity distribution remains `org.gamecult.cultlib`, built by
|
|
`scripts/build-unity-package.ps1`, because Unity consumes the managed assembly
|
|
closure through UPM rather than NuGet restore.
|
|
|
|
Install the Unity package from the immutable release tag:
|
|
|
|
```text
|
|
https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v2.0.0
|
|
```
|
|
|
|
## Rolling back across the store format
|
|
|
|
A consumer that upgrades and writes a store holding an element id leaves a
|
|
`cultcache.store.v3` single-file store (`v5` directory store). Refusal by name depends on the store kind and the pin. A **directory** store (`v5`) is refused by every Unity pin from `cultlib-unity-v1.0.57` and `caching-unity-v1.2.0` on (the earliest tags of each line whose `DirectoryMessagePackBackingStore` reads only the `v4` stamp: "only ... is readable"). A **single-file** store (`v3`) is refused only from `cultlib-unity-v2.0.0` and `caching-unity-v2.0.0`: `cultlib-unity-v1.0.61` and `caching-unity-v1.4.0` read the header string and never compare it. The NuGet line (`cultlib-v1.0.32`, the last `cultlib-v` tag) refuses neither: its directory store writes `cultcache.store.v1.directory` and never checks the stamp on read. Rolling back a single-file store to any of those pins reads it silently, drops the ids, and can rewrite the elements without them. That is the dangerous case. There is
|
|
no general carry-back; restore from a copy taken before upgrading, and upgrade
|
|
readers before writers. Detail: the Store format and rollback section of
|
|
`src/GameCult.Caching/README.md`.
|