Skip to content

chore(content-server): remove dead grunt build steps, tailwind and app/images - #21659

Open
fxa-agent[bot] wants to merge 1 commit into
mainfrom
fxa-14887
Open

fxa-agent[bot] wants to merge 1 commit into
mainfrom
fxa-14887

Conversation

@fxa-agent

@fxa-agent fxa-agent Bot commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Because

  • FXA-14883 removed the generated 404 pages, which were the only input of most content server grunt steps and of the view engine.
  • Nothing uses the Tailwind CSS output or app/images, but the package still installs 12 dependencies for them.

This pull request

  • Deletes the cdnify, concat, cssmin, replace, rev, sriify and usemin grunt tasks.
  • Drops the error_pages, mozillaonline and styles copy targets and the images glob in copy:dist.
  • Drops the htmlmin templates target. The appFiles target stays for crash.html.
  • Drops the page_template entries in clean.js and yeoman.js.
  • Removes consolidate and the handlebars view engine from server/bin/fxa-content-server.js. No res.render call exists.
  • Removes the page_template_root and page_template_subdirectory config, also from production.json and local.json-dist.
  • Removes Tailwind: the build-css script and its calls in build and start-production, the content-css pm2 process, postcss.config.js, tailwind.config.js and app/styles.
  • Removes app/images (154 files).
  • Removes these dependencies and updates yarn.lock: consolidate, handlebars, grunt-cdn, grunt-contrib-concat, grunt-contrib-cssmin, grunt-file-rev, grunt-sri, grunt-text-replace, grunt-usemin, postcss-assets, postcss-import and tailwindcss.
  • Changes build-fast to exit 0, as in fxa-auth-server, fxa-settings and fxa-react. This way prebuild still runs under yarn start mza.

Risk

Risk: High (the worst of the three below)

  • Merge risk: High. 178 files, +4 -3910: the content server, dependencies, config.
  • Rollback: Moderate. A config change needs a restart.
  • Verification: Partial. 7 checks pass, 1 left to CI; no test is shown to fail without the fix.
  • Would not catch: production clients that still request /images/* from the content server (old emails, cached pages) or the production Docker build; CI covers the build, and a reviewer must check the access logs.

Issue that this pull request solves

Closes: https://mozilla-hub.atlassian.net/browse/FXA-14887

Checklist

Put an x in the boxes that apply

  • My commit is GPG signed.
  • If applicable, I have modified or added tests which pass locally.
  • I have added necessary documentation (if appropriate).
  • I have verified that my changes render correctly in RTL (if appropriate).
  • I have manually reviewed all AI generated code.

How to review (Optional)

  • Key files/areas to focus on: server/bin/fxa-content-server.js, grunttasks/copy.js and the scripts key in package.json.
  • Suggested review order: package.json, the grunt tasks, then the server file.
  • Risky or complex parts: the removal of app/images. See "Before merge".

Screenshots (Optional)

No user interface change.

Other information (Optional)

Before merge: A reviewer checks the content server access logs for /images/* requests before merge. This PR did not check them.

Testing. I ran these checks in the sandbox:

  • grunt build passes. dist has crash.html and settings/. It has no images/ and no styles/.
  • The 55 server/lib mocha specs pass. They include 404.test.js and 500.test.js.
  • eslint, Prettier and tsc pass on the changed files.
  • On the running stack, the content server restarted on the change. It answers an unknown path with a JSON 404. It answers a bad JSON POST to /metrics with 500.

CI covers the Docker build and the full suites.

Notes for reviewers:

  • This PR edits the scripts key of packages/fxa-content-server/package.json. It removes build-css and changes build, build-fast and start-production, as the ticket asks.
  • _dev/docker/docker-compose.yml:45 still sets PAGE_TEMPLATE_SUBDIRECTORY=dist. It is outside the scope of this PR. Convict ignores an env var that has no schema key. A follow-up can remove it.

Merge Confidence: 3/5

This change removes the content-server’s unused page-template and CSS build pipeline, including Tailwind, the Handlebars view engine, related Grunt tasks, configuration, and dependencies. It also changes build-fast to exit successfully without building CSS and removes the content-css PM2 app.

The author reports that grunt build, the server/lib Mocha specs, and linting and type checks on changed files pass. Local checks reportedly confirm JSON responses for an unknown path and a bad JSON POST. The author did not verify production Docker builds or check access logs for requests to /images/*, so confirm those before merge.

@fxa-agent fxa-agent Bot added the auto label Oct 30, 2026
@fxa-agent
fxa-agent Bot requested a review from a team as a code owner October 30, 2026 16:34
@coderabbitai

coderabbitai Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Important

Review skipped

Review was skipped as selected files did not have any reviewable changes.

Files ignored due to path filters: 155
  • packages/fxa-content-server/app/images/account-verified.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/da.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/de.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/en.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/es.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/et.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/fr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/he.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/hu.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/id.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/it.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ja.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ko.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/lt.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/nb-NO.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/nl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pt-BR.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pt.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ru.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sk.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sv-SE.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/tr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/zh-CN.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/zh-TW.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/back-arrow.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/chevron.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/choose_what_to_sync_devices.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/confirm-pairing.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/crop-mask.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/default-profile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/firefox-logo.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-camera-32.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-clear-16.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-upload-16.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/google_play_store_button/ca.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ca@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/cs.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/cs@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/da.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/da@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/de.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/de@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/en.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/en@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/es.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/es@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/et.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/et@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/fr.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/fr@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/hu.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/hu@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/id.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/id@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/it.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/it@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ja.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ja@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ko.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ko@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/lt.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/lt@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nb-NO.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nb-NO@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt-BR.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt-BR@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ru.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ru@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sk.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sk@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sv.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sv@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/tr.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/tr@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/uk.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/uk@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-CN.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-CN@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-TW.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-TW@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic-triple-device-hearts.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_broken_connection.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_cad_qr_code.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_hearts_broken.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_laptop_mobile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_laptop_mobile_qr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_mail.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_mail_bounced.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_recovery_codes.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_sync_intro.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic_sync_intro@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic_two_factor_auth.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-client-default.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-close.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-linux.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-mac.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-windows.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-iphone.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-windows.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet-android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet-ipad.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tv.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-vr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-open-in.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-qr-code.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-addon.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-better-web.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-firefox-notes.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-lockbox.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-lockwise.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-monitor.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-mozilla-vpn.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-pontoon.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-private-network.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-reality.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-screenshots.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-send.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-web-session.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/moz-m-logo.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/mozilla.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/qr_code_firefox_mobile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_copy.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_download.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_print.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_replace.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_download.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_key.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_print.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_complete.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_desktop.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_ios.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/spinnergrey.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnergrey@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerlight.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerlight.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/spinnerlight@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerwhite.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/third_party_auth/apple_btn_normal.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/third_party_auth/google_btn_normal.svg is excluded by !**/*.svg, !**/*.svg
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock, !yarn.lock
Run configuration
  • Source mode: Auto
  • Repository: mozilla/fxa
  • Branch: main
  • File: .coderabbit.yaml
  • Commit: 3f78fe7
  • Layers: Repository YAML
  • Review profile: CHILL
  • Plan: Enterprise
  • Run ID: f01f27e4-cc4d-4e92-bb81-2b51a0dd4a05
Commits

Reviewing files that changed from the base of the PR and between 00a9939 and d3ba2a2.

Files ignored due to path filters: 155
  • packages/fxa-content-server/app/images/account-verified.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/da.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/de.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/en.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/es.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/et.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/fr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/he.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/hu.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/id.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/it.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ja.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ko.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/lt.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/nb-NO.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/nl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pt-BR.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/pt.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/ru.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sk.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sl.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/sv-SE.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/tr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/zh-CN.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/apple_app_store_button/zh-TW.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/back-arrow.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/chevron.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/choose_what_to_sync_devices.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/confirm-pairing.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/crop-mask.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/default-profile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/firefox-logo.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-camera-32.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-clear-16.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/glyph-upload-16.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/google_play_store_button/ca.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ca@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/cs.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/cs@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/da.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/da@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/de.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/de@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/en.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/en@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/es.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/es@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/et.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/et@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/fr.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/fr@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/hu.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/hu@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/id.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/id@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/it.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/it@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ja.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ja@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ko.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ko@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/lt.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/lt@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nb-NO.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nb-NO@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/nl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt-BR.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt-BR@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/pt@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ru.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/ru@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sk.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sk@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sl.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sl@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sv.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/sv@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/tr.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/tr@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/uk.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/uk@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-CN.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-CN@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-TW.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/google_play_store_button/zh-TW@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic-triple-device-hearts.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_broken_connection.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_cad_qr_code.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_hearts_broken.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_laptop_mobile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_laptop_mobile_qr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_mail.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_mail_bounced.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_recovery_codes.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/graphic_sync_intro.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic_sync_intro@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/graphic_two_factor_auth.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-client-default.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-close.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-linux.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-mac.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop-windows.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-laptop.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-iphone.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone-windows.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-phone.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet-android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet-ipad.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tablet.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-tv.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-device-vr.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-open-in.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-qr-code.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-addon.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-better-web.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-firefox-notes.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-lockbox.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-lockwise.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-monitor.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-mozilla-vpn.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-pontoon.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-private-network.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-reality.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-screenshots.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-service-send.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/icon-web-session.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/moz-m-logo.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/mozilla.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/qr_code_firefox_mobile.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_copy.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_download.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_print.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_code_replace.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_download.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_key.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/recovery_key_print.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_android.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_complete.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_desktop.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/send_tab_ios.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/spinnergrey.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnergrey@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerlight.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerlight.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/spinnerlight@2x.png is excluded by !**/*.png, !**/*.{png,jpg,jpeg,gif,ico,webp}
  • packages/fxa-content-server/app/images/spinnerwhite.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/third_party_auth/apple_btn_normal.svg is excluded by !**/*.svg, !**/*.svg
  • packages/fxa-content-server/app/images/third_party_auth/google_btn_normal.svg is excluded by !**/*.svg, !**/*.svg
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock, !yarn.lock

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
Walkthrough

The content-server no longer configures server-rendered page templates or their associated processing tasks. The change also removes the Tailwind/PostCSS CSS build and related dependencies, and updates static asset copying and Prettier ignore paths.

Changes: Content-server build and rendering

Layer / File(s) Summary
Remove page-template rendering and processing
packages/fxa-content-server/server/lib/configuration.js, packages/fxa-content-server/server/config/*, packages/fxa-content-server/server/bin/fxa-content-server.js, packages/fxa-content-server/grunttasks/yeoman.js, packages/fxa-content-server/grunttasks/{clean,htmlmin,copy,cdnify,usemin}.js
Page-template settings and Express view setup were removed. Grunt page-template processing and copying tasks were removed or updated.
Remove Tailwind and CSS build
packages/fxa-content-server/app/styles/tailwind*, packages/fxa-content-server/tailwind.config.js, packages/fxa-content-server/postcss.config.js, packages/fxa-content-server/package.json, packages/fxa-content-server/pm2.config.js
Tailwind and PostCSS configuration, CSS build commands, and the PM2 content-css app were removed. start-production no longer runs the CSS build.
Remove distribution processing tasks
packages/fxa-content-server/grunttasks/{concat,cssmin,replace,rev,sriify}.js, packages/fxa-content-server/grunttasks/copy.js, packages/fxa-content-server/package.json, packages/fxa-content-server/.prettierignore
Distribution processing tasks and their dependencies were removed. Static asset copy patterns and Prettier ignore paths were updated.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Other

Possibly related PRs

  • mozilla/fxa#21650: Removes the remaining content-server localization and generated-page build pipeline.
  • mozilla/fxa#21648: Replaces the content-server-rendered HTML 404 page with the React Settings page.

Suggested reviewers: dschom, lzoog, vpomerleau

Merge Risk: ⚪ Minimal · up to 00a99

The remaining page and asset paths are supported by the reduced build. No concrete merge-blocking issue was established.

Architecture Summary

Architecture risk: 🔵 Low · up to 00a99

The change affects 1 system.

Changed systems: packages/fxa-content-server

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — packages/fxa-content-server (library) was modified; 23 changed files map to changed impact.

Before / after behavior

  • observed — Modified behavior in packages/fxa-content-server/.prettierignore: The ignore list includes locale, localization, distribution, and test certificate paths. The previous app/images/* and server/templates/pages/dist/* exclusions were removed.
  • observed — Modified behavior in packages/fxa-content-server/app/styles/tailwind.css: The entire stylesheet was removed, including its Tailwind and React style imports, CTA import, and body utility rules.
  • observed — Modified behavior in packages/fxa-content-server/app/styles/tailwind/README.md: The README documenting Tailwind usage, stylesheet and template considerations, and component-class guidance was removed.
  • observed — Modified behavior in packages/fxa-content-server/app/styles/tailwind/ctas.css: The stylesheet was deleted, removing the .cta-primary .spinner background and utility rules and the white text color rule for focused a.cta-primary links.
Pre-merge checks: Passed 7 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Title check Warning The title uses the required type, scope, and imperative lowercase subject, and it describes the changes. It is 77 characters, which exceeds the 72-character limit. Shorten the title to 72 characters or fewer while preserving the main change, for example: "chore(content-server): remove unused build steps and Tailwind".
Passed Passed checks: 7 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Sensitive Data Protection And Privacy Passed The pull request introduces no sensitive-data logging, metrics, Sentry events, error messages, credentials, third-party PII transfer, data retention, or isolation changes. The reviewed diff mainly del…
Security, Audit, And Regulatory Control Integrity Passed No explicit security-control failure is introduced. The diff removes obsolete build and view-template tooling, Tailwind assets, and static images. In server/bin/fxa-content-server.js, only the Handl…
Performance And Algorithmic Complexity Review Passed The PR does not introduce a performance or complexity defect covered by this check. The diff mainly deletes unused Grunt, Tailwind, image, and template-build code. The only executable additions are a …
Database Migration Safety Passed The pull request changes no files under packages/db-migrations/databases/*/patches/ and no migration metadata. It introduces no schema change, so the forward/reverse patch and target-patch requireme…
Full details: Sensitive Data Protection And Privacy

Explanation

The pull request introduces no sensitive-data logging, metrics, Sentry events, error messages, credentials, third-party PII transfer, data retention, or isolation changes. The reviewed diff mainly deletes build tasks, static assets, Tailwind files, dependencies, and the Handlebars view engine. The only added executable settings are build/copy commands. Existing metrics and request logging code is unchanged.

Full details: Security, Audit, And Regulatory Control Integrity

Explanation

No explicit security-control failure is introduced. The diff removes obsolete build and view-template tooling, Tailwind assets, and static images. In server/bin/fxa-content-server.js, only the Handlebars engine and template-directory setup are removed; Helmet, CSP, cookie parsing, body parsing, route logging, and route registration remain. No authentication, session, token, OAuth validation, rate limiting, webhook verification, payment control, or account-event implementation changes appear in the PR. The removed sriify task only added SRI attributes to obsolete server-rendered HTML and is not Stripe, PayPal, Apple, or Google webhook signature verification.

Full details: Performance And Algorithmic Complexity Review

Explanation

The PR does not introduce a performance or complexity defect covered by this check. The diff mainly deletes unused Grunt, Tailwind, image, and template-build code. The only executable additions are a narrower copy glob and simplified build scripts. No new request handlers, loops, datastore calls, listeners, buffers, or render work were added. The server’s existing body parsing and route setup remain unchanged; removing the PM2 CSS worker reduces background work.

