Skip to content

Commit acc66c1

Browse files
authored
feat(core): New siteConfig future.experimental_vcs API + future.experimental_faster.gitEagerVcs flag (#11512)
Co-authored-by: slorber <[email protected]>
1 parent a24b8ad commit acc66c1

File tree

58 files changed

+2386
-720
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2386
-720
lines changed

.github/workflows/build-blog-only.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,5 @@ jobs:
3232
run: yarn || yarn || yarn
3333
- name: Build blog-only
3434
run: yarn workspace website build:blogOnly
35+
env:
36+
DOCUSAURUS_PERF_LOGGER: 'true'

.github/workflows/build-hash-router.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ jobs:
3737
- name: Build Hash Router
3838
run: yarn build:website:fast
3939
env:
40+
DOCUSAURUS_PERF_LOGGER: 'true'
4041
DOCUSAURUS_ROUTER: 'hash'
4142
# Note: hash router + baseUrl do not play well together
4243
# This would host at https://facebook.github.io/docusaurus/#/docusaurus/

.github/workflows/build-perf.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ jobs:
6262
comment-key: DOCUSAURUS_INFRA_${{ matrix.DOCUSAURUS_INFRA }}
6363
env:
6464
DOCUSAURUS_SLOWER: ${{ matrix.DOCUSAURUS_INFRA == 'SLOWER' && 'true' || 'false' }}
65+
DOCUSAURUS_PERF_LOGGER: 'true'
6566

6667
# Ensures build times stay under reasonable thresholds
6768
build-time:
@@ -88,6 +89,7 @@ jobs:
8889
timeout-minutes: ${{ matrix.DOCUSAURUS_INFRA == 'SLOWER' && 3 || 2 }}
8990
env:
9091
DOCUSAURUS_SLOWER: ${{ matrix.DOCUSAURUS_INFRA == 'SLOWER' && 'true' || 'false' }}
92+
DOCUSAURUS_PERF_LOGGER: 'true'
9193

9294
# Ensure build with a warm cache does not increase too much
9395
- name: Build (warm cache)
@@ -96,5 +98,6 @@ jobs:
9698
timeout-minutes: ${{ matrix.DOCUSAURUS_INFRA == 'SLOWER' && 1 || 2 }}
9799
env:
98100
DOCUSAURUS_SLOWER: ${{ matrix.DOCUSAURUS_INFRA == 'SLOWER' && 'true' || 'false' }}
101+
DOCUSAURUS_PERF_LOGGER: 'true'
99102

100103
# TODO post a GitHub comment with build with perf warnings?

.github/workflows/tests-windows.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ jobs:
5454
run: yarn workspace website test:swizzle:wrap:ts
5555
- name: Docusaurus Build
5656
run: yarn build:website:fast
57+
env:
58+
DOCUSAURUS_PERF_LOGGER: 'true'
5759

5860
- name: TypeCheck website
5961
# see https://github.com/facebook/docusaurus/pull/10486

jest/deps.d.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,3 @@ declare module 'to-vfile' {
1212

1313
export function read(path: string, encoding?: string): Promise<VFile>;
1414
}
15-
16-
declare module '@testing-utils/git' {
17-
const createTempRepo: typeof import('./utils/git').createTempRepo;
18-
export {createTempRepo};
19-
}

jest/snapshotPathNormalizer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function normalizePaths<T>(value: T): T {
8282
(val) => val.split(cwdReal).join('<PROJECT_ROOT>'),
8383
(val) => val.split(cwd).join('<PROJECT_ROOT>'),
8484

85-
// Replace home directory with <TEMP_DIR>
85+
// Replace temp directory with <TEMP_DIR>
8686
(val) => val.split(tempDirReal).join('<TEMP_DIR>'),
8787
(val) => val.split(tempDir).join('<TEMP_DIR>'),
8888

jest/utils/git.ts

Lines changed: 0 additions & 63 deletions
This file was deleted.

packages/create-docusaurus/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"@docusaurus/logger": "3.9.2",
2626
"@docusaurus/utils": "3.9.2",
2727
"commander": "^5.1.0",
28-
"execa": "5.1.1",
28+
"execa": "^5.1.1",
2929
"fs-extra": "^11.1.1",
3030
"lodash": "^4.17.21",
3131
"prompts": "^2.4.2",

packages/docusaurus-plugin-content-blog/src/__tests__/feed.test.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import {jest} from '@jest/globals';
99
import path from 'path';
1010
import fs from 'fs-extra';
11-
import {DEFAULT_PARSE_FRONT_MATTER} from '@docusaurus/utils';
11+
import {
12+
DEFAULT_PARSE_FRONT_MATTER,
13+
DEFAULT_VCS_CONFIG,
14+
} from '@docusaurus/utils';
1215
import {fromPartial} from '@total-typescript/shoehorn';
1316
import {normalizePluginOptions} from '@docusaurus/utils-validation';
1417
import tree from 'tree-node-cli';
@@ -51,7 +54,7 @@ function getBlogContentPaths(siteDir: string): BlogContentPaths {
5154
}
5255

5356
async function testGenerateFeeds(
54-
context: LoadContext,
57+
contextInput: LoadContext,
5558
optionsInput: Options,
5659
): Promise<void> {
5760
const options = validateOptions({
@@ -62,6 +65,17 @@ async function testGenerateFeeds(
6265
options: optionsInput,
6366
});
6467

68+
const context: LoadContext = {
69+
...contextInput,
70+
siteConfig: {
71+
...contextInput.siteConfig,
72+
future: {
73+
...contextInput.siteConfig?.future,
74+
experimental_vcs: DEFAULT_VCS_CONFIG,
75+
},
76+
},
77+
};
78+
6579
const contentPaths = getBlogContentPaths(context.siteDir);
6680
const authorsMap = await getAuthorsMap({
6781
contentPaths,

packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@
88
import {jest} from '@jest/globals';
99
import * as path from 'path';
1010
import {normalizePluginOptions} from '@docusaurus/utils-validation';
11-
import {
12-
posixPath,
13-
getFileCommitDate,
14-
LAST_UPDATE_FALLBACK,
15-
getLocaleConfig,
16-
} from '@docusaurus/utils';
11+
import {posixPath, getLocaleConfig, TEST_VCS} from '@docusaurus/utils';
1712
import {DEFAULT_FUTURE_CONFIG} from '@docusaurus/core/src/server/configValidation';
1813
import pluginContentBlog from '../index';
1914
import {validateOptions} from '../options';
@@ -32,6 +27,10 @@ import type {
3227
EditUrlFunction,
3328
} from '@docusaurus/plugin-content-blog';
3429

30+
async function getFileCreationDate(filePath: string): Promise<Date> {
31+
return new Date((await TEST_VCS.getFileCreationInfo(filePath)).timestamp);
32+
}
33+
3534
const markdown: MarkdownConfig = {
3635
format: 'mdx',
3736
mermaid: true,
@@ -561,9 +560,7 @@ describe('blog plugin', () => {
561560
const blogPosts = await getBlogPosts(siteDir);
562561
const noDateSource = path.posix.join('@site', PluginPath, 'no date.md');
563562
const noDateSourceFile = path.posix.join(siteDir, PluginPath, 'no date.md');
564-
// We know the file exists and we know we have git
565-
const result = await getFileCommitDate(noDateSourceFile, {age: 'oldest'});
566-
const noDateSourceTime = result.date;
563+
const noDateSourceTime = await getFileCreationDate(noDateSourceFile);
567564

568565
expect({
569566
...getByTitle(blogPosts, 'no date').metadata,
@@ -674,29 +671,23 @@ describe('last update', () => {
674671
);
675672
const {blogPosts} = (await plugin.loadContent!())!;
676673

674+
const TestLastUpdate = await TEST_VCS.getFileLastUpdateInfo('any path');
675+
677676
expect(blogPosts[0]?.metadata.lastUpdatedBy).toBe('seb');
678677
expect(blogPosts[0]?.metadata.lastUpdatedAt).toBe(
679-
LAST_UPDATE_FALLBACK.lastUpdatedAt,
678+
lastUpdateFor('2021-01-01'),
680679
);
681680

682-
expect(blogPosts[1]?.metadata.lastUpdatedBy).toBe(
683-
LAST_UPDATE_FALLBACK.lastUpdatedBy,
684-
);
681+
expect(blogPosts[1]?.metadata.lastUpdatedBy).toBe(TestLastUpdate.author);
685682
expect(blogPosts[1]?.metadata.lastUpdatedAt).toBe(
686-
LAST_UPDATE_FALLBACK.lastUpdatedAt,
683+
lastUpdateFor('2021-01-01'),
687684
);
688685

689686
expect(blogPosts[2]?.metadata.lastUpdatedBy).toBe('seb');
690-
expect(blogPosts[2]?.metadata.lastUpdatedAt).toBe(
691-
lastUpdateFor('2021-01-01'),
692-
);
687+
expect(blogPosts[2]?.metadata.lastUpdatedAt).toBe(TestLastUpdate.timestamp);
693688

694-
expect(blogPosts[3]?.metadata.lastUpdatedBy).toBe(
695-
LAST_UPDATE_FALLBACK.lastUpdatedBy,
696-
);
697-
expect(blogPosts[3]?.metadata.lastUpdatedAt).toBe(
698-
lastUpdateFor('2021-01-01'),
699-
);
689+
expect(blogPosts[3]?.metadata.lastUpdatedBy).toBe(TestLastUpdate.author);
690+
expect(blogPosts[3]?.metadata.lastUpdatedAt).toBe(TestLastUpdate.timestamp);
700691
});
701692

702693
it('time only', async () => {
@@ -710,29 +701,27 @@ describe('last update', () => {
710701
);
711702
const {blogPosts} = (await plugin.loadContent!())!;
712703

713-
expect(blogPosts[0]?.metadata.title).toBe('Author');
704+
const TestLastUpdate = await TEST_VCS.getFileLastUpdateInfo('any path');
705+
706+
expect(blogPosts[0]?.metadata.title).toBe('Both');
714707
expect(blogPosts[0]?.metadata.lastUpdatedBy).toBeUndefined();
715708
expect(blogPosts[0]?.metadata.lastUpdatedAt).toBe(
716-
LAST_UPDATE_FALLBACK.lastUpdatedAt,
709+
lastUpdateFor('2021-01-01'),
717710
);
718711

719-
expect(blogPosts[1]?.metadata.title).toBe('Nothing');
712+
expect(blogPosts[1]?.metadata.title).toBe('Last update date');
720713
expect(blogPosts[1]?.metadata.lastUpdatedBy).toBeUndefined();
721714
expect(blogPosts[1]?.metadata.lastUpdatedAt).toBe(
722-
LAST_UPDATE_FALLBACK.lastUpdatedAt,
715+
lastUpdateFor('2021-01-01'),
723716
);
724717

725-
expect(blogPosts[2]?.metadata.title).toBe('Both');
718+
expect(blogPosts[2]?.metadata.title).toBe('Author');
726719
expect(blogPosts[2]?.metadata.lastUpdatedBy).toBeUndefined();
727-
expect(blogPosts[2]?.metadata.lastUpdatedAt).toBe(
728-
lastUpdateFor('2021-01-01'),
729-
);
720+
expect(blogPosts[2]?.metadata.lastUpdatedAt).toBe(TestLastUpdate.timestamp);
730721

731-
expect(blogPosts[3]?.metadata.title).toBe('Last update date');
722+
expect(blogPosts[3]?.metadata.title).toBe('Nothing');
732723
expect(blogPosts[3]?.metadata.lastUpdatedBy).toBeUndefined();
733-
expect(blogPosts[3]?.metadata.lastUpdatedAt).toBe(
734-
lastUpdateFor('2021-01-01'),
735-
);
724+
expect(blogPosts[3]?.metadata.lastUpdatedAt).toBe(TestLastUpdate.timestamp);
736725
});
737726

738727
it('author only', async () => {
@@ -746,20 +735,18 @@ describe('last update', () => {
746735
);
747736
const {blogPosts} = (await plugin.loadContent!())!;
748737

738+
const TestLastUpdate = await TEST_VCS.getFileLastUpdateInfo('any path');
739+
749740
expect(blogPosts[0]?.metadata.lastUpdatedBy).toBe('seb');
750741
expect(blogPosts[0]?.metadata.lastUpdatedAt).toBeUndefined();
751742

752-
expect(blogPosts[1]?.metadata.lastUpdatedBy).toBe(
753-
LAST_UPDATE_FALLBACK.lastUpdatedBy,
754-
);
743+
expect(blogPosts[1]?.metadata.lastUpdatedBy).toBe(TestLastUpdate.author);
755744
expect(blogPosts[1]?.metadata.lastUpdatedAt).toBeUndefined();
756745

757746
expect(blogPosts[2]?.metadata.lastUpdatedBy).toBe('seb');
758747
expect(blogPosts[2]?.metadata.lastUpdatedAt).toBeUndefined();
759748

760-
expect(blogPosts[3]?.metadata.lastUpdatedBy).toBe(
761-
LAST_UPDATE_FALLBACK.lastUpdatedBy,
762-
);
749+
expect(blogPosts[3]?.metadata.lastUpdatedBy).toBe(TestLastUpdate.author);
763750
expect(blogPosts[3]?.metadata.lastUpdatedAt).toBeUndefined();
764751
});
765752

0 commit comments

Comments
 (0)