Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ atrinik-session = { path = "crates/atrinik-session", version = "=0.1.0" }
atrinik-testkit = { path = "crates/atrinik-testkit", version = "=0.1.0" }
atrinik-ui-model = { path = "crates/atrinik-ui-model", version = "=0.1.0" }
httpdate = "1.0.3"
sdl3 = { version = "0.18.4", default-features = false, features = ["build-from-source-static"] }
sdl3 = { version = "0.20.0", default-features = false, features = ["build-from-source-static"] }
sha2 = "0.11.0"
ureq = { version = "3.4.0", default-features = false, features = ["gzip", "rustls"] }

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ configured direct connections. See the [directory contract](docs/DIRECTORY.md).

## Build and test

Rust 1.97.1 is pinned. SDL 3.4.14 is acquired reproducibly from the checksummed
Rust 1.97.1 is pinned. SDL 3.4.18 is acquired reproducibly from the checksummed
`sdl3-src` crate and linked statically; no ambient system SDL is selected.
Linux builders need the desktop, audio, input, and GPU development headers
listed in `tools/install-linux-native-deps.sh`; CI installs them from the
Expand Down Expand Up @@ -86,8 +86,8 @@ existing tagged release without rebuilding from another revision.

| Target | SDL3 | Window validation | Renderer backend |
| --- | --- | --- | --- |
| Linux x86-64 | 3.4.14 static source build | headless dummy plus optional desktop window | Vulkan contract recorded; exercised when released renderer lands |
| Windows x86-64 MSVC | 3.4.14 static source build | compile/tests in CI; interactive smoke on release host | D3D12 contract recorded; exercised when released renderer lands |
| Linux x86-64 | 3.4.18 static source build | headless dummy plus optional desktop window | Vulkan contract recorded; exercised when released renderer lands |
| Windows x86-64 MSVC | 3.4.18 static source build | compile/tests in CI; interactive smoke on release host | D3D12 contract recorded; exercised when released renderer lands |

Logical UI coordinates are integer-independent from physical pixels; SDL display
scale is represented as bounded thousandths. Focus, suspend, full-screen,
Expand Down
2 changes: 1 addition & 1 deletion THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Resolved versions are recorded only in `Cargo.lock`.
| --- | --- | --- | --- |
| `atrinik-protocol` | none | `MIT` | https://crates.io/crates/atrinik-protocol |
| `httpdate` | none | `MIT OR Apache-2.0` | https://crates.io/crates/httpdate |
| `sdl3` | SDL 3.4.14 | `MIT AND Zlib` | https://crates.io/crates/sdl3 |
| `sdl3` | SDL 3.4.18 | `MIT AND Zlib` | https://crates.io/crates/sdl3 |
| `sha2` | none | `MIT OR Apache-2.0` | https://crates.io/crates/sha2 |
| `ureq` | none | `MIT OR Apache-2.0` | https://crates.io/crates/ureq |

Expand Down
2 changes: 1 addition & 1 deletion docs/PLATFORM.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SDL3 platform contract

SDL 3.4.14 comes from `sdl3-src` through the Cargo-locked `sdl3` 0.18.4.
SDL 3.4.18 comes from `sdl3-src` through the Cargo-locked `sdl3` 0.20.0.
Linux and Windows use static source builds so clean clones do not depend on an
unversioned system SDL. Packages record the SDL license/notice and native graph.

