• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

decentraland / atlas-server / 39959757456
94%

Build:
DEFAULT BRANCH: master
Ran 23 Oct 2026 01:17PM UTC
Jobs 1
Files 52
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Oct 2026 01:15PM UTC coverage: 93.8% (+0.7%) from 93.105%
39959757456

push

github

web-flow
feat: cache the map images at the cdn and in memory (#156)

Stacked on #155 (base `feat/render-worker-pool`); retarget to `master`
once #155 merges.

**Problem.** Every PNG route was served with `public, max-age=120`
(minimap/estatemap 600) and Cloudflare keys on the full URL, so the same
deterministic images were re-rendered every couple of minutes. Clients
ask for a small fixed set: unity-explorer 49
`/v1/map.png?…&width=1020&height=1020&size=20` URLs per session (no disk
cache), bevy-explorer ~400 grid-snapped `768x768&size=16` ones,
places/discovery/marketplace thumbnails per-place
`/v2/map.png?…selected=…` and per-parcel/estate `map.png`.

**Changes**
- Every image has a data-derived version, the same on every replica:
images without `on-sale`/`listed-for-rent` follow a **land version**
(fingerprint of tile types, estates and borders; unchanged by prices,
orders, rentals), images with them an **overlay version** (land version
+ each listed tile's price, order expiration and rental expiration).
Both are in `/v2/tiles/info` (`landVersion`, `overlayVersion`);
`lastUpdatedAt` is unchanged.
- 200s carry a weak `ETag` (`W/"<version>-<hash of the normalized
request>"`) and `public, max-age=60, s-maxage=300,
stale-while-revalidate=86400`; no `Last-Modified`, so revalidation is by
`If-None-Match` (lists, weak, `*`), answered with a 304 before any
render slot is taken. `?v=` equal to the image's version gets `public,
max-age=31536000, immutable`; any other `v` is served normally. The PNG
routes no longer go through the last-modified middleware. 400/500/503
keep their headers.
- Each PNG request takes one map snapshot (`getSnapshot()`: the served
tiles with both versions, captured together; records are swapped, never
changed) before any await, and the version, cache key, estate lookup and
render job all read from it, so an image always matches its ETag even if
the map refreshes while the render waits for a thread. Overlays are
drawn from the data alone; exp... (continued)

1721 of 1873 branches covered (91.88%)

Branch coverage included in aggregate %.

790 of 797 new or added lines in 16 files covered. (99.12%)

9 existing lines in 2 files now uncovered.

5586 of 5917 relevant lines covered (94.41%)

2215.95 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
0.0
0.0% src/modules/image/types.ts
2
0.0
0.0% src/types.ts
1
97.7
src/adapters/image-cache/component.ts

Coverage Regressions

Lines Coverage ∆ File
6
90.64
-0.39% src/adapters/mini-map-renderer.ts
3
0.0
0.0% src/modules/image/types.ts
Jobs
ID Job ID Ran Files Coverage
1 39959757456.1 23 Oct 2026 01:17PM UTC 104
94.07
GitHub Action Run
Source Files on build 39959757456
  • Tree
  • List 52
  • Changed 36
  • Source Changed 13
  • Coverage Changed 36
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #39959757456
  • ce291121 on github
  • Prev Build on master (#39825659993)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc