Skip to content

[SCF-2416] [Part 2] Upgrade test and lint tooling (ESLint 8, Prettier 3, ember-try 3, stylelint) - #17

Open
Gaurav0 wants to merge 7 commits into
gaurav/chore/SCF-2416-part-1-drop-ember-3-28-and-4-4from
gaurav/chore/SCF-2416-part-2-test-and-lint-tooling
Open

Gaurav0 wants to merge 7 commits into
gaurav/chore/SCF-2416-part-1-drop-ember-3-28-and-4-4from
gaurav/chore/SCF-2416-part-2-test-and-lint-tooling

Conversation

@Gaurav0

@Gaurav0 Gaurav0 commented Nov 5, 2026 •

Copy link
Copy Markdown

Summary

Moves the test and lint tooling to the ember-cli 5.4 addon blueprint's versions, ahead of the blueprint sync in Part 8. Devtools only: nothing here changes what consumers install.

  • EXTEND_PROTOTYPES: false in the dummy app replaces the ember-disable-prototype-extensions addon.
  • Test tooling: qunit, qunit-dom 2, ember-page-title 8, @embroider/test-setup 3, webpack 5.89 and others.
    • @ember/test-helpers, ember-qunit and ember-resolver are held back. On ember-cli 3.28, ember-qunit 7+ makes testem fail with "unable to detect a test framework". Part 8 finishes them.
    • Embroider runs on webpack 5, which no longer polyfills node built-ins, so the dummy app falls back to the util package for sinon. A DefinePlugin sets process.env.NODE_DEBUG to false, so sinon loads.
  • ember-try 3. The existing config keeps working.
  • ESLint 8: @babel/eslint-parser replaces babel-eslint and eslint-plugin-n replaces eslint-plugin-node. eslint-plugin-qunit stays at ^6, because v8 adds 44 errors (follow-up).
  • Prettier 3, keeping trailingComma: 'es5'. The only reformatting is nested-ternary indentation.
  • concurrently replaces the unmaintained npm-run-all.
  • stylelint with stylelint-config-standard and stylelint-prettier, through new lint:css scripts.

+74/−38 lines, not counting yarn.lock.

Stack

Part of the SCF-2416 work (ember-bootstrap 5.0.0), split from scf-2416-rework for easier review. This is part 2 of 9. Stacked on Part 1: its base is gaurav/chore/SCF-2416-part-1-drop-ember-3-28-and-4-4, so the diff only shows this part. Merge in order.

Part PR Title
1 #16 Drop Ember 3.28 and 4.4, bump to 5.0.0
2 this PR Upgrade test and lint tooling (ESLint 8, Prettier 3, ember-try 3, stylelint)
3 #18 Upgrade build dependencies and drop polyfills
4 #19 Require Node 20 and switch @embroider/util to a fork
5 #20 Replace ember-on-helper and ember-ref-bucket
6 #21 Upgrade addon dependencies off ember-cli-babel 7
7 #22 Keep Bootstrap 3 and subclassing, drop their deprecations
8 #23 ember-cli-update to the 5.4 addon blueprint
9 #24 Force and refresh remaining vulnerable dependencies

Review notes

The Embroider util fallback and DefinePlugin in ember-cli-build.js need the closest look. Without the DefinePlugin, every sinon test fails under Embroider with "process is not defined".

Testing

Run on this branch with Node 20.19.6: yarn install --frozen-lockfile passes, yarn lint reports 0 errors (the same 150 warnings as scf_master), and ember test (Ember 4.8, the default) has 532 passed, 9 skipped and 0 failed. No new tests. CI covers the ember-try matrix.

🤖 Generated with Claude Code

Gaurav0 and others added 7 commits November 5, 2026 09:02
…OTYPES: false

The 5.4 addon blueprint drops the ember-disable-prototype-extensions
addon and sets EmberENV.EXTEND_PROTOTYPES to false in the dummy app
instead, which also covers the Date.parse case the old setting guarded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps the dummy-app and test devDependencies the 5.4 addon blueprint
touches: qunit ^2.20.0, qunit-dom ^2.0.0, ember-page-title ^8.0.0,
@embroider/test-setup ^3.0.2, ember-cli-dependency-checker ^3.3.2,
webpack ^5.89.0, and @glimmer/component and @glimmer/tracking ^1.1.2.

@ember/test-helpers (^2.9.6), ember-qunit (^6.2.0) and ember-resolver
(^8.1.0) are held below the blueprint's versions for now. ember-cli
3.28's test-support suffix calls Testem.hookIntoTestFramework() before
ember-qunit 7+, a v2 addon, has loaded QUnit, so testem fails with
"unable to detect a test framework". They move to the blueprint's
versions after the ember-cli-update.

ember-qunit 6 asks for ember-auto-import ^2 itself, so the
ember-qunit/ember-auto-import resolution is no longer needed.

The Embroider build that @embroider/test-setup 3 installs runs on
webpack 5, which no longer polyfills node's built-in modules, and
sinon (via ember-sinon) imports util. The dummy app's webpack config
falls back to the util package, a new devDependency, so the Embroider
scenarios build again. util reads process.env.NODE_DEBUG when it loads,
so a DefinePlugin replaces that with false; without it the first sinon
import throws "process is not defined" and every sinon test fails.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ember-try 3 is the 5.4 addon blueprint's version. It reads its config
from ember-addon.configPath (tests/dummy/config), falling back to
config/ember-try.js, so the existing config keeps working.

ember-try-config now asks for ember-source-channel-url ^3 itself, so
the **/ember-try-config/ember-source-channel-url resolution is no
longer needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 5.4 addon blueprint's lint toolchain:
- eslint ^8.52.0, eslint-plugin-ember ^11.11.1, eslint-config-prettier ^9
- @babel/eslint-parser (with @babel/plugin-proposal-decorators for
  decorator syntax) replaces the unmaintained babel-eslint
- eslint-plugin-n replaces the unmaintained eslint-plugin-node

eslint-plugin-qunit stays ^6: v8 adds 44 no-assert-equal errors, which
is a follow-up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
prettier ^3.0.3 and eslint-plugin-prettier ^5 (which needs ESLint 8),
the 5.4 addon blueprint's versions.

trailingComma 'es5' keeps Prettier 2's default, so the only reformatting
is Prettier 3's nested-ternary indentation.

ember-source 4.8's remove-types still asks for prettier ^2.5.1, so a
nested Prettier 2 copy stays in the lockfile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 5.4 addon blueprint runs the lint and test scripts through
concurrently; npm-run-all is unmaintained.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 5.4 addon blueprint lints CSS with stylelint (stylelint-config-standard
plus stylelint-prettier, which needs Prettier 3) via the lint:css and
lint:css:fix scripts. /docs/ and /vendor/ are not linted here.

The dummy app's empty app.css gets the blueprint's comment so it doesn't
trip no-empty-source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant