Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/nxPublic

Commit49c5e50

Browse files
authored
feat(core): migrate existing workspaces to use inputs configuration (#12416)
1 parentce632aa commit49c5e50

File tree

36 files changed

+1851
-19
lines changed

36 files changed

+1851
-19
lines changed

‎packages/angular/migrations.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,12 @@
184184
"version":"15.0.0-beta.0",
185185
"description":"Update the usages of @nrwl/angular/testing to import jasmine-marbles symbols from jasmine-marbles itself.",
186186
"factory":"./src/migrations/update-15-0-0/switch-to-jasmine-marbles"
187+
},
188+
"add-karma-inputs": {
189+
"cli":"nx",
190+
"version":"15.0.0-beta.1",
191+
"description":"Stop hashing karma spec files and config files for build targets and dependent tasks",
192+
"factory":"./src/migrations/update-15-0-0/add-karma-inputs"
187193
}
188194
},
189195
"packageJsonUpdates": {
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import{createTreeWithEmptyWorkspace}from'@nrwl/devkit/testing';
2+
import{
3+
Tree,
4+
addProjectConfiguration,
5+
readWorkspaceConfiguration,
6+
updateWorkspaceConfiguration,
7+
}from'@nrwl/devkit';
8+
importaddKarmaInputsfrom'./add-karma-inputs';
9+
10+
describe('15.0.0 migration (add-karma-inputs)',()=>{
11+
lettree:Tree;
12+
13+
beforeEach(()=>{
14+
tree=createTreeWithEmptyWorkspace();
15+
});
16+
17+
it('should add inputs configuration for karma targets',async()=>{
18+
updateWorkspaceConfiguration(tree,{
19+
version:2,
20+
namedInputs:{
21+
default:['{projectRoot}/**/*','sharedGlobals'],
22+
sharedGlobals:[],
23+
production:['default'],
24+
},
25+
});
26+
addProjectConfiguration(tree,'proj',{
27+
root:'proj',
28+
targets:{
29+
test:{
30+
executor:'@angular-devkit/build-angular:karma',
31+
options:{},
32+
},
33+
test2:{
34+
executor:'@angular-devkit/build-angular:karma',
35+
options:{},
36+
},
37+
notTest:{
38+
executor:'nx:run-commands',
39+
},
40+
},
41+
});
42+
tree.write('karma.conf.js','');
43+
44+
awaitaddKarmaInputs(tree);
45+
46+
constupdated=readWorkspaceConfiguration(tree);
47+
expect(updated).toMatchInlineSnapshot(`
48+
Object {
49+
"namedInputs": Object {
50+
"default": Array [
51+
"{projectRoot}/**/*",
52+
"sharedGlobals",
53+
],
54+
"production": Array [
55+
"default",
56+
"!{projectRoot}/**/*.spec.[jt]s",
57+
"!{projectRoot}/tsconfig.spec.json",
58+
"!{projectRoot}/karma.conf.js",
59+
],
60+
"sharedGlobals": Array [],
61+
},
62+
"targetDefaults": Object {
63+
"test": Object {
64+
"inputs": Array [
65+
"default",
66+
"^production",
67+
"{workspaceRoot}/karma.conf.js",
68+
],
69+
},
70+
"test2": Object {
71+
"inputs": Array [
72+
"default",
73+
"^production",
74+
"{workspaceRoot}/karma.conf.js",
75+
],
76+
},
77+
},
78+
"version": 2,
79+
}
80+
`);
81+
});
82+
});
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import{
2+
formatFiles,
3+
readWorkspaceConfiguration,
4+
Tree,
5+
updateWorkspaceConfiguration,
6+
}from'@nrwl/devkit';
7+
import{forEachExecutorOptions}from'@nrwl/workspace/src/utilities/executor-options-utils';
8+
9+
exportdefaultasyncfunction(tree:Tree){
10+
constworkspaceConfiguration=readWorkspaceConfiguration(tree);
11+
12+
constkarmaTargets=getKarmaTargetNames(tree);
13+
consthasProductionFileset=!!workspaceConfiguration.namedInputs?.production;
14+
15+
if(karmaTargets.size>0&&hasProductionFileset){
16+
constproductionFileset=newSet(
17+
workspaceConfiguration.namedInputs.production
18+
);
19+
for(constexclusionof[
20+
'!{projectRoot}/**/*.spec.[jt]s',
21+
'!{projectRoot}/tsconfig.spec.json',
22+
'!{projectRoot}/karma.conf.js',
23+
]){
24+
productionFileset.add(exclusion);
25+
}
26+
workspaceConfiguration.namedInputs.production=
27+
Array.from(productionFileset);
28+
}
29+
30+
for(consttargetNameofkarmaTargets){
31+
workspaceConfiguration.targetDefaults??={};
32+
constjestTargetDefaults=(workspaceConfiguration.targetDefaults[
33+
targetName
34+
]??={});
35+
36+
jestTargetDefaults.inputs??=[
37+
'default',
38+
hasProductionFileset ?'^production' :'^default',
39+
...(tree.exists('karma.conf.js')
40+
?['{workspaceRoot}/karma.conf.js']
41+
:[]),
42+
];
43+
}
44+
45+
updateWorkspaceConfiguration(tree,workspaceConfiguration);
46+
47+
awaitformatFiles(tree);
48+
}
49+
50+
functiongetKarmaTargetNames(tree:Tree){
51+
constkarmaTargetNames=newSet<string>();
52+
forEachExecutorOptions(
53+
tree,
54+
'@angular-devkit/build-angular:karma',
55+
(_,__,target)=>{
56+
karmaTargetNames.add(target);
57+
}
58+
);
59+
returnkarmaTargetNames;
60+
}

‎packages/cypress/migrations.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"version":"14.7.0-beta.0",
4343
"description":"Update Cypress if using v10 to support latest component testing features",
4444
"factory":"./src/migrations/update-14-7-0/update-cypress-version-if-10"
45+
},
46+
"add-cypress-inputs": {
47+
"cli":"nx",
48+
"version":"15.0.0-beta.0",
49+
"description":"Stop hashing cypress spec files and config files for build targets and dependent tasks",
50+
"factory":"./src/migrations/update-15-0-0/add-cypress-inputs"
4551
}
4652
},
4753
"packageJsonUpdates": {
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import{createTreeWithEmptyWorkspace}from'@nrwl/devkit/testing';
2+
import{
3+
Tree,
4+
addProjectConfiguration,
5+
readWorkspaceConfiguration,
6+
updateWorkspaceConfiguration,
7+
}from'@nrwl/devkit';
8+
importaddCypressInputsfrom'./add-cypress-inputs';
9+
10+
describe('15.0.0 migration (add-cypress-inputs)',()=>{
11+
lettree:Tree;
12+
13+
beforeEach(()=>{
14+
tree=createTreeWithEmptyWorkspace();
15+
});
16+
17+
it('should add inputs configuration for cypress targets',async()=>{
18+
updateWorkspaceConfiguration(tree,{
19+
version:2,
20+
namedInputs:{
21+
default:['{projectRoot}/**/*','sharedGlobals'],
22+
sharedGlobals:[],
23+
production:['default'],
24+
},
25+
});
26+
addProjectConfiguration(tree,'proj',{
27+
root:'proj',
28+
targets:{
29+
e2e:{
30+
executor:'@nrwl/cypress:cypress',
31+
options:{},
32+
},
33+
e2e2:{
34+
executor:'@nrwl/cypress:cypress',
35+
options:{},
36+
},
37+
notTest:{
38+
executor:'nx:run-commands',
39+
},
40+
},
41+
});
42+
tree.write('jest.preset.js','');
43+
44+
awaitaddCypressInputs(tree);
45+
46+
constupdated=readWorkspaceConfiguration(tree);
47+
expect(updated).toMatchInlineSnapshot(`
48+
Object {
49+
"namedInputs": Object {
50+
"default": Array [
51+
"{projectRoot}/**/*",
52+
"sharedGlobals",
53+
],
54+
"production": Array [
55+
"default",
56+
],
57+
"sharedGlobals": Array [],
58+
},
59+
"targetDefaults": Object {
60+
"e2e": Object {
61+
"inputs": Array [
62+
"default",
63+
"^production",
64+
],
65+
},
66+
"e2e2": Object {
67+
"inputs": Array [
68+
"default",
69+
"^production",
70+
],
71+
},
72+
},
73+
"version": 2,
74+
}
75+
`);
76+
});
77+
78+
it('should inputs configuration for cypress component testing targets',async()=>{
79+
updateWorkspaceConfiguration(tree,{
80+
version:2,
81+
namedInputs:{
82+
default:['{projectRoot}/**/*','sharedGlobals'],
83+
sharedGlobals:[],
84+
production:['default'],
85+
},
86+
});
87+
addProjectConfiguration(tree,'proj',{
88+
root:'proj',
89+
targets:{
90+
e2e:{
91+
executor:'@nrwl/cypress:cypress',
92+
options:{
93+
testingType:'component',
94+
},
95+
},
96+
e2e2:{
97+
executor:'@nrwl/cypress:cypress',
98+
options:{
99+
testingType:'component',
100+
},
101+
},
102+
notTest:{
103+
executor:'nx:run-commands',
104+
},
105+
},
106+
});
107+
tree.write('jest.preset.js','');
108+
109+
awaitaddCypressInputs(tree);
110+
111+
constupdated=readWorkspaceConfiguration(tree);
112+
expect(updated).toMatchInlineSnapshot(`
113+
Object {
114+
"namedInputs": Object {
115+
"default": Array [
116+
"{projectRoot}/**/*",
117+
"sharedGlobals",
118+
],
119+
"production": Array [
120+
"default",
121+
"!{projectRoot}/cypress/**/*",
122+
"!{projectRoot}/**/*.cy.[jt]s?(x)",
123+
"!{projectRoot}/cypress.config.[jt]s",
124+
],
125+
"sharedGlobals": Array [],
126+
},
127+
"targetDefaults": Object {
128+
"e2e": Object {
129+
"inputs": Array [
130+
"default",
131+
"^production",
132+
],
133+
},
134+
"e2e2": Object {
135+
"inputs": Array [
136+
"default",
137+
"^production",
138+
],
139+
},
140+
},
141+
"version": 2,
142+
}
143+
`);
144+
});
145+
});
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import{
2+
formatFiles,
3+
readWorkspaceConfiguration,
4+
Tree,
5+
updateWorkspaceConfiguration,
6+
}from'@nrwl/devkit';
7+
import{forEachExecutorOptions}from'@nrwl/workspace/src/utilities/executor-options-utils';
8+
import{CypressExecutorOptions}from'@nrwl/cypress/src/executors/cypress/cypress.impl';
9+
10+
exportdefaultasyncfunction(tree:Tree){
11+
constworkspaceConfiguration=readWorkspaceConfiguration(tree);
12+
13+
const{ cypressTargets, hasComponentTesting}=getCypressTargetNames(tree);
14+
consthasProductionFileset=!!workspaceConfiguration.namedInputs?.production;
15+
16+
if(hasComponentTesting&&hasProductionFileset&&cypressTargets.size>0){
17+
constproductionFileset=newSet(
18+
workspaceConfiguration.namedInputs.production
19+
);
20+
for(constexclusionof[
21+
'!{projectRoot}/cypress/**/*',
22+
'!{projectRoot}/**/*.cy.[jt]s?(x)',
23+
'!{projectRoot}/cypress.config.[jt]s',
24+
]){
25+
productionFileset.add(exclusion);
26+
}
27+
workspaceConfiguration.namedInputs.production=
28+
Array.from(productionFileset);
29+
}
30+
31+
for(consttargetNameofcypressTargets){
32+
workspaceConfiguration.targetDefaults??={};
33+
constcypressTargetDefaults=(workspaceConfiguration.targetDefaults[
34+
targetName
35+
]??={});
36+
37+
cypressTargetDefaults.inputs??=[
38+
'default',
39+
hasProductionFileset ?'^production' :'^default',
40+
];
41+
}
42+
43+
updateWorkspaceConfiguration(tree,workspaceConfiguration);
44+
45+
awaitformatFiles(tree);
46+
}
47+
48+
functiongetCypressTargetNames(tree:Tree){
49+
constcypressTargets=newSet<string>();
50+
lethasComponentTesting=false;
51+
forEachExecutorOptions<CypressExecutorOptions>(
52+
tree,
53+
'@nrwl/cypress:cypress',
54+
(options,__,target)=>{
55+
cypressTargets.add(target);
56+
if(options.testingType==='component'){
57+
hasComponentTesting=true;
58+
}
59+
}
60+
);
61+
return{ cypressTargets, hasComponentTesting};
62+
}

‎packages/jest/migrations.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,14 @@
6969
"update-tests-jest-28": {
7070
"version":"14.6.0-beta.0",
7171
"cli":"nx",
72-
"description":"Update jest test filesto support jest 28 changes (https://jestjs.io/docs/upgrading-to-jest28)",
72+
"description":"Update jest test files to support jest 28 changes (https://jestjs.io/docs/upgrading-to-jest28)",
7373
"factory":"./src/migrations/update-14-6-0/update-tests-jest-28"
74+
},
75+
"add-jest-inputs": {
76+
"version":"15.0.0-beta.0",
77+
"cli":"nx",
78+
"description":"Stop hashing jest spec files and config files for build targets and dependent tasks",
79+
"factory":"./src/migrations/update-15-0-0/add-jest-inputs"
7480
}
7581
},
7682
"packageJsonUpdates": {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp