Skip to content

chore: slim Rocket.Chat Docker image (~260 MB, -14.7%)#40128

Merged
ggazzo merged 5 commits intodevelopfrom
perf/livechat-strip-maps
Apr 16, 2026
Merged

chore: slim Rocket.Chat Docker image (~260 MB, -14.7%)#40128
ggazzo merged 5 commits intodevelopfrom
perf/livechat-strip-maps

Conversation

@ggazzo
Copy link
Copy Markdown
Member

@ggazzo ggazzo commented Apr 13, 2026

Summary

A set of small, independent changes that together cut ~260 MB off the alpine Docker image (measured on rocketchat/rocket.chat:develop).

Commit What Measured impact
drop livechat sourcemaps from meteor bundle and clean dist on build In apps/meteor/packages/rocketchat-livechat/plugin/build.sh, delete *.map after copying packages/livechat/dist/ into public/livechat/. Also prefix the widget's build script with yarn clean so local dist/ stops accumulating stale chunks (measured 500 MB → 18 MB on a fresh build locally). ~12 MB in image; ~480 MB recovered locally on dev rebuilds
clean npm cache on alpine and omit dev deps on debian Add npm cache clean --force to the alpine builder (was missing), and pass --omit=dev to both npm installs in the debian variant (matches alpine). Hygiene; a few MB
drop legacy rocketchat icon font fallbacks Remove apps/meteor/public/fonts/rocketchat.{eot,svg,ttf,woff} symlinks and simplify rocketchat.font.css to only reference WOFF2 (browserslist is ["last 2 versions", "Firefox ESR"] — every target supports WOFF2). ~0.7 MB
strip sourcemaps from bundle and prod node_modules After npm install --omit=dev in the builder stage, delete *.map files under programs/server/npm/node_modules/ (third-party libs) and programs/web.browser/. Maps under programs/server/{app,packages,node_modules/meteor} are kept because Meteor's source-map-support opens some of them at boot. ~260 MB (the main lever)

Note on history: commit 0705df4a69 originally also removed 60 apps/meteor/public/fonts/KaTeX_* symlinks on the assumption they were orphan. Testing showed they are not — Meteor's bundler serializes katex/dist/katex.css with its url(fonts/...) rules intact and does not copy node_modules/katex/dist/fonts/ into the dynamic chunk. When the stylesheet is injected at runtime, the browser resolves the relative URLs against the document root and the fonts are expected to exist at /fonts/KaTeX_*.woff2 — served by Meteor from public/fonts/. A later commit on this branch restores them; see that commit's message for the full write-up. Net effect of this PR on KaTeX: no change.

Measured totals

Taken from flattened rocketchat/rocket.chat:develop images (so layer whiteouts aren't hiding the real numbers):

  • before: 1.78 GB
  • after: 1.52 GB (-260 MB / -14.6%)

Smoke-tested: the resulting image boots against MongoDB with no ENOENT on *.map files (ServiceBroker starts, EventService runs).

Method / reproducing

dive rocketchat/rocket.chat:develop --json /tmp/dive.json

docker run --name rc-safe --user root --entrypoint sh rocketchat/rocket.chat:develop -c "
  find /app/bundle/programs/server/npm/node_modules -type f -name '*.map' -delete
  find /app/bundle/programs/web.browser -type f -name '*.map' -delete
"
docker commit \
  --change='CMD ["node", "main.js"]' \
  --change='ENTRYPOINT ["docker-entrypoint.sh"]' \
  rc-safe rocketchat/rocket.chat:develop-safe
docker rm rc-safe

# Flatten both to measure actual size
for t in develop develop-safe; do
  CID=$(docker create rocketchat/rocket.chat:$t)
  docker export $CID | docker import - rocketchat/rocket.chat:$t-flat
  docker rm $CID >/dev/null
done
docker image ls rocketchat/rocket.chat | grep flat

Why the narrow find scope

An earlier revision used a single find /app/bundle -type f -name '*.map' -delete. That caused the container to crash at boot with:

Error: ENOENT: no such file or directory, open '/app/bundle/programs/server/packages/modules.js.map'

Meteor installs source-map-support and eagerly opens the meteor-packages bundle's .map file at startup. The scope is therefore restricted to paths Node never reads at runtime (server/npm/node_modules/**/*.map) plus the client bundle (web.browser/**/*.map).

Test plan

  • yarn --cwd packages/livechat build now runs rimraf dist first and produces a fresh, smaller dist/.
  • Full meteor build still works; apps/meteor/public/livechat/ no longer contains *.map files.
  • Livechat widget loads in the browser with no console errors about missing maps.
  • Main app renders KaTeX formulas correctly, including extensible delimiters (e.g. \begin{bmatrix}1&2\\3&4\end{bmatrix}) — font requests for /fonts/KaTeX_* must return 200 with valid font bytes, not the SPA index.html.
  • Main app renders Rocket.Chat icons (only WOFF2 served).
  • docker build -f apps/meteor/.docker/Dockerfile.alpine succeeds.
  • docker build -f apps/meteor/.docker/Dockerfile.debian succeeds.
  • Runtime smoke test on the smaller image (login, send message, PDF export, OAuth callback).
  • Lint / TypeScript pass.

Task: ARCH-2099

Summary by CodeRabbit

Release Notes

  • Chores
    • Optimized production builds by removing sourcemap files to reduce deployment size.
    • Updated dependency installation to exclude development packages in Docker builds.
    • Optimized font loading by standardizing to WOFF2 format for improved browser compatibility and performance.

…uild

The livechat widget's webpack build emits full source-map files (~12 MB
in a fresh build, far more with accumulated rebuilds). They are copied
into apps/meteor/public/livechat/ by the rocketchat-livechat plugin and
end up in the Meteor bundle and Docker image without adding runtime
value.

- plugin/build.sh: delete .map files after copying dist into public.
  Maps remain in packages/livechat/dist for local debugging or upload
  to error tracking.
- packages/livechat: prefix build with yarn clean so dist no longer
  accumulates stale hashed chunks across rebuilds (noticed dist growing
  to ~500 MB locally vs. ~18 MB fresh).
@ggazzo ggazzo requested review from a team as code owners April 13, 2026 14:36
@dionisio-bot
Copy link
Copy Markdown
Contributor

dionisio-bot Bot commented Apr 13, 2026

Looks like this PR is ready to merge! 🎉
If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 13, 2026

⚠️ No Changeset found

Latest commit: 755e38f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 13, 2026

Walkthrough

Adds post-build cleanup of sourcemap files and minor build/script adjustments across Livechat, Docker build stages, and font assets; also restricts removed maps to locations safe for runtime. Includes a WOFF2-only font reference change.

Changes

Cohort / File(s) Summary
Livechat build & npm script
apps/meteor/packages/rocketchat-livechat/plugin/build.sh, packages/livechat/package.json
After copying packages/livechat/dist into public/livechat, delete *.map files; packages/livechat build script now runs yarn clean before invoking webpack in production.
Docker builder cleanup (alpine & debian)
apps/meteor/.docker/Dockerfile.alpine, apps/meteor/.docker/Dockerfile.debian
Run npm install --omit=dev (debian), add npm cache clean --force (alpine), and remove *.map files from /app/bundle/programs/server/npm/node_modules and /app/bundle/programs/web.browser, preserving maps under /app/bundle/programs/server/{app,packages,node_modules/meteor}.
Font asset reference
apps/meteor/app/theme/client/rocketchat.font.css
Simplify @font-face to reference only WOFF2 (/fonts/rocketchat.woff2), removing legacy EOT/WOFF/TTF/SVG sources.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

type: chore

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main objective: reducing Docker image size by ~260 MB (14.7%), which directly matches all major changes across build scripts, Dockerfiles, and CSS.
Linked Issues check ✅ Passed All code changes directly address ARCH-2099 objectives: livechat sourcemap removal, npm cache cleanup, legacy font removal, and production sourcemap stripping from node_modules and web.browser are fully implemented as specified.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to ARCH-2099: five focused modifications (livechat cleanup, build script, Dockerfiles, font CSS) with no extraneous refactoring or unrelated code changes present.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Stylelint (17.7.0)
apps/meteor/app/theme/client/rocketchat.font.css

ConfigurationError: Could not find "stylelint-order". Do you need to install the package or use the "configBasedir" option?
at getModulePath (file:///usr/local/lib/node_modules/stylelint/lib/utils/getModulePath.mjs:29:9)
at toAbsolutePath (file:///usr/local/lib/node_modules/stylelint/lib/augmentConfig.mjs:169:11)
at Array.map ()
at absolutizePaths (file:///usr/local/lib/node_modules/stylelint/lib/augmentConfig.mjs:176:44)
at augmentConfigBasic (file:///usr/local/lib/node_modules/stylelint/lib/augmentConfig.mjs:83:9)
at async augmentConfigFull (file:///usr/local/lib/node_modules/stylelint/lib/augmentConfig.mjs:126:24)
at async getConfigForFile (file:///usr/local/lib/node_modules/stylelint/lib/getConfigForFile.mjs:102:26)
at async resolveOptionValue (file:///usr/local/lib/node_modules/stylelint/lib/utils/resolveOptionValue.mjs:27:24)
at async standalone (file:///usr/local/lib/node_modules/stylelint/lib/standalone.mjs:204:19)


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ggazzo ggazzo marked this pull request as draft April 13, 2026 14:38
@ggazzo ggazzo changed the title perf: drop livechat sourcemaps from meteor bundle and clean dist on build chore: drop livechat sourcemaps from meteor bundle and clean dist on build Apr 13, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 13, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.21%. Comparing base (9760d84) to head (755e38f).
⚠️ Report is 30 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff            @@
##           develop   #40128    +/-   ##
=========================================
  Coverage    70.20%   70.21%            
=========================================
  Files         3278     3280     +2     
  Lines       116605   116852   +247     
  Branches     20723    20711    -12     
=========================================
+ Hits         81859    82042   +183     
- Misses       31444    31526    +82     
+ Partials      3302     3284    -18     
Flag Coverage Δ
e2e 59.71% <ø> (+0.06%) ⬆️
e2e-api 46.54% <ø> (-0.92%) ⬇️
unit 71.03% <ø> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

ggazzo added 2 commits April 13, 2026 12:54
Two small gaps vs. standard Docker image hygiene:

- Dockerfile.alpine: add `npm cache clean --force` after the prod
  install in bundle/programs/server so the cache doesn't ship in the
  final image layer.
- Dockerfile.debian: pass `--omit=dev` to both npm installs to match
  the alpine variant, avoiding devDependencies of meteor-dev-bundle
  (split2, multipipe, chalk) in the production image.
- apps/meteor/public/fonts/KaTeX_*.{ttf,woff,woff2} (60 files, ~1 MB):
  orphan. The main app does not reference them in any CSS, SCSS, or
  JS/TS source — only the livechat widget uses KaTeX, and it bundles
  its own hashed copies via webpack's file-loader. These were left
  over from when the main app used KaTeX directly.

- apps/meteor/public/fonts/rocketchat.{eot,svg,ttf,woff} (4 files,
  ~0.7 MB) and the corresponding @font-face fallbacks in
  app/theme/client/rocketchat.font.css: with `browserslist: ["last 2
  versions", "Firefox ESR"]`, every target supports WOFF2. EOT (IE),
  SVG fonts (iOS <4.2), TTF and WOFF are unused fallbacks.
@ggazzo ggazzo changed the title chore: drop livechat sourcemaps from meteor bundle and clean dist on build perf: slim Rocket.Chat Docker image (~280 MB, -15.7%) Apr 13, 2026
@ggazzo ggazzo changed the title perf: slim Rocket.Chat Docker image (~280 MB, -15.7%) chore: slim Rocket.Chat Docker image (~280 MB, -15.7%) Apr 13, 2026
After `npm install --omit=dev` in the builder stage, delete every
`*.map` file inside /app/bundle. Node does not consume sourcemaps at
runtime; the bytes come from `.map` files shipped inside third-party
packages (openpgp, date-fns, meteor/*, etc.) and from server/app.js.map.

Measured on a flattened rocketchat/rocket.chat:develop image:
- before: 1.78 GB
- after:  1.50 GB (-280 MB / -15.7%)
- 18,285 .map files removed

`-type f` guards against directories named `*.map` (e.g. the
`array.prototype.map` npm package).
@ggazzo ggazzo force-pushed the perf/livechat-strip-maps branch from 7d74923 to 725bddb Compare April 13, 2026 18:36
@ggazzo ggazzo changed the title chore: slim Rocket.Chat Docker image (~280 MB, -15.7%) chore: slim Rocket.Chat Docker image (~260 MB, -14.6%) Apr 13, 2026
@ggazzo ggazzo added this to the 8.4.0 milestone Apr 13, 2026
@ggazzo
Copy link
Copy Markdown
Member Author

ggazzo commented Apr 13, 2026

/jira ARCH-2083

@ggazzo ggazzo changed the title chore: slim Rocket.Chat Docker image (~260 MB, -14.6%) chore: slim Rocket.Chat Docker image (~260 MB, -14.7%) Apr 13, 2026
The previous commit assumed the 60 KaTeX_*.{woff2,woff,ttf} files in
apps/meteor/public/fonts/ were orphan because no code in the repo
references them by name. That was wrong.

gazzodown imports katex/dist/katex.css, which contains @font-face rules
with relative URLs like url(fonts/KaTeX_Main-Regular.woff2). The Meteor
bundler copies katex.css into the dynamic chunk literally, without
processing url() or copying the katex/dist/fonts/ directory alongside
it. When the stylesheet is injected as a <style> element at runtime,
the browser resolves url(fonts/...) against the document root (/), so
the font requests land at /fonts/KaTeX_*.woff2 — served by Meteor from
apps/meteor/public/fonts/.

Removing the files means those requests hit the Meteor SPA catch-all,
which returns index.html with HTTP 200. The browser accepts the 200
but fails to parse the HTML as a font, all three @font-face fallbacks
fail (woff2 -> woff -> ttf, all the same HTML response), and rendering
falls back to a system font with different metrics. The regression is
subtle — simple formulas like x^2 + y^2 look nearly identical under
the system fallback — but anything using extensible delimiters
(matrices via \begin{bmatrix}, fractions, radicals) picks different
glyphs for the bracket/brace pieces and the vertical alignment breaks.

The root problem is that these files are duplicated between
node_modules/katex/dist/fonts/ and apps/meteor/public/fonts/. A proper
fix would be a build step that copies from node_modules at build time,
or a Meteor-side change to make the bundler process url() in imported
third-party CSS. Neither is in scope for this PR; restore the files as
they were so main runs unaffected.

The rocketchat.{eot,svg,ttf,woff} removal and the corresponding
rocketchat.font.css change stay — those were fallbacks in our own CSS,
controlled by the repo's browserslist, and every supported target has
WOFF2.
@ggazzo ggazzo marked this pull request as ready for review April 15, 2026 14:56
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/meteor/.docker/Dockerfile.debian`:
- Line 42: Replace the invalid npm command in the Dockerfile: locate the line
containing "npm cache clear --force" and change it to "npm cache clean --force"
so the Debian Docker build uses the correct npm cache subcommand; ensure no
other occurrences of "npm cache clear" remain in the file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9a0b79f1-70c6-4c91-8291-5a0e9d2ad4e9

📥 Commits

Reviewing files that changed from the base of the PR and between 2d9bb9b and 755e38f.

⛔ Files ignored due to path filters (4)
  • apps/meteor/public/fonts/rocketchat.eot is excluded by !**/*.eot
  • apps/meteor/public/fonts/rocketchat.svg is excluded by !**/*.svg
  • apps/meteor/public/fonts/rocketchat.ttf is excluded by !**/*.ttf
  • apps/meteor/public/fonts/rocketchat.woff is excluded by !**/*.woff
📒 Files selected for processing (3)
  • apps/meteor/.docker/Dockerfile.alpine
  • apps/meteor/.docker/Dockerfile.debian
  • apps/meteor/app/theme/client/rocketchat.font.css
✅ Files skipped from review due to trivial changes (1)
  • apps/meteor/app/theme/client/rocketchat.font.css
📜 Review details
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 38974
File: apps/meteor/app/api/server/v1/im.ts:220-221
Timestamp: 2026-02-24T19:09:09.561Z
Learning: In RocketChat/Rocket.Chat OpenAPI migration PRs for apps/meteor/app/api/server/v1 endpoints, maintainers prefer to avoid any logic changes; style-only cleanups (like removing inline comments) may be deferred to follow-ups to keep scope tight.
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 0
File: :0-0
Timestamp: 2026-02-24T19:05:56.710Z
Learning: In Rocket.Chat PRs, keep feature PRs free of unrelated lockfile-only dependency bumps; prefer reverting lockfile drift or isolating such bumps into a separate "chore" commit/PR, and always use yarn install --immutable with the Yarn version pinned in package.json via Corepack.
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 0
File: :0-0
Timestamp: 2026-02-24T19:05:56.710Z
Learning: Rocket.Chat repo context: When a workspace manifest on develop already pins a dependency version (e.g., packages/web-ui-registration → "rocket.chat/ui-contexts": "27.0.1"), a lockfile change in a feature PR that upgrades only that dependency’s resolution is considered a manifest-driven sync and can be kept, preferably as a small "chore: sync yarn.lock with manifests" commit.
Learnt from: smirk-dev
Repo: RocketChat/Rocket.Chat PR: 39625
File: apps/meteor/app/api/server/v1/push.ts:85-97
Timestamp: 2026-03-14T14:58:58.834Z
Learning: In RocketChat/Rocket.Chat, the `push.token` POST/DELETE endpoints in `apps/meteor/app/api/server/v1/push.ts` were already migrated to the chained router API pattern on `develop` prior to PR `#39625`. `cleanTokenResult` (which strips `authToken` and returns `PushTokenResult`) and `isPushTokenPOSTProps`/`isPushTokenDELETEProps` validators already exist on `develop`. PR `#39625` only migrates `push.get` and `push.info` to the chained pattern. Do not flag `cleanTokenResult` or `PushTokenResult` as newly introduced behavior-breaking changes when reviewing this PR.
Learnt from: ggazzo
Repo: RocketChat/Rocket.Chat PR: 35995
File: apps/meteor/app/api/server/v1/rooms.ts:1107-1112
Timestamp: 2026-02-23T17:53:18.785Z
Learning: In Rocket.Chat PR reviews, maintain strict scope boundaries—when a PR is focused on a specific endpoint (e.g., rooms.favorite), avoid reviewing or suggesting changes to other endpoints that were incidentally refactored (e.g., rooms.invite) unless explicitly requested by maintainers.
📚 Learning: 2026-02-24T19:09:09.561Z
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 38974
File: apps/meteor/app/api/server/v1/im.ts:220-221
Timestamp: 2026-02-24T19:09:09.561Z
Learning: In RocketChat/Rocket.Chat OpenAPI migration PRs for apps/meteor/app/api/server/v1 endpoints, maintainers prefer to avoid any logic changes; style-only cleanups (like removing inline comments) may be deferred to follow-ups to keep scope tight.

Applied to files:

  • apps/meteor/.docker/Dockerfile.debian
  • apps/meteor/.docker/Dockerfile.alpine
📚 Learning: 2026-03-17T16:08:37.572Z
Learnt from: cardoso
Repo: RocketChat/Rocket.Chat PR: 39690
File: packages/ui-voip/package.json:11-11
Timestamp: 2026-03-17T16:08:37.572Z
Learning: In `packages/ui-voip/package.json` (RocketChat/Rocket.Chat), the team deliberately chose to use `rm -rf dist` directly in the `"build"` script instead of `rimraf`, as they decided against introducing the `rimraf` dependency for this package. Do not flag `rm -rf dist` in the ui-voip build script as a cross-platform issue requiring rimraf.

Applied to files:

  • apps/meteor/.docker/Dockerfile.debian
📚 Learning: 2026-02-25T20:10:16.987Z
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 38913
File: packages/ddp-client/src/legacy/types/SDKLegacy.ts:34-34
Timestamp: 2026-02-25T20:10:16.987Z
Learning: In the RocketChat/Rocket.Chat monorepo, packages/ddp-client and apps/meteor do not use TypeScript project references. Module augmentations in apps/meteor (e.g., declare module 'rocket.chat/rest-typings') are not visible when compiling packages/ddp-client in isolation, which is why legacy SDK methods that depend on OperationResult types for OpenAPI-migrated endpoints must remain commented out.

Applied to files:

  • apps/meteor/.docker/Dockerfile.debian
📚 Learning: 2026-02-24T19:05:56.710Z
Learnt from: ahmed-n-abdeltwab
Repo: RocketChat/Rocket.Chat PR: 0
File: :0-0
Timestamp: 2026-02-24T19:05:56.710Z
Learning: In Rocket.Chat PRs, keep feature PRs free of unrelated lockfile-only dependency bumps; prefer reverting lockfile drift or isolating such bumps into a separate "chore" commit/PR, and always use yarn install --immutable with the Yarn version pinned in package.json via Corepack.

Applied to files:

  • apps/meteor/.docker/Dockerfile.debian
📚 Learning: 2026-04-14T23:23:18.990Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 40159
File: packages/apps-engine/turbo.json:6-6
Timestamp: 2026-04-14T23:23:18.990Z
Learning: In RocketChat/Rocket.Chat's Turborepo setup, the workspace-root `package.json` is part of Turbo's global hash and does not need to be explicitly listed in a package-level turbo.json task's `inputs` array. Changes to the root `package.json` already bust the cache for all tasks via the global hash. Do not flag the absence of `$TURBO_ROOT$/package.json` in task-level inputs as a cache-invalidation issue.

Applied to files:

  • apps/meteor/.docker/Dockerfile.debian
🔇 Additional comments (2)
apps/meteor/.docker/Dockerfile.debian (1)

38-50: LGTM on the sourcemap cleanup approach.

The --omit=dev flags correctly exclude devDependencies from production installs, and the selective sourcemap deletion preserves only what Meteor's source-map-support requires at runtime while removing ~260 MB of unnecessary files. The inline comments clearly document the rationale.

apps/meteor/.docker/Dockerfile.alpine (1)

11-21: LGTM!

The Alpine builder correctly uses npm cache clean --force, --omit=dev for production installs, and the same sourcemap pruning strategy as the Debian variant. The multi-stage build ensures the cleanup reduces the final image size effectively.

Comment thread apps/meteor/.docker/Dockerfile.debian
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 9 files

@ggazzo ggazzo added the stat: QA assured Means it has been tested and approved by a company insider label Apr 16, 2026
@dionisio-bot dionisio-bot Bot added the stat: ready to merge PR tested and approved waiting for merge label Apr 16, 2026
@dionisio-bot dionisio-bot Bot enabled auto-merge April 16, 2026 19:08
@ggazzo ggazzo merged commit 8f111f7 into develop Apr 16, 2026
46 checks passed
@ggazzo ggazzo deleted the perf/livechat-strip-maps branch April 16, 2026 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stat: QA assured Means it has been tested and approved by a company insider stat: ready to merge PR tested and approved waiting for merge type: improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants