Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
76b1739
Add coverage tooling, replace generated test stubs, run tests in CI
roncodes Aug 6, 2026
801f8a6
Stop the suite hanging and decouple four utils from the console app
roncodes Aug 6, 2026
97e2079
Resolve the coverage babel plugin lazily so lint and consumers stay c…
roncodes Aug 6, 2026
c8803b6
Point the coverage gate self-tests at an explicit file
roncodes Aug 6, 2026
07392db
Fix utils broken under EXTEND_PROTOTYPES=false and remove a dead module
roncodes Aug 6, 2026
01c57f1
Replace failing util stubs and fix three more defects they exposed
roncodes Aug 6, 2026
586c5d8
Declare ember-fetch, configure the dummy app, and stub the console ex…
roncodes Aug 6, 2026
5d9e181
Reset local storage between tests and stop a stub making real network…
roncodes Aug 6, 2026
7cd03eb
Replace more util stubs and fix two defects the new tests exposed
roncodes Aug 6, 2026
f50c412
Cover the registration, relation and serialize utils
roncodes Aug 6, 2026
17ef565
Cover the small services and fix two defects they exposed
roncodes Aug 6, 2026
94e2cbc
Cover the loader and language services, fixing two more array defects
roncodes Aug 6, 2026
508b9d3
Document the url-search-params service, most of which does not work
roncodes Aug 6, 2026
fc2befa
Cover the contract classes and declare a third missing dependency
roncodes Aug 6, 2026
f0e49e9
Cover the Hook contract
roncodes Aug 6, 2026
3ce6589
Cover the from-store decorator and document that isEqual is broken
roncodes Aug 6, 2026
1d5073d
Upload coverage before the gate, and cover legacy-from-store
roncodes Aug 6, 2026
f57c252
Cover the Widget contract
roncodes Aug 7, 2026
a3946c6
Cover ExtensionComponent, including that it never validates itself
roncodes Aug 7, 2026
ac4edf2
Cover TemplateHelper name derivation
roncodes Aug 7, 2026
f454176
Cover the MenuPanel contract
roncodes Aug 7, 2026
f4d396a
Cover the MenuItem contract, the last of the contracts
roncodes Aug 7, 2026
ea535c9
Cover the theme and filters services, fixing three more array defects
roncodes Aug 7, 2026
fdc037d
Cover the socket service, fixing two more array defects
roncodes Aug 7, 2026
9c5afce
Cover the session service
roncodes Aug 7, 2026
259b402
Cover the events service
roncodes Aug 7, 2026
3828e77
Fix pushObjects on a plain array in current-user, and cover permissions
roncodes Aug 7, 2026
f39b95a
Refuse to write coverage from a filtered test run
roncodes Aug 7, 2026
a1d681b
Fix two array defects in crud bulkAction and cover it
roncodes Aug 7, 2026
54e133f
Fix seven more array defects, found by widening the search
roncodes Aug 7, 2026
fa6eacf
Cover the ResourceActionService base class
roncodes Aug 7, 2026
f94015d
Cover SubjectCustomFields, and fix the list fallback in get-model-name
roncodes Aug 7, 2026
5c2bb98
Cover the two ResourceAction subclasses, fixing two dead proxy methods
roncodes Aug 7, 2026
fcd8268
Fix custom-fields-registry never initializing, and cover the authenti…
roncodes Aug 7, 2026
ebd2c9e
Cover three more utils, and pin a save-options conflict
roncodes Aug 7, 2026
c454ddc
Cover inline-task, polyline and make-dataset
roncodes Aug 7, 2026
a0d93dc
Re-export named exports from the app tree, and cover inject-engine-se…
roncodes Aug 7, 2026
18f6877
Cover corslite, the last generated stub
roncodes Aug 7, 2026
bd4f180
Fix three corslite test errors of my own making
roncodes Aug 7, 2026
ca4d02a
Cover the adapters and fetch, fixing six more array defects
roncodes Aug 7, 2026
92e11e7
Fix the sandbox test key never being sent, and correct my fixtures
roncodes Aug 7, 2026
d88d0a9
Cover the three remaining decorators
roncodes Aug 7, 2026
dcff7a5
Pin that legacy-fetch-from's null default is shadowed by a class field
roncodes Aug 7, 2026
d0e6449
Cover the universe hook service
roncodes Aug 7, 2026
105089a
Cover the universe widget service
roncodes Aug 7, 2026
03bf176
Cover the universe menu service
roncodes Aug 7, 2026
e68f135
Pin two menu-service findings CI surfaced
roncodes Aug 7, 2026
02af8ed
Cover the registry service — the tracked-built-ins blocker was not real
roncodes Aug 7, 2026
d24d4b2
Cover the universe facade
roncodes Aug 7, 2026
73db144
Correct two universe assertions, and a claim in the previous commit
roncodes Aug 7, 2026
85071d3
Cover the extension manager
roncodes Aug 7, 2026
562794d
Remove the unreferenced legacy-universe service
roncodes Aug 7, 2026
0446179
Cover the transforms and MockTask
roncodes Aug 7, 2026
8014647
Cover crud delete and bulkDelete
roncodes Aug 7, 2026
a46bacd
Correct two crud assertions: modelName is a fallback, not an override
roncodes Aug 7, 2026
d7ffbf6
Cover the dynamic ability and both initializers
roncodes Aug 7, 2026
7af8b32
Assert observable state in the initializer tests
roncodes Aug 7, 2026
5ceff5d
Stop the socketcluster test from removing the suite's stub marker
roncodes Aug 7, 2026
a62805d
Cover current-user options and whois, fixing hasOption
roncodes Aug 7, 2026
2dff23f
Cover the chat service
roncodes Aug 7, 2026
2a18876
Cover the fetch verb helpers, cache and response parsing
roncodes Aug 7, 2026
6e03097
Pin shouldResetCache both ways, including the no-version case
roncodes Aug 7, 2026
fa37766
Cover crud export and import
roncodes Aug 7, 2026
a020503
Stop the gate failing files that have nothing to instrument
roncodes Aug 7, 2026
bd8ccc3
Cover lookup-user-ip and the group-by macro
roncodes Aug 7, 2026
54171e5
Install the group-by macro through extend, not as a class field
roncodes Aug 7, 2026
d055370
Cover the session service's own behaviour
roncodes Aug 7, 2026
b629740
Cover the theme service's behaviour
roncodes Aug 7, 2026
839f5c1
Cover load-extensions and load-engines
roncodes Aug 7, 2026
b066f5d
Cover the current-user loading flows and four more utils
roncodes Aug 7, 2026
d43fc94
Give the test user a real role record
roncodes Aug 7, 2026
85143ff
Give the universe stub a trigger method
roncodes Aug 7, 2026
a68f3e2
Give the second test user a company
roncodes Aug 7, 2026
45a3a9f
Cover the universe facade's delegation, and pin an arity bug family
roncodes Aug 7, 2026
c10a6fb
Cover the resource-action @action layer
roncodes Aug 7, 2026
cdb112a
Cover the session flows, deliberately excluding handleInvalidation
roncodes Aug 7, 2026
b1958b6
Pin that promiseCurrentUser aborts and invalidates twice
roncodes Aug 7, 2026
46f049b
Cover the resource-action task generators
roncodes Aug 7, 2026
393ba37
Cover the remaining event trackers and serialize-model's fallback
roncodes Aug 7, 2026
fb76939
Cover registry-service's helper registration and theme's initialize
roncodes Aug 8, 2026
2cc9d79
Pin that helper instantiation depends on arrow vs function syntax
roncodes Aug 8, 2026
730ab52
Cover the filter clearing paths, the loader overlay options and both …
roncodes Aug 8, 2026
e68616e
Pin that the is-equal arity guard is dead code
roncodes Aug 8, 2026
c3ba6be
Cover bulkAction's confirm, auto-serialize's dispatcher and the elect…
roncodes Aug 8, 2026
3c36fbb
Use real store records in the bulkAction confirm tests
roncodes Aug 8, 2026
428f6fa
Cover the engine-facing half of the universe facade
roncodes Aug 8, 2026
b9949de
Cover chat's recall branches, and upload the coverage report as an ar…
roncodes Aug 8, 2026
b1c270f
Target the exact uncovered statements the artifact now reports
roncodes Aug 8, 2026
ce2109b
Stub the task's perform, and make the console.error restore survive a…
roncodes Aug 8, 2026
b08a90e
Read header menu items from the section they are actually registered …
roncodes Aug 8, 2026
3aef89d
Cover session invalidation, and four more exact-line targets
roncodes Aug 8, 2026
83dae3d
Fix both harnesses, and pin what the hook-service failure exposed
roncodes Aug 8, 2026
3f3becb
Stop standing in for owner.application, and replace the injected noti…
roncodes Aug 8, 2026
aa82f9f
Override a classic class's injection with set(), not defineProperty
roncodes Aug 8, 2026
7a676eb
Pin that loadWhois' catch is unreachable from a failing lookup
roncodes Aug 8, 2026
6f54c5b
Cover tracked defaults, menu-item chaining, widget-service edges and …
roncodes Aug 8, 2026
eca3e02
Stop stubbing over the services under test
roncodes Aug 8, 2026
cb958b5
Cover the default-argument and fallback branches the artifact still l…
roncodes Aug 8, 2026
3d3c4d1
Pin that url-search-params cannot write, and split the registry-fallb…
roncodes Aug 8, 2026
336187d
Cover subject-custom-fields' save diff and its guards
roncodes Aug 8, 2026
6f16a1a
Pin that writeFieldValue's missing-field guard is checked too late
roncodes Aug 8, 2026
2e04867
Cover the optional-collaborator guards and the remaining menu-service…
roncodes Aug 8, 2026
b4eb361
Subscribe to the real Evented bus instead of assigning over trigger
roncodes Aug 8, 2026
ab959ec
Await setUser and refreshUser, and stub what they reach on the way
roncodes Aug 8, 2026
36c656c
Add the second theme method setUser calls
roncodes Aug 8, 2026
64f4ef7
Cover the option-assembly and registry-edge branches
roncodes Aug 8, 2026
a4d777a
Give each renderable-component test its own registry section
roncodes Aug 8, 2026
03a555d
Use a counter for the unique section name, not this.test
roncodes Aug 8, 2026
b2ac089
Pin that a class registered as a renderable component loses its key
roncodes Aug 8, 2026
d9de6c1
Cover engine loading, and add DEFECTS.md
roncodes Aug 8, 2026
fde8dc8
Give the fake engine instance a config, and correct what getEngineMou…
roncodes Aug 8, 2026
90bb016
Cover fetch.request — the module-scope import is stubbable after all
roncodes Aug 8, 2026
b0cfd30
Give the fetch tests a session stub with data
roncodes Aug 8, 2026
d6d7f84
Intercept ember-fetch's module export, not window.fetch
roncodes Aug 8, 2026
633f2ec
Cover fetch's uploadFile task and download
roncodes Aug 8, 2026
9510ac9
Pin two download behaviours my assertions had backwards
roncodes Aug 8, 2026
b44f524
Record the mime-type finding in DEFECTS.md
roncodes Aug 8, 2026
3836d57
Cover the extension manager's boot-time half
roncodes Aug 8, 2026
0a62227
Cover fetch.routing and the corslite paths beneath it
roncodes Aug 8, 2026
760c971
Cover the vendored download helper
roncodes Aug 8, 2026
a301f77
Rewrite DEFECT.md with the gate blockers verified and up front
roncodes Aug 8, 2026
f24abb1
Cover the engine hook plumbing and parent-dependency fixing
roncodes Aug 8, 2026
699887f
Cover downloadjs's fallbacks for browsers Chrome is not
roncodes Aug 8, 2026
53d404c
Scope the createElement override to the call, not the whole test
roncodes Aug 8, 2026
e752190
Rename back to DEFECTS.md
roncodes Aug 8, 2026
c8655c3
Cover the reachable remainder
roncodes Aug 8, 2026
ad43686
Use the real theme getter, and give language the intl it needs
roncodes Aug 8, 2026
e1755d3
Pin what theme's final fallback actually returns
roncodes Aug 8, 2026
8481876
Cover the last reachable statements
roncodes Aug 8, 2026
ca92f14
Hold the broken global for the whole async call, not just its first tick
roncodes Aug 8, 2026
09af0f3
Cover the extension manager's remaining reachable edges
roncodes Aug 8, 2026
d6daf5d
Cover the last reachable statement — normalizeMenuPanel's fall-through
roncodes Aug 8, 2026
5fed152
Finalise DEFECTS.md with the verified end-state inventory
roncodes Aug 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 76 additions & 27 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,51 +11,95 @@ on:
env:
NODE_VERSION: 22.x

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }}

permissions:
contents: read

jobs:
build:
test:
name: Lint, Test & Coverage
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
node-version: ${{ env.NODE_VERSION }}
version: 11

- name: Setup pnpm
uses: pnpm/action-setup@v2.0.1
- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
version: latest
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install Dependencies
run: pnpm install
run: pnpm install --frozen-lockfile

- name: Lint
run: pnpm run lint

- name: Build
run: pnpm run build

- name: Coverage gate self-tests
run: node --test scripts/check-coverage.test.mjs

- name: Test with coverage (full suite)
run: pnpm run coverage

# Uploaded before the gate, and regardless of whether the suite passed, so
# Codecov still receives a report from a run with failing tests. A missing or
# unreadable report is a real problem and still fails the job.
- name: Upload coverage to Codecov
if: '!cancelled()'
uses: codecov/codecov-action@v5
with:
files: coverage/lcov.info
flags: ember-core
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}

# Kept so the raw report can be pulled down with `gh run download` and read
# for exactly which statements are uncovered. The gate output only gives a
# per-file percentage, which is not enough to aim at a specific branch.
- name: Upload coverage report
if: '!cancelled()'
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/
retention-days: 7

- name: Enforce 100% coverage gate
run: pnpm run coverage:check

npm_publish:
needs: build
needs: test
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
node-version: ${{ env.NODE_VERSION }}
version: 11

- name: Setup pnpm
uses: pnpm/action-setup@v2.0.1
- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
version: latest
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install Dependencies
run: pnpm install
run: pnpm install --frozen-lockfile

- name: Build
run: pnpm run build
Expand All @@ -67,24 +111,29 @@ jobs:
run: npm publish --access public

github_publish:
needs: build
needs: test
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v2
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
node-version: ${{ env.NODE_VERSION }}
version: 11

- name: Setup pnpm
uses: pnpm/action-setup@v2.0.1
- name: Setup Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
version: latest
node-version: ${{ env.NODE_VERSION }}
cache: pnpm

- name: Install Dependencies
run: pnpm install
run: pnpm install --frozen-lockfile

- name: Build
run: pnpm run build
Expand Down
Loading
Loading