Skip to content

Commit

Permalink
feat(core): update default cache directory to .nx/cache (#19536)
Browse files Browse the repository at this point in the history
  • Loading branch information
AgentEnder authored Oct 11, 2023
1 parent 0bc6840 commit bdbfd35
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 3 deletions.
1 change: 1 addition & 0 deletions packages/js/src/generators/init/init.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ describe('js init generator', () => {
const prettierignore = tree.read('.prettierignore', 'utf-8');
expect(prettierignore).toMatch(/\n\/coverage/);
expect(prettierignore).toMatch(/\n\/dist/);
expect(prettierignore).toMatch(/\n\/\.nx\/cache/);
});

it('should not overwrite existing .prettierrc and .prettierignore files', async () => {
Expand Down
1 change: 1 addition & 0 deletions packages/js/src/generators/init/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ export async function initGenerator(
# Add files here to ignore them from prettier formatting
/dist
/coverage
/.nx/cache
`
);
}
Expand Down
6 changes: 6 additions & 0 deletions packages/nx/migrations.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@
"version": "16.8.0-beta.3",
"description": "Escape $ in env variables",
"implementation": "./src/migrations/update-16-8-0/escape-dollar-sign-env-variables"
},
"17.0.0-move-cache-directory": {
"cli": "nx",
"version": "17.0.0-beta.1",
"description": "Updates the default cache directory to .nx/cache",
"implementation": "./src/migrations/update-17-0-0/move-cache-directory"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { createTree } from '../../generators/testing-utils/create-tree';
import { createTreeWithEmptyWorkspace } from '../../generators/testing-utils/create-tree-with-empty-workspace';
import migrate from './move-cache-directory';

describe('move-cache-directory', () => {
it('should add .nx/cache to the gitignore', () => {
const tree = createTreeWithEmptyWorkspace();
tree.write('.gitignore', 'node_modules');
migrate(tree);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"node_modules
.nx/cache"
`);
});

it('should work if .gitignore is not present', () => {
const tree = createTreeWithEmptyWorkspace();
tree.delete('.gitignore');
migrate(tree);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(
`".nx/cache"`
);
});

it('should not change gitignore if directly ignored', () => {
const tree = createTreeWithEmptyWorkspace();
tree.write('.gitignore', 'node_modules\n.nx/cache');
migrate(tree);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"node_modules
.nx/cache"
`);
});

it('should not change gitignore if ignored by another pattern', () => {
const tree = createTreeWithEmptyWorkspace();
tree.write('.gitignore', 'node_modules\n.*/cache');
migrate(tree);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(`
"node_modules
.*/cache"
`);
});

it('should not update gitignore for lerna repos without nx.json', () => {
const tree = createTree();
tree.write('.gitignore', 'node_modules');
tree.write('lerna.json', '{}');
migrate(tree);
expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(
`"node_modules"`
);
});

it('should handle prettierignore', () => {
const tree = createTree();
tree.write('.prettierignore', '/dist');
migrate(tree);
expect(tree.read('.prettierignore', 'utf-8')).toMatchInlineSnapshot(`
"/dist
/.nx/cache"
`);
});

it('should handle missing prettierignore', () => {
const tree = createTree();
tree.delete('.prettierignore');
migrate(tree);
expect(tree.exists('.prettierignore')).toBeFalsy();
});
});
37 changes: 37 additions & 0 deletions packages/nx/src/migrations/update-17-0-0/move-cache-directory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Tree } from '../../generators/tree';
import ignore from 'ignore';

export default function moveCacheDirectory(tree: Tree) {
// If nx.json doesn't exist the repo can't utilize
// caching, so .nx/cache is less relevant. Lerna users
// that don't want to fully opt in to Nx at this time
// may also be caught off guard by the appearance of
// a .nx directory, so we are going to special case
// this for the time being.
if (tree.exists('lerna.json') && !tree.exists('nx.json')) {
return;
}

updateGitIgnore(tree);

if (tree.exists('.prettierignore')) {
const ignored = tree.read('.prettierignore', 'utf-8');
if (!ignored.includes('.nx/cache')) {
tree.write('.prettierignore', [ignored, '/.nx/cache'].join('\n'));
}
}
}

function updateGitIgnore(tree: Tree) {
const gitignore = tree.exists('.gitignore')
? tree.read('.gitignore', 'utf-8')
: '';
const ig = ignore();
ig.add(gitignore);
if (!ig.ignores('.nx/cache')) {
const updatedLines = gitignore.length
? [gitignore, '.nx/cache']
: ['.nx/cache'];
tree.write('.gitignore', updatedLines.join('\n'));
}
}
16 changes: 13 additions & 3 deletions packages/nx/src/utils/cache-directory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,19 @@ function cacheDirectory(root: string, cacheDirectory: string) {
}

function defaultCacheDirectory(root: string) {
return existsSync(join(root, '.nx'))
? join(root, '.nx', 'cache')
: join(root, 'node_modules', '.cache', 'nx');
// If nx.json doesn't exist the repo can't utilize
// caching, so .nx/cache is less relevant. Lerna users
// that don't want to fully opt in to Nx at this time
// may also be caught off guard by the appearance of
// a .nx directory, so we are going to special case
// this for the time being.
if (
existsSync(join(root, 'lerna.json')) &&
!existsSync(join(root, 'nx.json'))
) {
return join(root, 'node_modules', '.cache', 'nx');
}
return join(root, '.nx', 'cache');
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ testem.log
# System Files
.DS_Store
Thumbs.db

.nx/cache
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ testem.log
# System Files
.DS_Store
Thumbs.db

.nx/cache
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,5 @@ testem.log
# System Files
.DS_Store
Thumbs.db

.nx/cache

0 comments on commit bdbfd35

Please sign in to comment.