diff --git a/.changeset/create-app-pin-jest-30-3.md b/.changeset/create-app-pin-jest-30-3.md new file mode 100644 index 0000000000..56934e8046 --- /dev/null +++ b/.changeset/create-app-pin-jest-30-3.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Pinned the Jest version range in app templates to `~30.2.0` to prevent automatic upgrades to Jest 30.4.x, which requires Node.js v24.9+ and breaks tests on Node 22. diff --git a/.cursor/rules/backstage-project.mdc b/.cursor/rules/backstage-project.mdc new file mode 120000 index 0000000000..b7e6491d3a --- /dev/null +++ b/.cursor/rules/backstage-project.mdc @@ -0,0 +1 @@ +../../AGENTS.md \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index ae39378648..033a090d3f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,3 +1,7 @@ +--- +alwaysApply: true +--- + Backstage is an open platform for building developer portals. This is a TypeScript monorepo using Yarn workspaces. ## Key Directories diff --git a/package.json b/package.json index 86fd4da8a5..ff247ce01f 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "@backstage/eslint-plugin": "workspace:*", "@backstage/repo-tools": "workspace:*", "@changesets/cli": "^2.14.0", - "@jest/environment-jsdom-abstract": "^30", + "@jest/environment-jsdom-abstract": "~30.2.0", "@octokit/rest": "^19.0.3", "@playwright/test": "^1.32.3", "@spotify/eslint-plugin": "^15.0.0", @@ -162,7 +162,7 @@ "eslint-plugin-testing-library": "^7.0.0", "fs-extra": "^11.2.0", "husky": "^9.0.0", - "jest": "^30", + "jest": "~30.2.0", "js-yaml": "^4.1.1", "jsdom": "^27", "lint-staged": "^16.0.0", diff --git a/packages/cli/package.json b/packages/cli/package.json index 04b7ea1a04..5afb584247 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -94,11 +94,11 @@ "@backstage/plugin-scaffolder-node-test-utils": "workspace:^", "@backstage/test-utils": "workspace:^", "@backstage/theme": "workspace:^", - "@jest/environment-jsdom-abstract": "^30.0.0", + "@jest/environment-jsdom-abstract": "~30.2.0", "@types/fs-extra": "^11.0.0", "@types/jest": "^30.0.0", "@types/node": "^22.13.14", - "jest": "^30.2.0", + "jest": "~30.2.0", "jsdom": "^27.1.0", "nodemon": "^3.0.1" }, diff --git a/packages/create-app/templates/default-app/package.json.hbs b/packages/create-app/templates/default-app/package.json.hbs index 6e2d899860..ebf85feeaf 100644 --- a/packages/create-app/templates/default-app/package.json.hbs +++ b/packages/create-app/templates/default-app/package.json.hbs @@ -39,10 +39,10 @@ "@backstage/cli": "^{{version '@backstage/cli'}}", "@backstage/cli-defaults": "^{{version '@backstage/cli-defaults'}}", "@backstage/e2e-test-utils": "^{{version '@backstage/e2e-test-utils'}}", - "@jest/environment-jsdom-abstract": "^30.0.0", + "@jest/environment-jsdom-abstract": "~30.2.0", "@playwright/test": "^1.32.3", "@types/jest": "^30.0.0", - "jest": "^30.2.0", + "jest": "~30.2.0", "jsdom": "^27.1.0", "node-gyp": "^10.0.0", "prettier": "^2.3.2", diff --git a/packages/create-app/templates/legacy-app/package.json.hbs b/packages/create-app/templates/legacy-app/package.json.hbs index 836ecccac5..ed185fcd25 100644 --- a/packages/create-app/templates/legacy-app/package.json.hbs +++ b/packages/create-app/templates/legacy-app/package.json.hbs @@ -52,10 +52,10 @@ "@backstage/cli": "^{{version '@backstage/cli'}}", "@backstage/cli-defaults": "^{{version '@backstage/cli-defaults'}}", "@backstage/e2e-test-utils": "^{{version '@backstage/e2e-test-utils'}}", - "@jest/environment-jsdom-abstract": "^30.0.0", + "@jest/environment-jsdom-abstract": "~30.2.0", "@playwright/test": "^1.32.3", "@types/jest": "^30.0.0", - "jest": "^30.2.0", + "jest": "~30.2.0", "jsdom": "^27.1.0", "node-gyp": "^10.0.0", "prettier": "^2.3.2", diff --git a/yarn.lock b/yarn.lock index dde6ad46ea..a2f202a9f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3250,7 +3250,7 @@ __metadata: "@backstage/plugin-scaffolder-node-test-utils": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@jest/environment-jsdom-abstract": "npm:^30.0.0" + "@jest/environment-jsdom-abstract": "npm:~30.2.0" "@manypkg/get-packages": "npm:^1.1.3" "@spotify/eslint-config-base": "npm:^15.0.0" "@spotify/eslint-config-react": "npm:^15.0.0" @@ -3277,7 +3277,7 @@ __metadata: eslint-plugin-unused-imports: "npm:^4.1.4" fs-extra: "npm:^11.2.0" glob: "npm:^13.0.0" - jest: "npm:^30.2.0" + jest: "npm:~30.2.0" jest-css-modules: "npm:^2.1.0" jsdom: "npm:^27.1.0" nodemon: "npm:^3.0.1" @@ -10357,7 +10357,7 @@ __metadata: languageName: node linkType: hard -"@jest/environment-jsdom-abstract@npm:^30, @jest/environment-jsdom-abstract@npm:^30.0.0": +"@jest/environment-jsdom-abstract@npm:~30.2.0": version: 30.2.0 resolution: "@jest/environment-jsdom-abstract@npm:30.2.0" dependencies: @@ -34062,7 +34062,7 @@ __metadata: languageName: node linkType: hard -"jest@npm:^30, jest@npm:^30.2.0": +"jest@npm:~30.2.0": version: 30.2.0 resolution: "jest@npm:30.2.0" dependencies: @@ -43404,7 +43404,7 @@ __metadata: "@backstage/eslint-plugin": "workspace:*" "@backstage/repo-tools": "workspace:*" "@changesets/cli": "npm:^2.14.0" - "@jest/environment-jsdom-abstract": "npm:^30" + "@jest/environment-jsdom-abstract": "npm:~30.2.0" "@manypkg/get-packages": "npm:^1.1.3" "@octokit/rest": "npm:^19.0.3" "@playwright/test": "npm:^1.32.3" @@ -43436,7 +43436,7 @@ __metadata: eslint-plugin-testing-library: "npm:^7.0.0" fs-extra: "npm:^11.2.0" husky: "npm:^9.0.0" - jest: "npm:^30" + jest: "npm:~30.2.0" js-yaml: "npm:^4.1.1" jsdom: "npm:^27" lint-staged: "npm:^16.0.0"