@dcl/abgen-linux-x64 0.16.0 → 0.17.0
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 +4 -4
- package/README.md +52 -64
- package/bin/abgen.bin +0 -0
- package/lib/ld-linux-x86-64.so.2 +0 -0
- package/package.json +1 -1
package/BUILD-INFO.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
ABGEN_VERSION=0.
|
|
2
|
-
ABGEN_RELEASE=v0.
|
|
1
|
+
ABGEN_VERSION=0.17.0
|
|
2
|
+
ABGEN_RELEASE=v0.17.0
|
|
3
3
|
ABGEN_TARGET=x86_64-unknown-linux-gnu
|
|
4
|
-
ABGEN_BUILD_ID=
|
|
5
|
-
ABGEN_GIT_REV=
|
|
4
|
+
ABGEN_BUILD_ID=61508174f69d
|
|
5
|
+
ABGEN_GIT_REV=f731a9e373d5ada41f144177bb392197e65a8044
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
48
|
-
|
|
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
|
|
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
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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 |
|
|
133
|
-
|
|
134
|
-
| Linux x86_64 | native (`nix develop` or bare toolchain) |
|
|
135
|
-
| macOS (Apple Silicon) | `nix develop` (clang stdenv) |
|
|
136
|
-
| Windows | WSL2, checkout on the WSL filesystem |
|
|
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
|
|
@@ -148,7 +119,7 @@ restore it - it never fetches or re-downloads:
|
|
|
148
119
|
### Server (`crate/src/abcdn/config.rs`)
|
|
149
120
|
| Var | Default | Meaning |
|
|
150
121
|
|---|---|---|
|
|
151
|
-
| `
|
|
122
|
+
| `ABGEN_HTTP_HOST` / `ABGEN_HTTP_PORT` | `127.0.0.1` / `5147` | bind address (legacy aliases `HTTP_SERVER_HOST` / `HTTP_SERVER_PORT` still honored) |
|
|
152
123
|
| `ABGEN_OUT_ROOT` | `./data/ab-generator/out` | corpus root served + JIT write-back target (may start empty) |
|
|
153
124
|
| `ABGEN_CATALYST_URL` | `http://127.0.0.1:5141/content` | content server (standalone: `https://peer.decentraland.org/content`) |
|
|
154
125
|
| `ABGEN_CONTENT_DISK` | unset | optional local content-store root (disk-first client) |
|
|
@@ -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/
|
|
215
|
-
pushes it to `ghcr.io/decentraland/abgen:<tag>` (and `:latest`) on every `v*` tag.
|
|
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` 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
|
|
225
|
-
|
|
226
|
-
the
|
|
227
|
-
|
|
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/lib/ld-linux-x86-64.so.2
CHANGED
|
Binary file
|