From d428eec060b5448b09968ee632194f07fa6e9409 Mon Sep 17 00:00:00 2001 From: Juri Date: Mon, 24 Feb 2025 21:12:28 +0100 Subject: [PATCH] feat(nx-dev): update workspace conformance rule to check md files in general --- nx.json | 2 +- .../blog-description/index.ts | 44 +++++++++++-------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/nx.json b/nx.json index 20962cc15e..f874b8559c 100644 --- a/nx.json +++ b/nx.json @@ -253,7 +253,7 @@ "rule": "@nx/workspace-plugin/conformance-rules/blog-description", "projects": ["docs"], "options": { - "mdGlobPattern": "blog/**/*.md" + "mdGlobPattern": "{blog,shared}/**/*.md" } }, { diff --git a/tools/workspace-plugin/src/conformance-rules/blog-description/index.ts b/tools/workspace-plugin/src/conformance-rules/blog-description/index.ts index 5bce214d91..0f5c23e2b1 100644 --- a/tools/workspace-plugin/src/conformance-rules/blog-description/index.ts +++ b/tools/workspace-plugin/src/conformance-rules/blog-description/index.ts @@ -12,7 +12,7 @@ export default createConformanceRule<{ mdGlobPattern: string }>({ name: 'blog-description', category: 'consistency', description: - 'Ensures that blog posts have a description in their frontmatter', + 'Ensures that markdown documentation files have a description in their frontmatter', reporter: 'project-files-reporter', implementation: async ({ projectGraph, ruleOptions }) => { const violations: ProjectFilesViolation[] = []; @@ -43,26 +43,32 @@ export default createConformanceRule<{ mdGlobPattern: string }>({ const content = readFileSync(file, 'utf-8'); const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/); - // Only check files with frontmatter - if (frontmatterMatch) { - try { - const frontmatter = yamlLoad(frontmatterMatch[1]) as Record< - string, - unknown - >; + if (!frontmatterMatch) { + violations.push({ + message: 'Markdown documentation files must have frontmatter', + sourceProject: docsProject.name, + file: file, + }); + continue; + } - if (!frontmatter.description) { - violations.push({ - message: - 'Blog posts with frontmatter must have a description field', - sourceProject: docsProject.name, - file: file, - }); - } - } catch (e) { - // If YAML parsing fails, we skip the file - continue; + try { + const frontmatter = yamlLoad(frontmatterMatch[1]) as Record< + string, + unknown + >; + + if (!frontmatter.description) { + violations.push({ + message: + 'Markdown documentation files must have a description field in their frontmatter', + sourceProject: docsProject.name, + file: file, + }); } + } catch (e) { + // If YAML parsing fails, we skip the file + continue; } }