fix(core): pass options to tasks runner correctly
This commit is contained in:
parent
d2d9f1cca0
commit
eb455b93be
@ -1,138 +0,0 @@
|
|||||||
import {
|
|
||||||
ensureProject,
|
|
||||||
forEachCli,
|
|
||||||
listFiles,
|
|
||||||
rmDist,
|
|
||||||
runCLI,
|
|
||||||
runCommand,
|
|
||||||
uniq,
|
|
||||||
updateFile
|
|
||||||
} from './utils';
|
|
||||||
|
|
||||||
forEachCli(() => {
|
|
||||||
describe('Cache', () => {
|
|
||||||
it('should not use cache when it is not enabled', async () => {
|
|
||||||
ensureProject();
|
|
||||||
|
|
||||||
const myapp1 = uniq('myapp1');
|
|
||||||
const myapp2 = uniq('myapp2');
|
|
||||||
runCLI(`generate @nrwl/web:app ${myapp1}`);
|
|
||||||
runCLI(`generate @nrwl/web:app ${myapp2}`);
|
|
||||||
const files = `--files="apps/${myapp1}/src/main.ts,apps/${myapp2}/src/main.ts"`;
|
|
||||||
|
|
||||||
// run without caching
|
|
||||||
// --------------------------------------------
|
|
||||||
const outputWithoutCachingEnabled1 = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
const filesApp1 = listFiles(`dist/apps/${myapp1}`);
|
|
||||||
const filesApp2 = listFiles(`dist/apps/${myapp2}`);
|
|
||||||
|
|
||||||
expect(outputWithoutCachingEnabled1).not.toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
|
|
||||||
const outputWithoutCachingEnabled2 = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithoutCachingEnabled2).not.toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
|
|
||||||
// enable caching
|
|
||||||
// --------------------------------------------
|
|
||||||
updateFile('nx.json', c => {
|
|
||||||
const nxJson = JSON.parse(c);
|
|
||||||
nxJson.tasksRunnerOptions = {
|
|
||||||
default: {
|
|
||||||
runner: '@nrwl/workspace/src/tasks-runner/tasks-runner-v2',
|
|
||||||
options: {
|
|
||||||
cacheableOperations: ['build', 'lint']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return JSON.stringify(nxJson, null, 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
// run build with caching
|
|
||||||
// --------------------------------------------
|
|
||||||
const outputThatPutsDataIntoCache = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
// now the data is in cache
|
|
||||||
expect(outputThatPutsDataIntoCache).not.toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
|
|
||||||
rmDist();
|
|
||||||
|
|
||||||
const outputWithBothBuildTasksCached = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithBothBuildTasksCached).toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
expectCached(outputWithBothBuildTasksCached, [myapp1, myapp2]);
|
|
||||||
expect(listFiles(`dist/apps/${myapp1}`)).toEqual(filesApp1);
|
|
||||||
expect(listFiles(`dist/apps/${myapp2}`)).toEqual(filesApp2);
|
|
||||||
|
|
||||||
// touch myapp1
|
|
||||||
// --------------------------------------------
|
|
||||||
updateFile(`apps/${myapp1}/src/main.ts`, c => {
|
|
||||||
return `${c}\n//some comment`;
|
|
||||||
});
|
|
||||||
const outputWithBuildApp2Cached = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithBuildApp2Cached).toContain('read the output from cache');
|
|
||||||
expectCached(outputWithBuildApp2Cached, [myapp2]);
|
|
||||||
|
|
||||||
// touch package.json
|
|
||||||
// --------------------------------------------
|
|
||||||
updateFile(`package.json`, c => {
|
|
||||||
const r = JSON.parse(c);
|
|
||||||
r.description = 'different';
|
|
||||||
return JSON.stringify(r);
|
|
||||||
});
|
|
||||||
const outputWithNoBuildCached = runCommand(
|
|
||||||
`npm run affected:build -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithNoBuildCached).not.toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
|
|
||||||
// run lint with caching
|
|
||||||
// --------------------------------------------
|
|
||||||
const outputWithNoLintCached = runCommand(
|
|
||||||
`npm run affected:lint -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithNoLintCached).not.toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
|
|
||||||
const outputWithBothLintTasksCached = runCommand(
|
|
||||||
`npm run affected:lint -- ${files}`
|
|
||||||
);
|
|
||||||
expect(outputWithBothLintTasksCached).toContain(
|
|
||||||
'read the output from cache'
|
|
||||||
);
|
|
||||||
expectCached(outputWithBothLintTasksCached, [
|
|
||||||
myapp1,
|
|
||||||
myapp2,
|
|
||||||
`${myapp1}-e2e`,
|
|
||||||
`${myapp2}-e2e`
|
|
||||||
]);
|
|
||||||
}, 120000);
|
|
||||||
});
|
|
||||||
|
|
||||||
function expectCached(actual: string, expected: string[]) {
|
|
||||||
const section = actual.split('read the output from cache')[1];
|
|
||||||
const r = section
|
|
||||||
.split('\n')
|
|
||||||
.filter(l => l.trim().startsWith('-'))
|
|
||||||
.map(l => l.split('- ')[1].trim());
|
|
||||||
r.sort((a, b) => a.localeCompare(b));
|
|
||||||
expected.sort((a, b) => a.localeCompare(b));
|
|
||||||
expect(r).toEqual(expected);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
166
e2e/default-tasks-runner.test.ts
Normal file
166
e2e/default-tasks-runner.test.ts
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
import {
|
||||||
|
ensureProject,
|
||||||
|
forEachCli,
|
||||||
|
listFiles,
|
||||||
|
rmDist,
|
||||||
|
runCLI,
|
||||||
|
runCommand,
|
||||||
|
uniq,
|
||||||
|
updateFile
|
||||||
|
} from './utils';
|
||||||
|
|
||||||
|
forEachCli(() => {
|
||||||
|
describe('defaultTasksRunner', () => {
|
||||||
|
describe('Parallel', () => {
|
||||||
|
it('should be able to run tasks in parallel', () => {
|
||||||
|
ensureProject();
|
||||||
|
|
||||||
|
const mylib1 = uniq('mylib1');
|
||||||
|
const mylib2 = uniq('mylib1');
|
||||||
|
runCLI(`generate @nrwl/workspace:lib ${mylib1}`);
|
||||||
|
runCLI(`generate @nrwl/workspace:lib ${mylib2}`);
|
||||||
|
|
||||||
|
const files = `--files="libs/${mylib1}/src/index.ts,libs/${mylib2}/src/index.ts"`;
|
||||||
|
const output = runCommand(
|
||||||
|
`npm run affected:test -- ${files} --parallel`
|
||||||
|
);
|
||||||
|
|
||||||
|
const startTestingLib1 = output.indexOf(`"test" "${mylib1}"`);
|
||||||
|
const startTestingLib2 = output.indexOf(`"test" "${mylib2}"`);
|
||||||
|
|
||||||
|
const stopTesting = output.indexOf(`No tests found`);
|
||||||
|
|
||||||
|
expect(startTestingLib1).toBeLessThan(stopTesting);
|
||||||
|
expect(startTestingLib2).toBeLessThan(stopTesting);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Cache', () => {
|
||||||
|
it('should not use cache when it is not enabled', async () => {
|
||||||
|
ensureProject();
|
||||||
|
|
||||||
|
const myapp1 = uniq('myapp1');
|
||||||
|
const myapp2 = uniq('myapp2');
|
||||||
|
runCLI(`generate @nrwl/web:app ${myapp1}`);
|
||||||
|
runCLI(`generate @nrwl/web:app ${myapp2}`);
|
||||||
|
const files = `--files="apps/${myapp1}/src/main.ts,apps/${myapp2}/src/main.ts"`;
|
||||||
|
|
||||||
|
// run without caching
|
||||||
|
// --------------------------------------------
|
||||||
|
const outputWithoutCachingEnabled1 = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
const filesApp1 = listFiles(`dist/apps/${myapp1}`);
|
||||||
|
const filesApp2 = listFiles(`dist/apps/${myapp2}`);
|
||||||
|
|
||||||
|
expect(outputWithoutCachingEnabled1).not.toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
|
||||||
|
const outputWithoutCachingEnabled2 = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithoutCachingEnabled2).not.toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
|
||||||
|
// enable caching
|
||||||
|
// --------------------------------------------
|
||||||
|
updateFile('nx.json', c => {
|
||||||
|
const nxJson = JSON.parse(c);
|
||||||
|
nxJson.tasksRunnerOptions = {
|
||||||
|
default: {
|
||||||
|
runner: '@nrwl/workspace/src/tasks-runner/tasks-runner-v2',
|
||||||
|
options: {
|
||||||
|
cacheableOperations: ['build', 'lint']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return JSON.stringify(nxJson, null, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
// run build with caching
|
||||||
|
// --------------------------------------------
|
||||||
|
const outputThatPutsDataIntoCache = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
// now the data is in cache
|
||||||
|
expect(outputThatPutsDataIntoCache).not.toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
|
||||||
|
rmDist();
|
||||||
|
|
||||||
|
const outputWithBothBuildTasksCached = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithBothBuildTasksCached).toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
expectCached(outputWithBothBuildTasksCached, [myapp1, myapp2]);
|
||||||
|
expect(listFiles(`dist/apps/${myapp1}`)).toEqual(filesApp1);
|
||||||
|
expect(listFiles(`dist/apps/${myapp2}`)).toEqual(filesApp2);
|
||||||
|
|
||||||
|
// touch myapp1
|
||||||
|
// --------------------------------------------
|
||||||
|
updateFile(`apps/${myapp1}/src/main.ts`, c => {
|
||||||
|
return `${c}\n//some comment`;
|
||||||
|
});
|
||||||
|
const outputWithBuildApp2Cached = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithBuildApp2Cached).toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
expectCached(outputWithBuildApp2Cached, [myapp2]);
|
||||||
|
|
||||||
|
// touch package.json
|
||||||
|
// --------------------------------------------
|
||||||
|
updateFile(`package.json`, c => {
|
||||||
|
const r = JSON.parse(c);
|
||||||
|
r.description = 'different';
|
||||||
|
return JSON.stringify(r);
|
||||||
|
});
|
||||||
|
const outputWithNoBuildCached = runCommand(
|
||||||
|
`npm run affected:build -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithNoBuildCached).not.toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
|
||||||
|
// run lint with caching
|
||||||
|
// --------------------------------------------
|
||||||
|
const outputWithNoLintCached = runCommand(
|
||||||
|
`npm run affected:lint -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithNoLintCached).not.toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
|
||||||
|
const outputWithBothLintTasksCached = runCommand(
|
||||||
|
`npm run affected:lint -- ${files}`
|
||||||
|
);
|
||||||
|
expect(outputWithBothLintTasksCached).toContain(
|
||||||
|
'read the output from cache'
|
||||||
|
);
|
||||||
|
expectCached(outputWithBothLintTasksCached, [
|
||||||
|
myapp1,
|
||||||
|
myapp2,
|
||||||
|
`${myapp1}-e2e`,
|
||||||
|
`${myapp2}-e2e`
|
||||||
|
]);
|
||||||
|
}, 120000);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function expectCached(actual: string, expected: string[]) {
|
||||||
|
const section = actual.split('read the output from cache')[1];
|
||||||
|
const r = section
|
||||||
|
.split('\n')
|
||||||
|
.filter(l => l.trim().startsWith('-'))
|
||||||
|
.map(l => l.split('- ')[1].trim());
|
||||||
|
r.sort((a, b) => a.localeCompare(b));
|
||||||
|
expected.sort((a, b) => a.localeCompare(b));
|
||||||
|
expect(r).toEqual(expected);
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nrwl/nx-source",
|
"name": "@nrwl/nx-source",
|
||||||
"version": "8.9.0",
|
"version": "8.10.0-beta.7",
|
||||||
"description": "Extensible Dev Tools for Monorepos",
|
"description": "Extensible Dev Tools for Monorepos",
|
||||||
"homepage": "https://nx.dev",
|
"homepage": "https://nx.dev",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
|
|||||||
@ -29,11 +29,10 @@ export function runCommand<T extends RunArgs>(
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
const { tasksRunner, tasksOptions } = getRunner(
|
const { tasksRunner, tasksOptions } = getRunner(nxArgs.runner, nxJson, {
|
||||||
nxArgs.runner,
|
...nxArgs,
|
||||||
nxJson,
|
...overrides
|
||||||
overrides
|
});
|
||||||
);
|
|
||||||
const cached = [];
|
const cached = [];
|
||||||
tasksRunner(tasks, tasksOptions, {
|
tasksRunner(tasks, tasksOptions, {
|
||||||
target: nxArgs.target,
|
target: nxArgs.target,
|
||||||
|
|||||||
@ -19,4 +19,4 @@ jest --maxWorkers=1 ./build/e2e/run-many.test.js &&
|
|||||||
jest --maxWorkers=1 ./build/e2e/storybook.test.js &&
|
jest --maxWorkers=1 ./build/e2e/storybook.test.js &&
|
||||||
jest --maxWorkers=1 ./build/e2e/upgrade-module.test.js &&
|
jest --maxWorkers=1 ./build/e2e/upgrade-module.test.js &&
|
||||||
jest --maxWorkers=1 ./build/e2e/web.test.js &&
|
jest --maxWorkers=1 ./build/e2e/web.test.js &&
|
||||||
jest --maxWorkers=1 ./build/e2e/cache.test.js
|
jest --maxWorkers=1 ./build/e2e/default-tasks-runner.test.js
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user