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

decentraland / builder / 25758242929
52%

Build:
DEFAULT BRANCH: master
Ran 12 May 2026 07:52PM UTC
Jobs 1
Files 326
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

12 May 2026 07:47PM UTC coverage: 51.226% (+0.4%) from 50.786%
25758242929

push

github

web-flow
feat: facial expressions support for image-based wearables (#3404)

* feat: facial expressions support for image-based wearables

Allow creators to ship expression PNGs (and their masks) alongside the
base PNG for eyes/eyebrows/mouth wearables, validate auxiliary file
pairing on upload, and surface a badge wherever the wearable is shown.

Also fixes two pre-existing upload bugs that combined to make subfolder-
organized image wearables and GLB-with-external-texture uploads silently
broken.

* refactor: move facial expressions badge to center panel

The RightPanel header is tight on space and the badge was overlapping
the Properties title and actions dropdown on smaller widths. Move it
into the CenterPanel footer next to the validation status pill, which
already follows the same visual pattern (gray .option container, 18px
icon, hover Popup) and has room to grow.

Also simplify the badge component: remove the baked-in size/color
styles and let each consumer apply its own className. The upload modal
keeps the small white-pill look via scoped CSS; the editor uses the
existing .option styling.

* feat: unwrap single wrapping folder from uploaded zips

Many creators compress a folder rather than its files, so a zip whose
intended content is `eyes.png` arrives as `MyWearable/eyes.png`. That
extra wrapper directory then leaks into the saved content paths and
produced ugly nesting like `male/MyWearable/MyWearable.png`.

Add a `stripWrappingFolder` pass that runs right after the zip is
unpacked: if every meaningful entry sits under one non-body-shape
top-level directory, strip it; repeat for nested wrappers. Body-shape
directories (`male/`, `female/`) are never stripped because they carry
schema meaning, and zips that ship an explicit wearable.json / emote
config skip the pass entirely so configured paths stay intact.

* test: cover wrapper unwrap edge cases and tighten empty-prefix guard

Add tests for two paths not previously exercised: a multi-level wrapper... (continued)

2159 of 5450 branches covered (39.61%)

Branch coverage included in aggregate %.

79 of 82 new or added lines in 4 files covered. (96.34%)

1 existing line in 1 file now uncovered.

7031 of 12490 relevant lines covered (56.29%)

33.81 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
49.57
7.09% src/modules/item/utils.ts
1
40.57
7.81% src/components/Modals/CreateSingleItemModal/utils.ts

Coverage Regressions

Lines Coverage ∆ File
1
55.07
7.45% src/modules/item/errors.tsx
Jobs
ID Job ID Ran Files Coverage
1 25758242929.1 12 May 2026 07:52PM UTC 652
53.04
GitHub Action Run
Source Files on build 25758242929
  • Tree
  • List 326
  • Changed 199
  • Source Changed 3
  • Coverage Changed 199
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #25758242929
  • a8027f6c on github
  • Prev Build on master (#25744046420)
  • Next Build on master (#25824404027)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc