From f7ca230b79f5cdf8c03c047f8c44967c13b51b3a Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Thu, 11 Apr 2024 13:00:47 +0200
Subject: [PATCH] docs(versioning): split to seperate pages and add open issues
 (#28314)

---
 docs/usage/modules/versioning/.pages          |  7 +++
 .../{versioning.md => versioning/index.md}    |  0
 lib/modules/manager/batect/readme.md          |  2 +-
 lib/modules/manager/dockerfile/readme.md      |  2 +-
 tools/docs/github-query-items.ts              |  4 +-
 tools/docs/index.ts                           |  2 +-
 tools/docs/versioning.ts                      | 58 ++++++++++++++-----
 7 files changed, 55 insertions(+), 20 deletions(-)
 create mode 100644 docs/usage/modules/versioning/.pages
 rename docs/usage/modules/{versioning.md => versioning/index.md} (100%)

diff --git a/docs/usage/modules/versioning/.pages b/docs/usage/modules/versioning/.pages
new file mode 100644
index 0000000000..4a59c0f2ed
--- /dev/null
+++ b/docs/usage/modules/versioning/.pages
@@ -0,0 +1,7 @@
+title: Versionings
+nav:
+  - Introduction: index.md
+  - ...
+collapse_single_pages: true
+order: asc
+sort_type: natural
diff --git a/docs/usage/modules/versioning.md b/docs/usage/modules/versioning/index.md
similarity index 100%
rename from docs/usage/modules/versioning.md
rename to docs/usage/modules/versioning/index.md
diff --git a/lib/modules/manager/batect/readme.md b/lib/modules/manager/batect/readme.md
index 6c16968630..93c1abad59 100644
--- a/lib/modules/manager/batect/readme.md
+++ b/lib/modules/manager/batect/readme.md
@@ -28,6 +28,6 @@ For example:
 
 ### Bundle versioning
 
-This manager assumes that any bundles referenced use tags for versioning, and that these tags use [SemVer](../../versioning.md#semantic-versioning).
+This manager assumes that any bundles referenced use tags for versioning, and that these tags use [SemVer](../../versioning/semver.md).
 The implementation of SemVer is strict - versions must follow the `X.Y.Z` or `vX.Y.Z` format.
 Versions that don't match this format (eg. `X.Y`) will be ignored.
diff --git a/lib/modules/manager/dockerfile/readme.md b/lib/modules/manager/dockerfile/readme.md
index 4a46c99549..f2ed0e24bb 100644
--- a/lib/modules/manager/dockerfile/readme.md
+++ b/lib/modules/manager/dockerfile/readme.md
@@ -19,4 +19,4 @@ For example, if you know that an image follows SemVer, you can tell Renovate to
 }
 ```
 
-Read [Renovate's Docker Versioning](../../versioning.md#docker-versioning) docs to learn more.
+Read [Renovate's Docker Versioning](../../versioning/docker.md) docs to learn more.
diff --git a/tools/docs/github-query-items.ts b/tools/docs/github-query-items.ts
index 5aeb4e282b..60bb203e9c 100644
--- a/tools/docs/github-query-items.ts
+++ b/tools/docs/github-query-items.ts
@@ -36,6 +36,7 @@ export interface RenovateOpenItems {
   managers: OpenItems;
   platforms: OpenItems;
   datasources: OpenItems;
+  versionings: OpenItems;
 }
 
 export type OpenItems = Record<string, Items | undefined>;
@@ -63,6 +64,7 @@ export async function getOpenGitHubItems(): Promise<RenovateOpenItems> {
       managers: extractIssues(rawItems, 'manager:'),
       platforms: extractIssues(rawItems, 'platform:'),
       datasources: extractIssues(rawItems, 'datasource:'),
+      versionings: extractIssues(rawItems, 'versioning:'),
     };
 
     return renovateOpenItems;
@@ -71,7 +73,7 @@ export async function getOpenGitHubItems(): Promise<RenovateOpenItems> {
     if (process.env.CI) {
       throw err;
     }
-    return { managers: {}, platforms: {}, datasources: {} };
+    return { managers: {}, platforms: {}, datasources: {}, versionings: {} };
   }
 }
 
diff --git a/tools/docs/index.ts b/tools/docs/index.ts
index 577f0d6e9e..737138b108 100644
--- a/tools/docs/index.ts
+++ b/tools/docs/index.ts
@@ -32,7 +32,7 @@ export async function generateDocs(): Promise<void> {
 
     // versionings
     logger.info('* versionings');
-    await generateVersioning(dist);
+    await generateVersioning(dist, openItems.versionings);
 
     // datasources
     logger.info('* datasources');
diff --git a/tools/docs/versioning.ts b/tools/docs/versioning.ts
index 4eb85beb5b..eb379f357b 100644
--- a/tools/docs/versioning.ts
+++ b/tools/docs/versioning.ts
@@ -1,6 +1,16 @@
+import { codeBlock } from 'common-tags';
 import { getVersioningList } from '../../lib/modules/versioning';
 import { readFile, updateFile } from '../utils';
-import { formatDescription, formatUrls, replaceContent } from './utils';
+import {
+  type OpenItems,
+  generateFeatureAndBugMarkdown,
+} from './github-query-items';
+import {
+  formatDescription,
+  formatUrls,
+  getModuleLink,
+  replaceContent,
+} from './utils';
 
 type Versioning = {
   id: string;
@@ -10,35 +20,51 @@ type Versioning = {
   supportedRangeStrategies?: string[];
 };
 
-export async function generateVersioning(dist: string): Promise<void> {
+export async function generateVersioning(
+  dist: string,
+  versioningIssuesMap: OpenItems,
+): Promise<void> {
   const versioningList = getVersioningList();
-  let versioningContent =
-    '\nSupported values for `versioning` are: ' +
-    versioningList.map((v) => `\`${v}\``).join(', ') +
-    '.\n\n';
+  let versioningContent = '\nSupported values for `versioning` are:\n\n';
   for (const versioning of versioningList) {
     const definition = (await import(
       `../../lib/modules/versioning/${versioning}`
     )) as Versioning;
     const { id, displayName, urls, supportsRanges, supportedRangeStrategies } =
       definition;
-    versioningContent += `\n### ${displayName} Versioning\n\n`;
-    versioningContent += `**Identifier**: \`${id}\`\n\n`;
-    versioningContent += formatUrls(urls);
-    versioningContent += `**Ranges/Constraints:**\n\n`;
+    versioningContent += `* ${getModuleLink(
+      versioning,
+      `\`${versioning}\``,
+    )}\n`;
+    let md = codeBlock`
+    ---
+    title: ${displayName}
+    edit_url: https://github.com/renovatebot/renovate/edit/main/lib/modules/versioning/${versioning}/readme.md
+    ---
+
+    # ${displayName} Versioning
+    `;
+    md += '\n\n';
+    md += `**Identifier**: \`${id}\`\n\n`;
+    md += formatUrls(urls);
+    md += `**Ranges/Constraints:**\n\n`;
     if (supportsRanges) {
-      versioningContent += `✅ Ranges are supported.\n\nValid \`rangeStrategy\` values are: ${(
+      md += `✅ Ranges are supported.\n\nValid \`rangeStrategy\` values are: ${(
         supportedRangeStrategies ?? []
       )
         .map((strategy: string) => `\`${strategy}\``)
         .join(', ')}\n\n`;
     } else {
-      versioningContent += `❌ No range support.\n\n`;
+      md += `❌ No range support.\n\n`;
     }
-    versioningContent += await formatDescription('versioning', versioning);
-    versioningContent += `\n----\n\n`;
+    md += await formatDescription('versioning', versioning);
+    md += `\n----\n\n`;
+    md += generateFeatureAndBugMarkdown(versioningIssuesMap, versioning);
+
+    await updateFile(`${dist}/modules/versioning/${versioning}/index.md`, md);
   }
-  let indexContent = await readFile(`docs/usage/modules/versioning.md`);
+
+  let indexContent = await readFile(`docs/usage/modules/versioning/index.md`);
   indexContent = replaceContent(indexContent, versioningContent);
-  await updateFile(`${dist}/modules/versioning.md`, indexContent);
+  await updateFile(`${dist}/modules/versioning/index.md`, indexContent);
 }
-- 
GitLab