Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(content-docs): warn when files are not tracked #6937

Merged
merged 7 commits into from
Mar 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 28 additions & 5 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,33 @@
{
"name": "Docusaurus Dev Container",
"image": "mcr.microsoft.com/vscode/devcontainers/typescript-node:14-buster",
"image": "mcr.microsoft.com/vscode/devcontainers/base:ubuntu-20.04",
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}
},
"extensions": ["dbaeumer.vscode-eslint", "orta.vscode-jest"],
"extensions": [
"dbaeumer.vscode-eslint",
"orta.vscode-jest",
"esbenp.prettier-vscode",
"streetsidesoftware.code-spell-checker"
],
"forwardPorts": [3000],
"postCreateCommand": "yarn install"
"containerUser": "vscode",
"postCreateCommand": "yarn install",
"waitFor": "postCreateCommand", // otherwise automated jest tests fail
"features": {
"node": {
"version": "14"
},
"github-cli": "latest"
}
}
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ module.exports = {
curly: [WARNING, 'all'],
'global-require': WARNING,
'lines-between-class-members': OFF,
'max-classes-per-file': OFF,
'max-len': [
WARNING,
{
Expand Down
2 changes: 2 additions & 0 deletions jest.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import {fileURLToPath} from 'url';

process.env.TZ = 'UTC';
felipecrs marked this conversation as resolved.
Show resolved Hide resolved

const ignorePatterns = [
'/node_modules/',
'__fixtures__',
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"lint:spelling": "cspell \"**\" --no-progress",
"lint:style": "stylelint \"**/*.css\"",
"lerna": "lerna",
"test": "cross-env TZ=UTC jest",
"test": "jest",
"test:build:website": "./admin/scripts/test-release.sh",
"watch": "yarn lerna run --parallel watch",
"clear": "(yarn workspace website clear || echo 'Failure while running docusaurus clear') && yarn lerna exec --ignore docusaurus yarn rimraf lib lib-next",
Expand Down
2 changes: 1 addition & 1 deletion packages/docusaurus-plugin-content-blog/src/blogUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ async function processBlogSourceFile(
});
return result.date;
} catch (err) {
logger.error(err);
logger.warn(err);
return (await fs.stat(blogSourceAbsolute)).birthtime;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ describe('getFileLastUpdate', () => {

it('non-existing file', async () => {
const consoleMock = jest
.spyOn(console, 'error')
.spyOn(console, 'warn')
.mockImplementation(() => {});
const nonExistingFileName = '.nonExisting';
const nonExistingFilePath = path.join(
Expand All @@ -65,10 +65,17 @@ describe('getFileLastUpdate', () => {
consoleMock.mockRestore();
});

it('temporary created file that has no git timestamp', async () => {
it('temporary created file that is not tracked by git', async () => {
const consoleMock = jest
.spyOn(console, 'warn')
.mockImplementation(() => {});
const tempFilePath = path.join(__dirname, '__fixtures__', '.temp');
await fs.writeFile(tempFilePath, 'Lorem ipsum :)');
await expect(getFileLastUpdate(tempFilePath)).resolves.toBeNull();
expect(consoleMock).toHaveBeenCalledTimes(1);
expect(consoleMock).toHaveBeenLastCalledWith(
expect.stringMatching(/not tracked by git./),
);
await fs.unlink(tempFilePath);
});

Expand Down
17 changes: 15 additions & 2 deletions packages/docusaurus-plugin-content-docs/src/lastUpdate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@
*/

import logger from '@docusaurus/logger';
import {getFileCommitDate, GitNotFoundError} from '@docusaurus/utils';
import {
getFileCommitDate,
FileNotTrackedError,
GitNotFoundError,
} from '@docusaurus/utils';

type FileLastUpdateData = {timestamp?: number; author?: string};

let showedGitRequirementError = false;
let showedFileNotTrackedError = false;

export async function getFileLastUpdate(
filePath?: string,
Expand All @@ -31,8 +36,16 @@ export async function getFileLastUpdate(
if (err instanceof GitNotFoundError && !showedGitRequirementError) {
logger.warn('Sorry, the docs plugin last update options require Git.');
showedGitRequirementError = true;
} else if (
err instanceof FileNotTrackedError &&
!showedFileNotTrackedError
felipecrs marked this conversation as resolved.
Show resolved Hide resolved
) {
logger.warn(
'Cannot infer the update date for some files, as they are not tracked by git.',
);
showedFileNotTrackedError = true;
} else {
logger.error(err);
logger.warn(err);
}
return null;
}
Expand Down
9 changes: 9 additions & 0 deletions packages/docusaurus-utils/src/gitUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import shell from 'shelljs';

export class GitNotFoundError extends Error {}

export class FileNotTrackedError extends Error {}

export const getFileCommitDate = (
file: string,
{
Expand Down Expand Up @@ -70,6 +72,13 @@ export const getFileCommitDate = (
}

const output = result.stdout.trim();

if (!output) {
throw new FileNotTrackedError(
`Failed to retrieve the git history for file "${file}" because the file is not tracked by git.`,
);
}

const match = output.match(regex);

if (
Expand Down
6 changes: 5 additions & 1 deletion packages/docusaurus-utils/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ export {
WEBPACK_URL_LOADER_LIMIT,
} from './constants';
export {generate, genChunkName, readOutputHTMLFile} from './emitUtils';
export {getFileCommitDate, GitNotFoundError} from './gitUtils';
export {
getFileCommitDate,
FileNotTrackedError,
GitNotFoundError,
} from './gitUtils';
export {
mergeTranslations,
updateTranslationFileMessages,
Expand Down
7 changes: 6 additions & 1 deletion project-words.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,13 @@ customizability
daishi
datagit
datas
dbaeumer
décembre
dedup
deduplicated
déja
deps
devcontainers
devspace
devto
dmitry
Expand All @@ -78,6 +80,7 @@ endilie
endiliey
entrypoints
errnametoolong
esbenp
esbuild
eslintcache
evaluable
Expand All @@ -98,8 +101,8 @@ globby
goss
goyal
gtag
hardcoding
hahaha
hardcoding
héctor
héllô
heuristical
Expand Down Expand Up @@ -184,6 +187,7 @@ opensearch
opensearchdescription
optimizt
optind
orta
overrideable
pageview
palenight
Expand Down Expand Up @@ -296,6 +300,7 @@ typesense
unflat
unist
unlocalized
unmatch
unnormalized
unoptimized
unprefixed
Expand Down