fix(core): pass options to tasks runner correctly

This commit is contained in:
Victor Savkin 2020-01-02 14:24:10 -05:00 committed by Victor Savkin
parent d2d9f1cca0
commit eb455b93be
5 changed files with 172 additions and 145 deletions

View File

@ -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);
}
});

View 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);
}
});

View File

@ -1,6 +1,6 @@
{
"name": "@nrwl/nx-source",
"version": "8.9.0",
"version": "8.10.0-beta.7",
"description": "Extensible Dev Tools for Monorepos",
"homepage": "https://nx.dev",
"main": "index.js",

View File

@ -29,11 +29,10 @@ export function runCommand<T extends RunArgs>(
})
);
const { tasksRunner, tasksOptions } = getRunner(
nxArgs.runner,
nxJson,
overrides
);
const { tasksRunner, tasksOptions } = getRunner(nxArgs.runner, nxJson, {
...nxArgs,
...overrides
});
const cached = [];
tasksRunner(tasks, tasksOptions, {
target: nxArgs.target,

View File

@ -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/upgrade-module.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