Skip to content

Commit 4b137b7

Browse files
authored
chore(ember): Update & cleanup Ember SDK (#6003)
* update ember dev dependencies to latest * avoid importing `ember` module * remove duplicate ember config * fix ember linting/type issues * update which ember envs are tested on CI 1. When running "normal" tests, only run for pinned version of ember. 2. When running on CI, test pinned version, 4.0, release & embroider. 3. Run `yarn test:all` to test all CI versions locally * use custom `<Link>` component for ember tests for consistency We use this custom component instead of the built-in `<LinkTo>`, as that is an ember component in older versions, and a glimmer component in newer versions. Since glimmer components are, as of now, not instrumented, this leads to different test results. * Explicitly support Node 14+ for Ember * Reduce GHA timeout for ember workflows
1 parent 233c9e6 commit 4b137b7

29 files changed

+2592
-1187
lines changed

.github/workflows/build.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -386,11 +386,11 @@ jobs:
386386
name: Test @sentry/ember
387387
needs: [job_get_metadata, job_build]
388388
continue-on-error: true
389-
timeout-minutes: 30
389+
timeout-minutes: 10
390390
runs-on: ubuntu-latest
391391
strategy:
392392
matrix:
393-
scenario: [ember-release, ember-beta, ember-classic, ember-lts-3.24]
393+
scenario: [ember-release, embroider-optimized, ember-4.0]
394394
steps:
395395
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
396396
uses: actions/checkout@v3
@@ -404,11 +404,8 @@ jobs:
404404
- name: Set up Node
405405
uses: actions/setup-node@v3
406406
with:
407-
# The only danger with Ember in terms of Node versions is that the build tool, ember-cli, won't work if Node
408-
# is too old. Since Oct 2019, Node 10 has been the oldest version supported by ember-cli, so test against
409-
# that. If it passes, newer versions of Node should also be fine. This saves us from having to run the Ember
410-
# tests in our Node matrix above.
411-
node-version: '10'
407+
# We support node 14+. If that works, we can safely assume that newer versions will also work.
408+
node-version: '14'
412409
- name: Check dependency cache
413410
uses: actions/cache@v3
414411
with:

packages/ember/.ember-cli

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,11 @@
55

66
Setting `disableAnalytics` to true will prevent any data from being sent.
77
*/
8-
"disableAnalytics": false
8+
"disableAnalytics": false,
9+
10+
/**
11+
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
12+
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
13+
*/
14+
"isTypeScriptProject": true
915
}

packages/ember/.eslintignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,13 @@
1313
# misc
1414
/coverage/
1515
!.*
16+
.*/
17+
.eslintcache
1618

1719
# ember-try
1820
/.node_modules.ember-try/
1921
/bower.json.ember-try
22+
/npm-shrinkwrap.json.ember-try
2023
/package.json.ember-try
24+
/package-lock.json.ember-try
25+
/yarn.lock.ember-try

packages/ember/.eslintrc.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ module.exports = {
2727
// node files
2828
{
2929
files: [
30-
'.eslintrc.js',
31-
'.template-lintrc.js',
32-
'ember-cli-build.js',
33-
'index.js',
34-
'testem.js',
35-
'blueprints/*/index.js',
36-
'config/**/*.js',
37-
'tests/dummy/config/**/*.js',
30+
'./.eslintrc.js',
31+
'./.prettierrc.js',
32+
'./.template-lintrc.js',
33+
'./ember-cli-build.js',
34+
'./index.js',
35+
'./testem.js',
36+
'./blueprints/*/index.js',
37+
'./config/**/*.js',
38+
'./tests/dummy/config/**/*.js',
3839
],
39-
excludedFiles: ['addon/**', 'addon-test-support/**', 'app/**', 'tests/dummy/app/**'],
4040
parserOptions: {
4141
sourceType: 'script',
4242
},
@@ -47,5 +47,10 @@ module.exports = {
4747
plugins: ['node'],
4848
extends: ['plugin:node/recommended'],
4949
},
50+
{
51+
// test files
52+
files: ['tests/**/*-test.{js,ts}'],
53+
extends: ['plugin:qunit/recommended'],
54+
},
5055
],
5156
};

packages/ember/.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@
2222
# ember-try
2323
/.node_modules.ember-try/
2424
/bower.json.ember-try
25+
/npm-shrinkwrap.json.ember-try
2526
/package.json.ember-try
27+
/package-lock.json.ember-try
28+
/yarn.lock.ember-try
29+
30+
# broccoli-debug
31+
/DEBUG/

packages/ember/.npmignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
/.eslintignore
1717
/.eslintrc.js
1818
/.git/
19+
/.github/
1920
/.gitignore
21+
/.prettierignore
22+
/.prettierrc.js
2023
/.template-lintrc.js
2124
/.travis.yml
2225
/.watchmanconfig
@@ -26,11 +29,15 @@
2629
/ember-cli-build.js
2730
/testem.js
2831
/tests/
32+
/yarn-error.log
2933
/yarn.lock
3034
/.npmignore
3135
.gitkeep
3236

3337
# ember-try
3438
/.node_modules.ember-try/
3539
/bower.json.ember-try
40+
/npm-shrinkwrap.json.ember-try
3641
/package.json.ember-try
42+
/package-lock.json.ember-try
43+
/yarn.lock.ember-try

packages/ember/.template-lintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
22

33
module.exports = {
4-
extends: 'octane',
4+
extends: 'recommended',
55
};

packages/ember/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ ENV['@sentry/ember'] = {
172172

173173
### Supported Versions
174174

175-
`@sentry/ember` currently supports Ember **4.0+** for error monitoring.
175+
* **Ember.js**: v4.0 or above
176+
* **Node**: v14 or above
176177

177178
### Previous Integration
178179

packages/ember/addon/ember.d.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/ember/addon/instance-initializers/sentry-performance.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import ApplicationInstance from '@ember/application/instance';
2-
import Ember from 'ember';
32
import { run, _backburner, scheduleOnce } from '@ember/runloop';
3+
import { subscribe } from '@ember/instrumentation';
44
import * as Sentry from '@sentry/browser';
55
import { ExtendedBackburner } from '@sentry/ember/runloop';
66
import { Span, Transaction, Integration } from '@sentry/types';
@@ -9,6 +9,7 @@ import { getActiveTransaction } from '..';
99
import { browserPerformanceTimeOrigin, GLOBAL_OBJ, timestampWithMs } from '@sentry/utils';
1010
import { macroCondition, isTesting, getOwnConfig } from '@embroider/macros';
1111
import { EmberSentryConfig, GlobalConfig, OwnConfig } from '../types';
12+
import RouterService from '@ember/routing/router-service';
1213

1314
function getSentryConfig() {
1415
const _global = GLOBAL_OBJ as typeof GLOBAL_OBJ & GlobalConfig;
@@ -279,7 +280,6 @@ function _instrumentComponents(config: EmberSentryConfig) {
279280
const beforeEntries = {} as RenderEntries;
280281
const beforeComponentDefinitionEntries = {} as RenderEntries;
281282

282-
const subscribe = Ember.subscribe;
283283
function _subscribeToRenderEvents() {
284284
subscribe('render.component', {
285285
before(_name: string, _timestamp: number, payload: Payload) {
@@ -309,22 +309,21 @@ function _instrumentInitialLoad(config: EmberSentryConfig) {
309309
const startName = '@sentry/ember:initial-load-start';
310310
const endName = '@sentry/ember:initial-load-end';
311311

312-
const { performance } = window;
313-
const HAS_PERFORMANCE = performance && performance.clearMarks && performance.clearMeasures;
312+
let { HAS_PERFORMANCE, HAS_PERFORMANCE_TIMING } = _hasPerformanceSupport();
314313

315314
if (!HAS_PERFORMANCE) {
316315
return;
317316
}
318317

318+
const { performance } = window;
319+
319320
if (config.disableInitialLoadInstrumentation) {
320321
performance.clearMarks(startName);
321322
performance.clearMarks(endName);
322323
return;
323324
}
324325

325326
// Split performance check in two so clearMarks still happens even if timeOrigin isn't available.
326-
const HAS_PERFORMANCE_TIMING =
327-
performance.measure && performance.getEntriesByName && browserPerformanceTimeOrigin !== undefined;
328327
if (!HAS_PERFORMANCE_TIMING) {
329328
return;
330329
}
@@ -355,6 +354,26 @@ function _instrumentInitialLoad(config: EmberSentryConfig) {
355354
performance.clearMeasures(measureName);
356355
}
357356

357+
function _hasPerformanceSupport() {
358+
// TS says that all of these methods are always available, but some of them may not be supported in older browsers
359+
// So we "pretend" they are all optional in order to be able to check this properly without TS complaining
360+
const _performance = window.performance as {
361+
clearMarks?: Performance['clearMarks'];
362+
clearMeasures?: Performance['clearMeasures'];
363+
measure?: Performance['measure'];
364+
getEntriesByName?: Performance['getEntriesByName'];
365+
};
366+
const HAS_PERFORMANCE = Boolean(_performance && _performance.clearMarks && _performance.clearMeasures);
367+
const HAS_PERFORMANCE_TIMING = Boolean(
368+
_performance.measure && _performance.getEntriesByName && browserPerformanceTimeOrigin !== undefined,
369+
);
370+
371+
return {
372+
HAS_PERFORMANCE,
373+
HAS_PERFORMANCE_TIMING,
374+
};
375+
}
376+
358377
export async function instrumentForPerformance(appInstance: ApplicationInstance) {
359378
const config = getSentryConfig();
360379
const sentryConfig = config.sentry;
@@ -372,7 +391,9 @@ export async function instrumentForPerformance(appInstance: ApplicationInstance)
372391
new tracing.Integrations.BrowserTracing({
373392
routingInstrumentation: (customStartTransaction, startTransactionOnPageLoad) => {
374393
const routerMain = appInstance.lookup('router:main');
375-
let routerService = appInstance.lookup('service:router');
394+
let routerService = appInstance.lookup('service:router') as
395+
| RouterService & { externalRouter?: RouterService; _hasMountedSentryPerformanceRouting?: boolean };
396+
376397
if (routerService.externalRouter) {
377398
// Using ember-engines-router-service in an engine.
378399
routerService = routerService.externalRouter;

packages/ember/config/ember-try.js

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const getChannelURL = require('ember-source-channel-url');
4-
const { embroiderSafe } = require('@embroider/test-setup');
4+
const { embroiderOptimized } = require('@embroider/test-setup');
55

66
/**
77
* Pick which versions of ember against which to test based on whether the tests are running locally, as part of a PR,
@@ -19,50 +19,41 @@ module.exports = async function () {
1919
'ember-source': await getChannelURL('release'),
2020
},
2121
},
22-
allowedToFail: true,
2322
},
24-
];
25-
26-
// in CI we add a few more tests - LTS and embroider (which is an ember compiler)
27-
if (process.env.GITHUB_ACTIONS) {
28-
scenarios = scenarios.concat([
29-
{
30-
name: 'ember-lts-3.24',
31-
npm: {
32-
devDependencies: {
33-
'ember-source': '~3.24.0',
34-
},
23+
{
24+
name: 'ember-4.0',
25+
npm: {
26+
devDependencies: {
27+
'ember-source': '~4.0.1',
3528
},
3629
},
37-
embroiderSafe(),
38-
]);
39-
scenarios = scenarios.concat([
40-
{
41-
name: 'ember-beta',
42-
npm: {
43-
devDependencies: {
44-
'ember-source': await getChannelURL('beta'),
45-
},
30+
},
31+
embroiderOptimized(),
32+
{
33+
name: 'ember-beta',
34+
npm: {
35+
devDependencies: {
36+
'ember-source': await getChannelURL('beta'),
4637
},
47-
allowedToFail: true,
4838
},
49-
{
50-
name: 'ember-classic',
51-
env: {
52-
EMBER_OPTIONAL_FEATURES: JSON.stringify({
53-
'application-template-wrapper': true,
54-
'default-async-observers': false,
55-
'template-only-glimmer-components': false,
56-
}),
57-
},
58-
npm: {
59-
ember: {
60-
edition: 'classic',
61-
},
39+
allowedToFail: true,
40+
},
41+
{
42+
name: 'ember-classic',
43+
env: {
44+
EMBER_OPTIONAL_FEATURES: JSON.stringify({
45+
'application-template-wrapper': true,
46+
'default-async-observers': false,
47+
'template-only-glimmer-components': false,
48+
}),
49+
},
50+
npm: {
51+
ember: {
52+
edition: 'classic',
6253
},
6354
},
64-
]);
65-
}
55+
},
56+
];
6657

6758
return {
6859
useYarn: true,

packages/ember/ember-cli-build.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const EmberAddon = require('ember-cli/lib/broccoli/ember-addon');
44

55
module.exports = function (defaults) {
6-
let app = new EmberAddon(defaults, {
6+
const app = new EmberAddon(defaults, {
77
// Add options here
88
});
99

@@ -13,6 +13,13 @@ module.exports = function (defaults) {
1313
This build file does *not* influence how the addon or the app using it
1414
behave. You most likely want to be modifying `./index.js` or app's build file
1515
*/
16+
1617
const { maybeEmbroider } = require('@embroider/test-setup');
17-
return maybeEmbroider(app);
18+
return maybeEmbroider(app, {
19+
skipBabel: [
20+
{
21+
package: 'qunit',
22+
},
23+
],
24+
});
1825
};

0 commit comments

Comments
 (0)