Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
554ee94
update RELEASE with update-blueprint-deps commands
mansona Apr 21, 2026
5462dbf
Merge branch 'origin/beta' into master
mansona Apr 23, 2026
f17b1ad
update to the next alpha version
mansona Apr 23, 2026
b22a224
update blueprint dependencies to alpha
mansona Apr 23, 2026
e935016
update update-blueprint-deps for alpha
mansona Apr 23, 2026
05f8ea1
Merge pull request #11001 from ember-cli/merge-beta
mansona Apr 24, 2026
7187ff5
Prepare Alpha Release using 'release-plan'
mansona Apr 24, 2026
f2b3164
Merge pull request #11002 from ember-cli/releaseplan-preview
mansona Apr 24, 2026
1c4d8dd
update @ember/optional-features
mansona Apr 24, 2026
b18e657
Merge pull request #11003 from ember-cli/optional-features
NullVoxPopuli Apr 24, 2026
e72e384
update ember-cli-deprecation-workflow
mansona Apr 24, 2026
61d26a1
Merge pull request #11005 from ember-cli/update-ember-cli-deprecation…
mansona Apr 24, 2026
7027a6a
update ember-welcome-page in blueprints
mansona Apr 24, 2026
4924b73
Merge pull request #11006 from ember-cli/ember-welcome-page
NullVoxPopuli Apr 26, 2026
e34eaac
Prepare Alpha Release using 'release-plan'
mansona Apr 26, 2026
0e32bb5
Merge pull request #11004 from ember-cli/releaseplan-preview
mansona Apr 27, 2026
6e01db5
add section for updating all packages
mansona Apr 27, 2026
9918e95
add --tag latest to doc
mansona Apr 27, 2026
9f96180
update babel-remove-types
mansona Apr 27, 2026
8db1917
update configstore to v8
mansona Apr 27, 2026
28bec26
Merge pull request #11009 from ember-cli/configstore
NullVoxPopuli Apr 28, 2026
b722014
Merge pull request #10999 from ember-cli/mansona-patch-1
NullVoxPopuli Apr 28, 2026
1d725e4
Merge pull request #11008 from ember-cli/babel-remove-types
NullVoxPopuli Apr 28, 2026
e34733e
use semver-deprecate instead of internal code
mansona Jan 6, 2025
f35f069
support OVERRIDE_DEPRECATION_VERSION in tests
mansona Sep 10, 2025
da4cdda
Initial plan
Copilot May 2, 2026
0ac66b7
fix: sync-output-repos workflow failing on tag pushes
Copilot May 2, 2026
6da66e0
Merge pull request #11016 from ember-cli/copilot/fix-github-actions-t…
kategengler May 2, 2026
d23aa53
Add Sync Output Repos check to release instructions
kategengler May 2, 2026
714ee03
Merge pull request #11017 from ember-cli/kategengler-patch-1
mansona May 10, 2026
3ed00a0
defer to isDeprecationRemoved from semver-deprecate
mansona May 11, 2026
2ad7f5f
add an integration test to verify OVERRIDE_DEPRECATION_VERSION works
mansona May 11, 2026
a87883f
fix the deprecate integration test
mansona May 11, 2026
6864347
Merge pull request #10610 from ember-cli/semver-deprecate
mansona May 12, 2026
e3b7009
Update diff to latest v8.x
mkszepp May 12, 2026
6506ffd
Merge pull request #11020 from mkszepp/update-diff
NullVoxPopuli May 13, 2026
203aa73
Prepare Alpha Release using 'release-plan'
mansona May 13, 2026
a18c360
Merge branch 'origin/beta' into release
mansona May 15, 2026
f53dc82
update blueprint dependencies to latest
mansona May 15, 2026
36dcb92
fix ember-cli version in packages/app-blueprint/files/package.json
mansona May 15, 2026
60463c6
fix bad test with async behaviour
mansona May 15, 2026
c393b31
fix package-info-cache test with hyper-specific check
mansona May 15, 2026
cd502c1
Merge pull request #11011 from ember-cli/releaseplan-preview
mansona May 15, 2026
5839b1d
Merge pull request #11022 from ember-cli/release-plan-7-0
mansona May 15, 2026
851474f
Prepare Stable Release using 'release-plan'
mansona May 15, 2026
a239f20
Merge pull request #11024 from ember-cli/release-preview-stable
mansona May 15, 2026
0d0496e
Merge branch 'origin/release' into beta
mansona May 22, 2026
8556629
Merge branch 'origin/master' into beta
mansona May 22, 2026
1f74e41
update versions
mansona May 22, 2026
dd349c6
update blueprint dependencies to beta
mansona May 22, 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
15 changes: 11 additions & 4 deletions .github/workflows/sync-output-repos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@ on:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-your-workflow-only-when-a-push-of-specific-tags-occurs
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore
push:
# for addon and new output
# Only trigger for ember-cli package tags (format: v{version}-ember-cli)
# Avoids spurious runs from other package tags in this repo (e.g. v*-@ember-tooling/*)
tags:
- "v*"
- "v*-ember-cli"

# https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
Expand All @@ -48,13 +49,19 @@ jobs:
- id: determine
run: |
if [[ "${{ github.event.inputs.version }}" != "" ]]; then
# Manual workflow_dispatch with an explicit version string (no leading 'v').
# Construct the full tag name expected by the scripts.
TAG="v${{ github.event.inputs.version }}-ember-cli"
elif [[ "${{ github.ref_name }}" != "" ]]; then
TAG="${{github.ref_name}}-ember-cli"
elif [[ "${{ github.ref_type }}" == "tag" ]]; then
# Tag-push trigger: github.ref_name is already the full tag name
# (e.g. v7.1.0-alpha.2-ember-cli). Use it directly — do NOT append
# "-ember-cli" again, or the version parsing in the scripts will be wrong.
TAG="${{ github.ref_name }}"
else
echo "Could not determine tag / version"
echo ""
echo "github.ref_name = ${{ github.ref_name }}"
echo "github.ref_type = ${{ github.ref_type }}"
echo "event.inputs.version = ${{ github.event.inputs.version }}"
exit 1;
fi
Expand Down
12 changes: 6 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# ember-cli Changelog

## Release (2026-04-21)
## Release (2026-05-15)

* ember-cli 7.0.0-beta.1 (minor)
* @ember-tooling/classic-build-addon-blueprint 7.0.0-beta.1 (minor)
* @ember-tooling/classic-build-app-blueprint 7.0.0-beta.1 (minor)
* ember-cli 7.0.0 (major)
* @ember-tooling/classic-build-addon-blueprint 7.0.0 (major)
* @ember-tooling/classic-build-app-blueprint 7.0.0 (major)

#### :rocket: Enhancement
#### :boom: Breaking Change
* `ember-cli`, `@ember-tooling/classic-build-addon-blueprint`, `@ember-tooling/classic-build-app-blueprint`
* [#10997](https://github.com/ember-cli/ember-cli/pull/10997) Prepare 7.0 Beta ([@mansona](https://github.com/mansona))
* [#11022](https://github.com/ember-cli/ember-cli/pull/11022) Promote Beta and update all dependencies for 7.0 release ([@mansona](https://github.com/mansona))

#### Committers: 1
- Chris Manson ([@mansona](https://github.com/mansona))
Expand Down
30 changes: 27 additions & 3 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- Update blueprint dependencies to latest. Note: ember-data needs to be updated only in the alpha version from now on, make sure to only update to the release version of what was in the beta.

```
node ./dev/update-blueprint-dependencies.js --ember-source=latest --ember-data=<whatever version was in the beta>
pnpm dlx update-blueprint-deps --filter 'ember-source$' --tag latest ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/**/package.json
pnpm dlx update-blueprint-deps --filter '@ember-tooling/.*' --tag latest ./package.json ./packages/*-blueprint/**/*ackage.json
pnpm dlx update-blueprint-deps --filter '.*' ./package.json ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/*/package.json ./tests/fixtures/*/*/package.json
```

- run `pnpm lint:fix`
Expand All @@ -63,6 +65,7 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- check that the `Prepare Release` PR has been correctly opened by `release-plan`
- Merge the `Prepare Release` branch when you are ready to release
- Check the `Release Stable` GitHub action to make sure the release succeeded
- Check the [Sync Output Repos](https://github.com/ember-cli/ember-cli/actions/workflows/sync-output-repos.yml) Github action to ensure the output repos have generated from the tag.

### Finish the `@ember/app-blueprint` release

Expand Down Expand Up @@ -96,7 +99,9 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- Update blueprint dependencies to beta

```
node ./dev/update-blueprint-dependencies.js --ember-source=beta --ember-data=<whatever version was in the alpha>
pnpm dlx update-blueprint-deps --filter 'ember-source$' --tag beta ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/**/package.json
pnpm dlx update-blueprint-deps --filter '@ember-tooling/.*' --tag latest ./package.json ./packages/*-blueprint/**/*ackage.json
pnpm dlx update-blueprint-deps --filter '.*' ./package.json ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/*/package.json ./tests/fixtures/*/*/package.json
```

- run `pnpm lint:fix`
Expand All @@ -112,6 +117,7 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- note: the release-plan config will automatically make this version a pre-release
- Merge the `Prepare Beta Release` when you are ready to release the next beta version
- Check the `Release Beta` GitHub action to make sure the release succeeded
- Check the [Sync Output Repos](https://github.com/ember-cli/ember-cli/actions/workflows/sync-output-repos.yml) Github action to ensure the output repos have generated from the tag.

### Alpha release from the `master` branch

Expand All @@ -136,7 +142,8 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- Update blueprint dependencies to alpha

```
node ./dev/update-blueprint-dependencies.js --ember-source=alpha --ember-data=<whatever version is in the package.json>
pnpm dlx update-blueprint-deps --filter 'ember-source$' --tag alpha ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/**/package.json
pnpm dlx update-blueprint-deps --filter '.*' ./package.json ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/*/package.json ./tests/fixtures/*/*/package.json
```

- note: ember-data (aka warp-drive) should only ever be updated on master as a separate PR. It is no longer part of the release process
Expand All @@ -152,6 +159,23 @@ You can use [this saved search](https://github.com/ember-cli/ember-cli/pulls?q=i
- check that the `Prepare Alpha Release` PR has been correctly opened by `release-plan`
- Merge the `Prepare Alpha Release` when you are ready to release the next alpha version
- Check the `Release Alpha` GitHub action to make sure the release succeeded
- Check the [Sync Output Repos](https://github.com/ember-cli/ember-cli/actions/workflows/sync-output-repos.yml) Github action to ensure the output repos have generated from the tag.

### Update all packages

In the `update-blueprint-deps` steps described above we updated all packages that had in-range updates available. We also need to apply any out-of-range updates as part of the release process.

Once the Alpha release has been completed we should run the following command to see if there are any releases that have out-of-range updates available:

```
pnpm dlx update-blueprint-deps --filter '.*' --tag latest ./package.json ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/*/package.json ./tests/fixtures/*/*/package.json
```

This is not intended to be committed and opened as a single PR, it is for illustrative purposes only. If your git diff shows that there are any packages that need to have the range updated (i.e. we have a `^` dependency defined but there is a new major release available) then you should run the same command to update that package with a filter on the package name e.g.

```
pnpm dlx update-blueprint-deps --filter 'babel-remove-types' --tag latest ./package.json ./packages/*-blueprint/**/*ackage.json ./tests/fixtures/*/package.json ./tests/fixtures/*/*/package.json
```

## Changelog updates

Expand Down
136 changes: 16 additions & 120 deletions lib/debug/deprecate.js
Original file line number Diff line number Diff line change
@@ -1,129 +1,25 @@
'use strict';

const { default: chalk } = require('chalk');
const semver = require('semver');
const assert = require('./assert');
const emberCLIVersion = require('../../package').version;
const emberCLIVersionPackageVersion = require('../../package').version;
const { makeDeprecate, isDeprecationRemoved } = require('semver-deprecate');

const emberCLIVersion = process.env.OVERRIDE_DEPRECATION_VERSION ?? emberCLIVersionPackageVersion;

const deprecate = makeDeprecate('ember-cli', emberCLIVersion);

/**
* Display a deprecation message.
*
* ```js
* const { deprecate } = require('ember-cli/lib/debug');
*
* deprecate('The `foo` method is deprecated.', false, {
* for: 'ember-cli',
* id: 'ember-cli.foo-method',
* since: {
* available: '4.1.0',
* enabled: '4.2.0',
* },
* until: '5.0.0',
* url: 'https://example.com',
* });
* ```
* This function deferrs to the upstream {@link isDeprecationRemoved} function from semver-deprecate
* but closes around the current emberCLIVersion for convenience since there is some logic around
* what is considered the current version
*
* @method deprecate
* @param {String} description Describes the deprecation.
* @param {Any} condition If falsy, the deprecation message will be displayed.
* @param {Object} options An object including the deprecation's details:
* - `for` The library that the deprecation is for
* - `id` The deprecation's unique id
* - `since.available` A SemVer version indicating when the deprecation was made available
* - `since.enabled` A SemVer version indicating when the deprecation was enabled
* - `until` A SemVer version indicating until when the deprecation will be active
* - `url` A URL that refers to additional information about the deprecation
* @private
* @method
* @param {string} until - a Semver formatted version when the deprecation will be removed
* @return {boolean}
*/
function deprecate(description, condition, options) {
assert('When calling `deprecate`, you must provide a description as the first argument.', description);
assert('When calling `deprecate`, you must provide a condition as the second argument.', arguments.length > 1);

assert(
'When calling `deprecate`, you must provide an options object as the third argument. The options object must include the `for`, `id`, `since` and `until` options (`url` is optional).',
options
);

assert('When calling `deprecate`, you must provide the `for` option.', options.for);
assert('When calling `deprecate`, you must provide the `id` option.', options.id);

assert(
'When calling `deprecate`, you must provide the `since` option. `since` must include the `available` and/or the `enabled` option.',
options.since
);

assert(
'When calling `deprecate`, you must provide the `since.available` and/or the `since.enabled` option.',
options.since.available || options.since.enabled
);

assert(
'`since.available` must be a valid SemVer version.',
!options.since.available || isSemVer(options.since.available)
);

assert('`since.enabled` must be a valid SemVer version.', !options.since.enabled || isSemVer(options.since.enabled));

assert(
'When calling `deprecate`, you must provide a valid SemVer version for the `until` option.',
isSemVer(options.until)
);

if (condition) {
return;
}

if (options.for === 'ember-cli' && isDeprecationRemoved(options.until)) {
throw new Error(
`The API deprecated by ${options.id} was removed in ember-cli ${options.until}. The message was: ${description}. Please see ${options.url} for more details.`
);
}

let message = formatMessage(description, options);

warn(`${message}\n\n${getStackTrace()}`);
}

function isSemVer(version) {
return semver.valid(version) !== null;
}

function formatMessage(description, options) {
let message = [
chalk.inverse(' DEPRECATION '),
'\n\n',
description,
'\n\n',
`ID ${options.id}`,
'\n',
`UNTIL ${options.until}`,
];

if (options.url) {
message.push('\n', `URL ${options.url}`);
}

return message.join('');
}

function getStackTrace() {
let error = new Error();
let lines = error.stack.split('\n');

lines.shift(); // Remove the word `Error`.

return lines.map((line) => line.trim()).join('\n');
}

function warn(message) {
console.warn(chalk.yellow(message));
}

function isDeprecationRemoved(until) {
const currentEmberCLIVersion = parseFloat(process.env.OVERRIDE_DEPRECATION_VERSION ?? emberCLIVersion);

let significantUntil = until.replace(/(\.0+)/g, '');
return currentEmberCLIVersion >= parseFloat(significantUntil);
function _isDeprecationRemoved(until) {
return isDeprecationRemoved(until, emberCLIVersion);
}

module.exports = deprecate;
module.exports._isDeprecationRemoved = isDeprecationRemoved;
module.exports._isDeprecationRemoved = _isDeprecationRemoved;
Loading
Loading