@dcl/abgen-linux-x64 0.16.2 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BUILD-INFO.txt CHANGED
@@ -1,6 +1,6 @@
1
- ABGEN_VERSION=0.16.2
2
- ABGEN_RELEASE=v0.16.2
1
+ ABGEN_VERSION=0.17.1
2
+ ABGEN_RELEASE=v0.17.1
3
3
  ABGEN_TARGET=x86_64-unknown-linux-gnu
4
- ABGEN_BUILD_ID=9d3e4ab499ee
5
- ABGEN_GIT_REV=25b4cad634c505e1ec61c6b0c14fc21136fbd23a
4
+ ABGEN_BUILD_ID=e48e050ebc29
5
+ ABGEN_GIT_REV=a597b0e50931b3402abdea77258d1425126be2c1
6
6
  SOURCE_DATE_EPOCH=315532800
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # abgen
2
- Standalone Decentraland asset-bundle converter + ab-cdn-compatible JIT server, plus **abgen-compare**,
3
- a parity pipeline that measures output against the production CDN in a browser. The converter is a
2
+ Standalone Decentraland asset-bundle converter + ab-cdn-compatible JIT server. The converter is a
4
3
  clean-room Rust reimplementation of the legacy
5
4
  [asset-bundle-converter](https://github.com/decentraland/asset-bundle-converter): GLB/GLTF content from
6
5
  any catalyst content server in, Unity AssetBundles layout-compatible with the production
@@ -14,25 +13,10 @@ resolves it for embedding tools - see [npm/abgen](npm/abgen/README.md)). From so
14
13
  ```bash
15
14
  git clone <this-repo> abgen && cd abgen
16
15
  cargo build --release # no postgres, no openssl, no protobuf
17
- cargo build --release --examples # bundle dump tools the compare site shells out to
16
+ cargo build --release --examples # bundle dump tools (objdump/texdump/matdump/texcmp/texpng)
18
17
  scripts/bootstrap-runtime.sh # integrity-check the vendored runtime data
19
- ./pipeline/abgen-compare serve # http://localhost:5197 - setup wizard, then results
20
- ./pipeline/abgen-compare run --pointer '100,100' --platform windows
21
18
  ```
22
- `run` accepts a scene parcel, an entity id, or a wearable/emote URN. It is headless-first: with nothing
23
- but this repo it fetches the upstream bundles, generates ours, pairs them, and produces
24
- manifest/structural/texture-decode verdicts. Pixel-level verdicts (rendered screenshots, diff heatmaps)
25
- are an optional stage that drives a Unity Editor and takes two inputs, stored once:
26
- ```bash
27
- ./pipeline/abgen-compare config set unity_editor /path/to/6000.x/Unity
28
- ./pipeline/abgen-compare config set unity_project /path/to/unity-explorer/Explorer
29
- ```
30
- The client-faithful host project is a
31
- [decentraland/unity-explorer](https://github.com/decentraland/unity-explorer) checkout with
32
- `harness/unity-explorer-abgen.patch` applied; `harness/project-template/` is the self-contained
33
- fallback. Verdict labels and thresholds are specified by `pipeline/abgencompare/classify.py` (the
34
- classifier is the spec). Setup details: [pipeline/README.md](pipeline/README.md) and
35
- [harness/README.md](harness/README.md).
19
+ There is also a wasm build: `crate/abgen-wasm/` compiles the converter to wasm32 see its README.
36
20
  ## Binaries
37
21
  `target/release/` after `cargo build --release`:
38
22
 
@@ -43,13 +27,10 @@ classifier is the spec). Setup details: [pipeline/README.md](pipeline/README.md)
43
27
  | `abgen-corpus` | batch corpus builder: manifest / `--entity-ids` (add `--fetch-missing` to pull content from a catalyst) / `--world <name>[,...]` (resolve + fetch + convert a world; upstream via `--worlds-url` or `ABGEN_WORLDS_URL`) / `--live-mode` / `--collection-urn` / `--from-reference`; full-corpus runbook in [docs/BATCH.md](docs/BATCH.md) |
44
28
  | `abgen-verify` | parity differ (ours vs reference bundles, ppm-bits, `--tolerant`) |
45
29
  | `abgen-lod` | LOD lane CLI: `bundle`, `compare`, `placements`, `assemble`, `atlas`, `simplify`, `generate` |
30
+ | `abgen-lambda` | AWS Lambda handler (deployment event in, bundles + manifests to S3; from the `lambda/` workspace member) - see [lambda/README.md](lambda/README.md) |
46
31
 
47
- Plus `pipeline/abgen-compare` (Python >= 3.9, stdlib-only, run in place) and bundle-inspection examples
48
- (`texdump`, `matdump`, `objdump`, `crndump`, `texcmp`, `texpng`) under `target/release/examples/`.
49
- `scripts/lod-parity.sh` runs the same baked LOD GLB through the legacy converter (a sibling
50
- [asset-bundle-converter](https://github.com/decentraland/asset-bundle-converter) checkout + editor) and
51
- through `abgen-lod bundle`, then diffs the two bundles (`abgen-lod compare` + `matdump`); `--site`
52
- publishes the verdicts to the compare site's `/lod.html`.
32
+ Plus bundle-inspection examples (`texdump`, `matdump`, `objdump`, `texcmp`, `texpng`) under
33
+ `target/release/examples/`.
53
34
  ## Server
54
35
  ```bash
55
36
  ABGEN_CATALYST_URL=https://peer.decentraland.org/content ./target/release/abgen
@@ -78,30 +59,25 @@ header semantics, and the DB-vs-proxy source selection: [docs/ROUTES.md](docs/RO
78
59
  ABGEN_ROOT="$PWD" cargo test --workspace --lib -- --test-threads=1
79
60
  ```
80
61
  `--test-threads=1` is required: the lib tests share process-wide `ABGEN_ROOT` state.
81
- ## wasm lab
62
+ ## wasm
82
63
  `crate/abgen-wasm/` compiles the converter lib (default features off) to `wasm32-unknown-unknown` behind
83
- a hand-rolled C ABI and drives it from the static pages in `site/wasm/` - drop a glb/gltf/zip, get real
84
- UnityFS bundles in the browser. It is a plain cargo package with its own committed `Cargo.lock`,
85
- excluded from the workspace: nothing in CI or the release matrix ever needs a wasm toolchain (the
86
- pinned one lives in `crate/abgen-wasm/toolchain/flake.nix`). `crate/abgen-wasm/README.md` documents the
87
- build, the headless driver, the native-vs-wasm byte-parity gate and its decoder contract. Layout
88
- caveat: this repo places `site/` and `template/` at the repo root, while the wasm lane's helper scripts
89
- and the wasm32-only `include_bytes!` template paths in `crate/src/builder/templates.rs` assume the
90
- source layout where both are siblings of the crate — an in-repo wasm32 build needs those relative paths
91
- bumped one level (`../../template/` -> `../../../template/`, and the `../site` copy in
92
- `crate/abgen-wasm/build.sh` adjusted likewise). No workspace target compiles for wasm32, so the
93
- divergence never touches CI. Self-hosting the lab: `site/` is fully static - any file server works,
94
- but it must serve `.wasm` with the `application/wasm` MIME type or `WebAssembly.instantiateStreaming`
95
- falls over.
96
- ## Live JIT compare
97
- `abgen-compare watch` compares every entity a running JIT server converts against the upstream ab-cdn
98
- (bytes / structure / texture decode, no renders) into one rolling run the compare site auto-refreshes,
99
- with backfill of pre-existing conversions and a crash-safe resume cursor. Every flag has an env twin
100
- for service deployment; `./pipeline/abgen-compare watch --help` documents them.
64
+ a hand-rolled C ABI; the JS runtime in `crate/abgen-wasm/js/` (worker pool + WebGPU bridge) is what a
65
+ host page embeds. It is a plain cargo package with its own committed `Cargo.lock`, excluded from the
66
+ workspace: nothing in CI or the release matrix ever needs a wasm toolchain (the pinned one lives in
67
+ `crate/abgen-wasm/toolchain/flake.nix`). `crate/abgen-wasm/README.md` documents the build, the headless
68
+ driver, the native-vs-wasm byte-parity gate and its decoder contract. Layout caveat: this repo places
69
+ `template/` at the repo root, while the wasm lane's helper scripts and the wasm32-only `include_bytes!`
70
+ template paths in `crate/src/builder/templates.rs` assume the source layout where it is a sibling of
71
+ the crate — an in-repo wasm32 build needs those relative paths bumped one level (`../../template/` ->
72
+ `../../../template/`). No workspace target compiles for wasm32, so the divergence never touches CI.
101
73
  ## Features
102
- There are no compile-time feature flags. Every capability below builds into every native binary;
103
- `wasm32` builds target-gate the server, content-DB, and GPU code off automatically. Each capability
104
- is activated at runtime, not at build time.
74
+ One compile-time feature flag: `server` (on by default) gates the abcdn HTTP server + registry stack
75
+ (axum/tokio/sqlx and the `dcl-contents` crate); the `abgen` bin has `required-features = ["server"]`.
76
+ Library consumers - `lambda/`, `crate/abgen-native/`, `crate/abgen-wasm/` - build with
77
+ `default-features = false` and get the converter without the server stack. Under the default
78
+ features every capability below builds into every native binary; `wasm32` builds target-gate the
79
+ server, content-DB, and GPU code off automatically. Each capability is activated at runtime, not at
80
+ build time.
105
81
 
106
82
  | Capability | Built | Enable at runtime |
107
83
  |---|---|---|
@@ -122,22 +98,17 @@ content-DB, and GPU stacks are `cfg(not(target_arch = "wasm32"))`).
122
98
  - rustc/cargo (edition 2021; the vendored `draco_decoder` is edition 2024)
123
99
  - cc + a C++ toolchain (vendored crunch, libjpeg9c)
124
100
  - cmake + make (`draco_decoder` builds upstream draco C++; missing cmake is the #1 build failure)
125
- - Python >= 3.9 for `abgen-compare` (stdlib-only; `numpy` + `Pillow` are optional accelerators)
126
101
 
127
102
  On NixOS: `nix develop`, or `nix shell nixpkgs#cargo nixpkgs#rustc nixpkgs#gcc nixpkgs#gnumake
128
103
  nixpkgs#cmake nixpkgs#pkg-config`. No openssl (ureq uses rustls), no protobuf. Optional: libturbojpeg
129
104
  (dlopen'd, or set `TURBOJPEG_LIB=/path`); without it JPEG decode falls back to the vendored libjpeg9c
130
105
  path - valid output but not byte-parity with production; startup logs `turbojpeg_available`.
131
106
  ## Platform matrix
132
- | Platform | Build | Unity renders |
133
- |---|---|---|
134
- | Linux x86_64 | native (`nix develop` or bare toolchain) | native Unity editor; primary target |
135
- | macOS (Apple Silicon) | `nix develop` (clang stdenv) | native Unity editor (Metal); verified end-to-end |
136
- | Windows | WSL2, checkout on the WSL filesystem | Windows-native Unity through the wslpath bridge (`pipeline/abgencompare/wsl.py`); verified end-to-end |
137
-
138
- WSL2: `--unity` accepts `C:\...` or `/mnt/c/...`; paths and `AB_*` env cross the boundary
139
- automatically; render inputs are staged to `--win-staging` (default `/mnt/c/abgen-runs/<run-id>`); run
140
- renders from an interactive WSL shell so Unity gets a real GPU session.
107
+ | Platform | Build |
108
+ |---|---|
109
+ | Linux x86_64 | native (`nix develop` or bare toolchain) |
110
+ | macOS (Apple Silicon) | `nix develop` (clang stdenv) |
111
+ | Windows | WSL2, checkout on the WSL filesystem |
141
112
  ## Runtime data
142
113
  Vendored in-repo and sha256-pinned; a fresh clone is zero-config. `scripts/bootstrap-runtime.sh`
143
114
  verifies the sha256 of both sets and, when a payload is missing, prints the git-history commands to
@@ -171,6 +142,14 @@ Enabled when `ABGEN_S3_BUCKET` is non-empty (or `ABGEN_USE_SPACE=1`):
171
142
  - `ABGEN_FALLBACK_VERSION` (default `v41`) - extra version prefix tried on space-cache lookups
172
143
  - `ABGEN_WORLDS_CONTENT_URL` - worlds-content-server fallback for entity/content fetches that miss the primary source (default public worlds server; `0`/`off`/empty disables)
173
144
 
145
+ Uploads carry each key family's production writer's object metadata, derived from the key by
146
+ `space::object_headers`: bundles `application/wasm` + `public,max-age=31536000,immutable`
147
+ (cdn-uploader's comma-joined spelling), scene sources (`.js`/`.json`/`.crdt`) the direct-upload
148
+ spelling `public, max-age=31536000, immutable`, manifests (`manifest/…`) `application/json` +
149
+ `private, max-age=0, no-cache`, ISS descriptors (`lods-unity/manifests/…`)
150
+ `public, max-age=31536000` (lod-generator-unity's spelling), `.br` keys
151
+ `public,no-transform,max-age=31536000,immutable` + `Content-Encoding: br` (as cdn-uploader sets).
152
+
174
153
  ### Asset-reuse mode (upstream converter parity)
175
154
  ON by default, matching the ab-cdn deployment's asset-reuse naming from v49 onward: scene
176
155
  glb/gltf bundles use the upstream converter's canonical naming and shared bucket layout (applies
@@ -189,6 +168,12 @@ non-digest names).
189
168
  `ABGEN_MAGENTA_MISSING` is on, in which case unresolvable deps are dropped from the digest and
190
169
  the build substitutes placeholder textures
191
170
 
171
+ Display-only files — `autogenerated-thumbnail.png` anywhere in the content map, and whatever
172
+ `metadata.display.navmapThumbnail` points at — are dropped from the conversion input, matching the
173
+ prod converter's `-skippedHashes` flag: no bundle, no manifest entry, and no contribution to the
174
+ manifest `exitCode` (the client reads those files as raw bytes from the content server, so a bundle
175
+ for them is a dead artifact). Applies to the JIT server and the lambda, independent of asset reuse.
176
+
192
177
  ### Registry index eager build
193
178
  On `POST /entities/active|versions`, entities missing a converted bundle are queued for conversion; the
194
179
  request waits up to the deadline, builds finish in the background. Knobs: `ABGEN_INDEX_EAGER_BUILD`
@@ -211,8 +196,11 @@ output is promoted into the serving root, so rejected bundles are never servable
211
196
  The container image is built straight from the pinned Nix flake - `nix build .#dockerImage`
212
197
  (`dockerTools.buildLayeredImage`, `tini` init, no base OS) - producing an image that runs `abgen` as an
213
198
  unprivileged user on `:5147` with `template/` and `shader/` baked in and `ABGEN_ROOT`/`ABGEN_OUT_ROOT`
214
- preset. The [`.github/workflows/image.yml`](.github/workflows/image.yml) workflow builds that image and
215
- pushes it to `ghcr.io/decentraland/abgen:<tag>` (and `:latest`) on every `v*` tag. The org
199
+ preset. The `image` job in [`.github/workflows/release.yml`](.github/workflows/release.yml) builds
200
+ that image and pushes it to `ghcr.io/decentraland/abgen:<tag>` (and `:latest`) on every `v*` tag.
201
+ The workspace also ships an AWS Lambda consumer in `lambda/` (the `abgen-lambda` bin);
202
+ `nix build .#lambdaImage` produces its container image, which the `lambda-image-push` job pushes to ECR
203
+ on the same tags - see [lambda/README.md](lambda/README.md). The org
216
204
  services-pipeline that publishes the same service to quay (service-name `abgen`) is configured
217
205
  externally in the private `decentraland/definitions` repo, not in this tree. Cutting a release -
218
206
  tagging, what the pipeline does, and what to check afterwards: [DEVELOPMENT.md](DEVELOPMENT.md).
@@ -221,10 +209,10 @@ Parity posture and clean-room provenance are documented separately: [PARITY.md](
221
209
  [PROVENANCE.md](PROVENANCE.md).
222
210
  ## Provenance
223
211
  This repository is a generated standalone export: the server crate maps to `crate/` with a small
224
- overlay; the pipeline/site/harness trees ship verbatim; the content component + unsigned registry
225
- surface ship as the shared `crate/dcl-contents` crate, copied verbatim from
226
- the internal tree. Mechanical differences from the internal source: signed/denylist/queue registry
227
- routes deleted; the server bin is `abgen` and the local build CLI is `abgen-build`.
212
+ overlay; the content component + unsigned registry surface ship as the shared `crate/dcl-contents`
213
+ crate, copied verbatim from the internal tree. Mechanical differences from the internal source:
214
+ signed/denylist/queue registry routes deleted; the server bin is `abgen` and the local build CLI is
215
+ `abgen-build`.
228
216
  ## License
229
217
  **Apache-2.0** - full text in [LICENSE](LICENSE). Contributions are accepted under the same
230
218
  terms. Vendored third-party licenses and
package/bin/abgen.bin CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/abgen-linux-x64",
3
- "version": "0.16.2",
3
+ "version": "0.17.1",
4
4
  "description": "abgen prebuilt binary for linux x64 (installed by @dcl/abgen)",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "repository": {