Expand Down
2 changes: 1 addition & 1 deletion policy/dependencies.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"direct_dependencies": [
{"name":"atrinik-protocol","native":null,"license":"MIT","source":"https://crates.io/crates/atrinik-protocol","purpose":"released Game Protocol 1 static-directory parser and bounds","validation":"Cargo.lock, protocol fixtures, cargo-deny, unit tests, SBOM"},
{"name":"httpdate","native":null,"license":"MIT OR Apache-2.0","source":"https://crates.io/crates/httpdate","purpose":"strict static-directory Last-Modified and Retry-After handling","validation":"Cargo.lock, cargo-deny, metadata boundary tests, SBOM"},
{"name":"sdl3","native":"SDL 3.4.14","license":"MIT AND Zlib","source":"https://crates.io/crates/sdl3","purpose":"isolated platform/window/input/audio boundary","validation":"Cargo.lock, cargo-deny, source-static build, Linux/Windows checks"},
{"name":"sdl3","native":"SDL 3.4.18","license":"MIT AND Zlib","source":"https://crates.io/crates/sdl3","purpose":"isolated platform/window/input/audio boundary","validation":"Cargo.lock, cargo-deny, source-static build, Linux/Windows checks"},
{"name":"sha2","native":null,"license":"MIT OR Apache-2.0","source":"https://crates.io/crates/sha2","purpose":"authenticated resource and static-directory body/cache identity digest verification","validation":"Cargo.lock, cargo-deny, unit tests, SBOM"},
{"name":"ureq","native":null,"license":"MIT OR Apache-2.0","source":"https://crates.io/crates/ureq","purpose":"bounded blocking HTTPS retrieval of the fixed static directory origin","validation":"Cargo.lock, cargo-deny, fixed-request transport tests, Linux/Windows builds, SBOM"}
],
Expand Down
2 changes: 1 addition & 1 deletion tools/package-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ git archive --format=tar --prefix="atrinik-client-${version}/" HEAD | gzip -n >"
SYFT_CHECK_FOR_APP_UPDATE=false syft dir:"${stage}" --source-name atrinik-client --source-version "${version}" --output "cyclonedx-json=${output}/atrinik-client-${version}-linux-amd64.sbom.cdx.json"
if grep -Eiq 'AGPL-[123]|GPL-[123]' "${output}/atrinik-client-${version}-linux-amd64.sbom.cdx.json"; then echo "forbidden reciprocal license in SBOM" >&2; exit 1; fi
if [[ $(jq '.components | length' "${output}/atrinik-client-${version}-linux-amd64.sbom.cdx.json") -lt 10 ]]; then echo "release SBOM is missing the effective Rust graph" >&2; exit 1; fi
jq -n --arg version "${version}" --arg revision "${revision}" --arg rust "$(rustc --version)" '{schema_version:1,version:$version,revision:$revision,target:"x86_64-unknown-linux-gnu",rust:$rust,sdl:"3.4.14 static",protocol:"game-protocol-1",renderer:"scene-snapshot-1",symbols:"stripped; private symbol packages begin in M6"}' >"${output}/atrinik-client-${version}-linux-amd64.provenance.json"
jq -n --arg version "${version}" --arg revision "${revision}" --arg rust "$(rustc --version)" '{schema_version:1,version:$version,revision:$revision,target:"x86_64-unknown-linux-gnu",rust:$rust,sdl:"3.4.18 static",protocol:"game-protocol-1",renderer:"scene-snapshot-1",symbols:"stripped; private symbol packages begin in M6"}' >"${output}/atrinik-client-${version}-linux-amd64.provenance.json"
(
cd "${output}"
sha256sum "atrinik-client-${version}-linux-amd64.tar.gz" "atrinik-client-${version}-linux-amd64.sbom.cdx.json" "atrinik-client-${version}-linux-amd64.provenance.json" "atrinik-client-${version}-source.tar.gz" >"atrinik-client-${version}-linux-amd64.SHA256SUMS"
Expand Down
2 changes: 1 addition & 1 deletion tools/package-windows.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ Compress-Archive -Path "$stage/*" -DestinationPath $archive -CompressionLevel Op
syft "dir:$stage" --source-name atrinik-client --source-version $Version --output "cyclonedx-json=$(Join-Path $Output "atrinik-client-$Version-windows-amd64.sbom.cdx.json")"
$sbom = Get-Content (Join-Path $Output "atrinik-client-$Version-windows-amd64.sbom.cdx.json") | ConvertFrom-Json
if ($sbom.components.Count -lt 10) { throw "release SBOM is missing the effective Rust graph" }
[ordered]@{schema_version=1;version=$Version;revision=$revision;target="x86_64-pc-windows-msvc";rust=(rustc --version);sdl="3.4.14 static";protocol="game-protocol-1";renderer="scene-snapshot-1";symbols="stripped public package; private symbol packages begin in M6"} | ConvertTo-Json -Compress | Set-Content -Encoding utf8 (Join-Path $Output "atrinik-client-$Version-windows-amd64.provenance.json")
[ordered]@{schema_version=1;version=$Version;revision=$revision;target="x86_64-pc-windows-msvc";rust=(rustc --version);sdl="3.4.18 static";protocol="game-protocol-1";renderer="scene-snapshot-1";symbols="stripped public package; private symbol packages begin in M6"} | ConvertTo-Json -Compress | Set-Content -Encoding utf8 (Join-Path $Output "atrinik-client-$Version-windows-amd64.provenance.json")
Get-ChildItem $Output -File | Sort-Object Name | ForEach-Object { "{0} {1}" -f (Get-FileHash -Algorithm SHA256 $_.FullName).Hash.ToLowerInvariant(), $_.Name } | Set-Content -Encoding ascii (Join-Path $Output "atrinik-client-$Version-windows-amd64.SHA256SUMS")
Remove-Item -Recurse -Force $stage
Loading