Skip to content

Commit

Permalink
fix(repo): adjust the way outputs are tracked
Browse files Browse the repository at this point in the history
  • Loading branch information
FrozenPandaz committed Jul 13, 2022
1 parent bbfcf6a commit d0bb86b
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 70 deletions.
18 changes: 16 additions & 2 deletions e2e/nx-run/src/cache.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ import {
listFiles,
newProject,
readFile,
removeFile,
rmDist,
runCLI,
runCLIAsync,
uniq,
updateFile,
updateJson,
Expand Down Expand Up @@ -179,6 +177,10 @@ describe('cache', () => {
'mkdir dist',
'echo a > dist/a.txt',
'echo b > dist/b.txt',
'echo c > dist/c.txt',
'echo d > dist/d.txt',
'echo e > dist/e.txt',
'echo f > dist/f.txt',
],
parallel: false,
},
Expand All @@ -198,6 +200,10 @@ describe('cache', () => {
const outputsWithUntouchedOutputs = listFiles('dist');
expect(outputsWithUntouchedOutputs).toContain('a.txt');
expect(outputsWithUntouchedOutputs).toContain('b.txt');
expect(outputsWithUntouchedOutputs).toContain('c.txt');
expect(outputsWithUntouchedOutputs).toContain('d.txt');
expect(outputsWithUntouchedOutputs).toContain('e.txt');
expect(outputsWithUntouchedOutputs).toContain('f.txt');

// Create a file in the dist that does not match output glob
updateFile('dist/c.ts', '');
Expand All @@ -210,6 +216,10 @@ describe('cache', () => {
const outputsAfterAddingUntouchedFileAndRerunning = listFiles('dist');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('a.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('b.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('c.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('d.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('e.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('f.txt');
expect(outputsAfterAddingUntouchedFileAndRerunning).toContain('c.ts');

// Clear Dist
Expand All @@ -221,6 +231,10 @@ describe('cache', () => {
const outputsWithoutOutputs = listFiles('dist');
expect(outputsWithoutOutputs).toContain('a.txt');
expect(outputsWithoutOutputs).toContain('b.txt');
expect(outputsWithoutOutputs).toContain('c.txt');
expect(outputsWithoutOutputs).toContain('d.txt');
expect(outputsWithoutOutputs).toContain('e.txt');
expect(outputsWithoutOutputs).toContain('f.txt');
expect(outputsWithoutOutputs).not.toContain('c.ts');
});

Expand Down
97 changes: 97 additions & 0 deletions packages/nx/src/tasks-runner/cache.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { Cache, collapseExpandedOutputs } from './cache';

describe('Cache', () => {
describe('collapseExpandedOutputs', () => {
it('should handle no outputs', async () => {
const outputs = [];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual([]);
});

it('should keep files as is', async () => {
const outputs = ['dist/apps/app1/0.js'];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['dist/apps/app1/0.js']);
});

it('should keep directories as is', async () => {
const outputs = ['dist/apps/app1'];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['dist/apps/app1']);
});

it('should keep short lists of directories as is', async () => {
const outputs = ['test-results/apps/app1', 'coverage/apps/app1'];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['test-results/apps/app1', 'coverage/apps/app1']);
});

it('should keep short lists of files as is', async () => {
const outputs = [
'test-results/apps/app1/results.xml',
'coverage/apps/app1/coverage.html',
];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual([
'test-results/apps/app1/results.xml',
'coverage/apps/app1/coverage.html',
]);
});

it('should collapse long lists of directories', async () => {
const outputs = [
'dist/apps/app1/a',
'dist/apps/app1/b',
'dist/apps/app1/c',
'dist/apps/app1/d',
'dist/apps/app1/e',
'dist/apps/app1/f',
];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['dist/apps/app1']);
});

it('should keep long lists of top-level directories', async () => {
const outputs = ['a', 'b', 'c', 'd', 'e', 'f'];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['a', 'b', 'c', 'd', 'e', 'f']);
});

it('should collapse long lists of files', async () => {
const outputs = [
'dist/apps/app1/a.js',
'dist/apps/app1/b.js',
'dist/apps/app1/c.js',
'dist/apps/app1/d.js',
'dist/apps/app1/e.js',
'dist/apps/app1/f.js',
];
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['dist/apps/app1']);
});

it('should collapse long lists of files in nested directories', async () => {
const outputs = [];
// Create dist/apps/app1/n/m.js + dist/apps/app1/n/m.d.ts
for (let i = 0; i < 6; i++) {
outputs.push(`dist/apps/app1/${i}.js`);
outputs.push(`dist/apps/app1/${i}.d.ts`);
for (let j = 0; j < 6; j++) {
outputs.push(`dist/apps/app1/${i}/${j}.js`);
outputs.push(`dist/apps/app1/${i}/${j}.d.ts`);
}
}
const res = collapseExpandedOutputs(outputs);

expect(res).toEqual(['dist/apps/app1']);
});
});
});
Loading

0 comments on commit d0bb86b

Please sign in to comment.