Full details: Database Migration Safety

Explanation

The pull request changes no files under packages/db-migrations/databases/*/patches/ and no migration metadata. It introduces no schema change, so the forward/reverse patch and target-patch requirements do not apply.

Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

To fit the comment limit, these sections were omitted: recent review.

@fxa-agent fxa-agent Bot added the coderabbit Signal to CodeRabbit to perform a CR review label Oct 30, 2026
@@ -33,16 +33,5 @@ module.exports = function (grunt) {
],
options: minOptions,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

What do we need htmlmin for now if there's no used HTML files?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

One HTML file is left: app/crash.html. htmlmin appFiles (src *.html) is the only step that puts it into dist, because copy:dist now copies only *.{ico,png,txt} and .htaccess (grunttasks/copy.js). If crash.html is not needed, both can go in a follow-up.

This comment is from an AI agent.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Filed a follow up to address this https://mozilla-hub.atlassian.net/browse/FXA-14896

@@ -22,7 +22,6 @@ module.exports = function (grunt) {
'<%= yeoman.es5 %>/*',
'<%= yeoman.dist %>/*',

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do we still need yeoman / yeoman generators now in content-server? Or is there a more modern option (would just using vite give us what we want)? Probably a follow up.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

No yeoman package or generator is in the content server dependencies. grunttasks/yeoman.js is only a grunt config object with path names (app, dist, es5, tmp) that other grunt tasks read. A move from grunt to vite or plain scripts is wider than this ticket, so it fits a follow-up.

This comment is from an AI agent.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Filed a follow up to address this https://mozilla-hub.atlassian.net/browse/FXA-14896

…p/images

Because:

* The generated 404 pages are gone, so most content-server grunt steps,
  the view engine, tailwind and app/images have no input or user.

This commit:

* Deletes the dead grunt tasks and copy, htmlmin and template config.
* Removes the handlebars view engine and the page_template config.
* Removes tailwind, app/styles, app/images and the build-css script.
* Removes the unused dependencies and updates yarn.lock.

Closes FXA-14887

Co-authored-by: Lauren Zugai <lauren@zugai.com>

@LZoog LZoog left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

  • I verified the images in app/images haven't been used in emails since June 2020
  • Started the stack locally and poked around Settings without problems
  • I've filed yet another follow up for more deletions: https://mozilla-hub.atlassian.net/browse/FXA-14896

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto coderabbit Signal to CodeRabbit to perform a CR review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant