From 60c1148f8a638ee4c4dedcbae476c1884b2d0f4f Mon Sep 17 00:00:00 2001 From: Eirik Bjornset Date: Sun, 3 Nov 2024 15:06:58 +0100 Subject: [PATCH] Added support for .Net 9 --- .github/workflows/build.yml | 8 +++- .github/workflows/pr.yml | 8 +++- .github/workflows/publish-docs.yml | 8 +++- .github/workflows/release.yml | 8 +++- .github/workflows/tag-version.yml | 8 +++- build/Build.csproj | 5 +- .../BaseGitHubActionsAttribute.cs | 2 +- ...d => 2024-11-03-v-2.0.0-prerelease0002.md} | 1 + global.json | 2 +- .../DryGen.CSharpFromJsonSchema.csproj | 2 +- .../DryGen.CodeCompiler.csproj | 10 +++- src/DryGen.Core/DryGen.Core.csproj | 2 +- .../DryGen.MermaidFromCSharp.csproj | 2 +- .../DryGen.MermaidFromDotnetDepsJson.csproj | 2 +- .../DryGen.MermaidFromEfCore.csproj | 2 +- .../DryGen.MermaidFromJsonSchema.csproj | 2 +- src/DryGen.Templates/DryGen.Templates.csproj | 10 ++-- .../.template.config/template.json | 21 +++++++- .../DryGen.Templates.JsonSchema.csproj | 2 +- .../.template.config/template.json | 43 ++++++++++++----- .../DryGen.Templates.Mermaid.csproj | 12 +++-- src/DryGen/DryGen.csproj | 2 +- .../DryGen.DevUtils/DryGen.DevUtils.csproj | 5 +- src/develop/DryGen.Docs/DryGen.Docs.csproj | 2 +- src/develop/DryGen.Docs/Extensions.cs | 48 ++++++++++++------- .../Development/GenerateReleaseNotes.feature | 19 +++++--- 26 files changed, 166 insertions(+), 70 deletions(-) rename docs/templates/releasenotes/{yyyy-MM-dd-v-x.y.z.md => 2024-11-03-v-2.0.0-prerelease0002.md} (97%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe17b158..184583d7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,10 +34,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup .Net 8.0.* + - name: Setup .Net 8.0.403 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.* + dotnet-version: 8.0.403 + - name: Setup .Net 9.0.100-rc.2.24474.11 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.100-rc.2.24474.11 - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v4 with: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index ef4eaaf2..180c57d6 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -29,10 +29,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup .Net 8.0.* + - name: Setup .Net 8.0.403 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.* + dotnet-version: 8.0.403 + - name: Setup .Net 9.0.100-rc.2.24474.11 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.100-rc.2.24474.11 - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v4 with: diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml index b1df6958..8714f912 100644 --- a/.github/workflows/publish-docs.yml +++ b/.github/workflows/publish-docs.yml @@ -31,10 +31,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup .Net 8.0.* + - name: Setup .Net 8.0.403 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.* + dotnet-version: 8.0.403 + - name: Setup .Net 9.0.100-rc.2.24474.11 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.100-rc.2.24474.11 - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v4 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 73e64c8b..22e26324 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,10 +34,14 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup .Net 8.0.* + - name: Setup .Net 8.0.403 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.* + dotnet-version: 8.0.403 + - name: Setup .Net 9.0.100-rc.2.24474.11 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.100-rc.2.24474.11 - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v4 with: diff --git a/.github/workflows/tag-version.yml b/.github/workflows/tag-version.yml index 5dcd54f9..bd70a0fa 100644 --- a/.github/workflows/tag-version.yml +++ b/.github/workflows/tag-version.yml @@ -32,10 +32,14 @@ jobs: with: fetch-depth: 0 token: ${{ secrets.TAG_VERSION_TOKEN }} - - name: Setup .Net 8.0.* + - name: Setup .Net 8.0.403 uses: actions/setup-dotnet@v4 with: - dotnet-version: 8.0.* + dotnet-version: 8.0.403 + - name: Setup .Net 9.0.100-rc.2.24474.11 + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.100-rc.2.24474.11 - name: 'Cache: .nuke/temp, ~/.nuget/packages' uses: actions/cache@v4 with: diff --git a/build/Build.csproj b/build/Build.csproj index 71d89313..89c41fae 100644 --- a/build/Build.csproj +++ b/build/Build.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net9.0 disable CS0649;CS0169 @@ -19,6 +19,9 @@ + + + diff --git a/build/DryGen/GithubActions/BaseGitHubActionsAttribute.cs b/build/DryGen/GithubActions/BaseGitHubActionsAttribute.cs index 1fb2f5be..583b023e 100644 --- a/build/DryGen/GithubActions/BaseGitHubActionsAttribute.cs +++ b/build/DryGen/GithubActions/BaseGitHubActionsAttribute.cs @@ -17,7 +17,7 @@ protected override GitHubActionsJob GetJobs(GitHubActionsImage image, IReadOnlyC { var job = base.GetJobs(image, relevantTargets); var newSteps = new List(job.Steps); - foreach (var version in new[] { "8.0.*" }) + foreach (var version in new[] {"9.0.100-rc.2.24474.11", "8.0.403" }) { newSteps.Insert(1, new SetupDotNetStep(version)); } diff --git a/docs/templates/releasenotes/yyyy-MM-dd-v-x.y.z.md b/docs/templates/releasenotes/2024-11-03-v-2.0.0-prerelease0002.md similarity index 97% rename from docs/templates/releasenotes/yyyy-MM-dd-v-x.y.z.md rename to docs/templates/releasenotes/2024-11-03-v-2.0.0-prerelease0002.md index 5cc415b1..cae5d3e8 100644 --- a/docs/templates/releasenotes/yyyy-MM-dd-v-x.y.z.md +++ b/docs/templates/releasenotes/2024-11-03-v-2.0.0-prerelease0002.md @@ -4,6 +4,7 @@ ### Improvements in this version ## Prerelease 2 +- Added support for .Net 9 - Added support for generating many to many associations in `mermaid-class-diagram-from-csharp`. - Added support for generating many to many relations in `mermaid-er-diagram-from-csharp`. - Added support for `include-exception-stacktrace` in `verbs-from-options-file`. diff --git a/global.json b/global.json index 255fcc83..134d3481 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.403", + "version": "9.0.100-rc.2.24474.11", "rollForward": "feature" } } \ No newline at end of file diff --git a/src/DryGen.CSharpFromJsonSchema/DryGen.CSharpFromJsonSchema.csproj b/src/DryGen.CSharpFromJsonSchema/DryGen.CSharpFromJsonSchema.csproj index 88fcde7f..0444eeb3 100644 --- a/src/DryGen.CSharpFromJsonSchema/DryGen.CSharpFromJsonSchema.csproj +++ b/src/DryGen.CSharpFromJsonSchema/DryGen.CSharpFromJsonSchema.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.CodeCompiler/DryGen.CodeCompiler.csproj b/src/DryGen.CodeCompiler/DryGen.CodeCompiler.csproj index 7a3a284b..998a0b35 100644 --- a/src/DryGen.CodeCompiler/DryGen.CodeCompiler.csproj +++ b/src/DryGen.CodeCompiler/DryGen.CodeCompiler.csproj @@ -1,11 +1,17 @@ - net8.0 + net8.0;net9.0 - + + + + + + + diff --git a/src/DryGen.Core/DryGen.Core.csproj b/src/DryGen.Core/DryGen.Core.csproj index a81eb784..e09d9490 100644 --- a/src/DryGen.Core/DryGen.Core.csproj +++ b/src/DryGen.Core/DryGen.Core.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.MermaidFromCSharp/DryGen.MermaidFromCSharp.csproj b/src/DryGen.MermaidFromCSharp/DryGen.MermaidFromCSharp.csproj index 5e95207f..282fe9f4 100644 --- a/src/DryGen.MermaidFromCSharp/DryGen.MermaidFromCSharp.csproj +++ b/src/DryGen.MermaidFromCSharp/DryGen.MermaidFromCSharp.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.MermaidFromDotnetDepsJson/DryGen.MermaidFromDotnetDepsJson.csproj b/src/DryGen.MermaidFromDotnetDepsJson/DryGen.MermaidFromDotnetDepsJson.csproj index ca98fea6..bcd22255 100644 --- a/src/DryGen.MermaidFromDotnetDepsJson/DryGen.MermaidFromDotnetDepsJson.csproj +++ b/src/DryGen.MermaidFromDotnetDepsJson/DryGen.MermaidFromDotnetDepsJson.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.MermaidFromEfCore/DryGen.MermaidFromEfCore.csproj b/src/DryGen.MermaidFromEfCore/DryGen.MermaidFromEfCore.csproj index f081989e..d3cc3fa9 100644 --- a/src/DryGen.MermaidFromEfCore/DryGen.MermaidFromEfCore.csproj +++ b/src/DryGen.MermaidFromEfCore/DryGen.MermaidFromEfCore.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.MermaidFromJsonSchema/DryGen.MermaidFromJsonSchema.csproj b/src/DryGen.MermaidFromJsonSchema/DryGen.MermaidFromJsonSchema.csproj index bf1c2f74..99986f25 100644 --- a/src/DryGen.MermaidFromJsonSchema/DryGen.MermaidFromJsonSchema.csproj +++ b/src/DryGen.MermaidFromJsonSchema/DryGen.MermaidFromJsonSchema.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 diff --git a/src/DryGen.Templates/DryGen.Templates.csproj b/src/DryGen.Templates/DryGen.Templates.csproj index 341175d5..7fc53c68 100644 --- a/src/DryGen.Templates/DryGen.Templates.csproj +++ b/src/DryGen.Templates/DryGen.Templates.csproj @@ -2,7 +2,7 @@ Template - net8.0 + net8.0;net9.0 dry-gen.templates DryGen Templates MIT @@ -30,16 +30,16 @@ --> - + - + - + - + diff --git a/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/.template.config/template.json b/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/.template.config/template.json index a853e600..f197ba2c 100644 --- a/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/.template.config/template.json +++ b/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/.template.config/template.json @@ -6,8 +6,27 @@ "name": "dry-gen: Generate C# code from json schema before build", "shortName": "dry-gen.jsonschema", "sourceName": "DryGen.Templates.JsonSchema", + "preferNameDirectory": true, "tags": { "language": "C#", "type": "project" - } + }, + "symbols": { + "framework": { + "type": "parameter", + "datatype": "choice", + "defaultValue": "net9.0", + "choices": [ + { + "choice": "net8.0", + "description": "Target .Net 8" + }, + { + "choice": "net9.0", + "description": "Target .Net 9" + } + ], + "replaces": "net8.0;net9.0" + } + } } \ No newline at end of file diff --git a/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/DryGen.Templates.JsonSchema.csproj b/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/DryGen.Templates.JsonSchema.csproj index 06e62ca1..09171c9a 100644 --- a/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/DryGen.Templates.JsonSchema.csproj +++ b/src/DryGen.Templates/templates/DryGen.Templates.JsonSchema/DryGen.Templates.JsonSchema.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 disable disable diff --git a/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/.template.config/template.json b/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/.template.config/template.json index 94c9bffa..579b2801 100644 --- a/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/.template.config/template.json +++ b/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/.template.config/template.json @@ -1,13 +1,32 @@ { - "$schema": "http://json.schemastore.org/template", - "author": "Eirik Bjornset", - "classifications": [ "dry-gen", "mermaid" ], - "identity": "DryGen.Mermaid", - "name": "dry-gen: Generate Mermaid diagrams after build", - "shortName": "dry-gen.mermaid", - "sourceName": "DryGen.Templates.Mermaid", - "tags": { - "language": "C#", - "type": "project" - } -} \ No newline at end of file + "$schema": "http://json.schemastore.org/template", + "author": "Eirik Bjornset", + "classifications": ["dry-gen", "mermaid"], + "identity": "DryGen.Mermaid", + "name": "dry-gen: Generate Mermaid diagrams after build", + "shortName": "dry-gen.mermaid", + "sourceName": "DryGen.Templates.Mermaid", + "preferNameDirectory": true, + "tags": { + "language": "C#", + "type": "project" + }, + "symbols": { + "framework": { + "type": "parameter", + "datatype": "choice", + "defaultValue": "net9.0", + "choices": [ + { + "choice": "net8.0", + "description": "Target .Net 8" + }, + { + "choice": "net9.0", + "description": "Target .Net 9" + } + ], + "replaces": "net8.0;net9.0" + } + } +} diff --git a/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/DryGen.Templates.Mermaid.csproj b/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/DryGen.Templates.Mermaid.csproj index 889c3abc..15beecab 100644 --- a/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/DryGen.Templates.Mermaid.csproj +++ b/src/DryGen.Templates/templates/DryGen.Templates.Mermaid/DryGen.Templates.Mermaid.csproj @@ -1,7 +1,7 @@  - net8.0 + net8.0;net9.0 disable disable + + all + + + all + + + diff --git a/src/DryGen/DryGen.csproj b/src/DryGen/DryGen.csproj index a1ae4e23..f88a6936 100644 --- a/src/DryGen/DryGen.csproj +++ b/src/DryGen/DryGen.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net8.0;net9.0 false true dry-gen diff --git a/src/develop/DryGen.DevUtils/DryGen.DevUtils.csproj b/src/develop/DryGen.DevUtils/DryGen.DevUtils.csproj index e2d4ef24..1e79a74a 100644 --- a/src/develop/DryGen.DevUtils/DryGen.DevUtils.csproj +++ b/src/develop/DryGen.DevUtils/DryGen.DevUtils.csproj @@ -1,14 +1,15 @@  - net8.0 + net8.0;net9.0 false - + + diff --git a/src/develop/DryGen.Docs/DryGen.Docs.csproj b/src/develop/DryGen.Docs/DryGen.Docs.csproj index 41eee363..c2955274 100644 --- a/src/develop/DryGen.Docs/DryGen.Docs.csproj +++ b/src/develop/DryGen.Docs/DryGen.Docs.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net8.0;net9.0 disable diff --git a/src/develop/DryGen.Docs/Extensions.cs b/src/develop/DryGen.Docs/Extensions.cs index 3c91fed6..60a82790 100644 --- a/src/develop/DryGen.Docs/Extensions.cs +++ b/src/develop/DryGen.Docs/Extensions.cs @@ -108,39 +108,53 @@ private static void ValidateVersionNumber(this string releaseNotesFileName) { var versionNumber = releaseNotesFileName.GetVersionNumber(); var versionNumberParts = versionNumber.Split('.'); - if (versionNumberParts.Length < 3 || versionNumberParts.Length > 4) + if (versionNumberParts.Length != 3) { - ThrowVersionNuUmberException(); + ThrowVersionNumberException(releaseNotesFileName, versionNumber); } for (var i = 0; i < versionNumberParts.Length; i++) { - if (versionNumberParts.Length == 4 && i == 2) + if (i == 2) { var patchParts = versionNumberParts[i].Split('-'); - if (patchParts.Length != 2) - { - ThrowVersionNuUmberException(); + if (patchParts.Length > 1) { + if (patchParts.Length > 2) + { + ThrowVersionNumberException(releaseNotesFileName, versionNumber); + } + if (patchParts[1].Length < 5) { + ThrowVersionNumberException(releaseNotesFileName, versionNumber); + } + CheckInteger(patchParts[1][^4..], releaseNotesFileName, versionNumber); + CheckNonInteger(patchParts[1].Substring(patchParts[1].Length -5, 1), releaseNotesFileName, versionNumber); + continue; } - CheckInteger(patchParts[0]); - continue; } - CheckInteger(versionNumberParts[i]); + CheckInteger(versionNumberParts[i], releaseNotesFileName, versionNumber); } + } - void CheckInteger(string value) + private static void CheckInteger(string value, string releaseNotesFileName, string versionNumber) + { + if (!int.TryParse(value, out _)) { - if (!int.TryParse(value, out _)) - { - ThrowVersionNuUmberException(); - } + ThrowVersionNumberException(releaseNotesFileName, versionNumber); } + } - void ThrowVersionNuUmberException() + private static void CheckNonInteger(string value, string releaseNotesFileName, string versionNumber) + { + if (int.TryParse(value, out _)) { - throw new FileNameException(releaseNotesFileName, $"'{versionNumber}' is not a valid version number. {validVersionNumberText}"); + ThrowVersionNumberException(releaseNotesFileName, versionNumber); } } + private static void ThrowVersionNumberException(string releaseNotesFileName, string versionNumber) + { + throw new FileNameException(releaseNotesFileName, $"'{versionNumber}' is not a valid version number. {validVersionNumberText}"); + } + private static void ValidateExtensionLengthAndV(this string releaseNotesFileName) { if (Path.GetExtension(releaseNotesFileName) != ".md" || releaseNotesFileName.Length < nextReleaseFileNameLength) @@ -183,6 +197,6 @@ public static string GetOutputFileName(this string releaseNotesFileName) private const string nextReleaseFileNamePrefix = "yyyy-MM-dd"; private const string nextReleaseFileName = "yyyy-MM-dd-v-x.y.z.md"; private const string validFileNameText = "The file name must be 'yyyy-MM-dd-v-x.y.z.md' or on the format '-v-.md', where is a date (NB! Not in the future) and is a valid version number!"; - private const string validVersionNumberText = "It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease'"; + private const string validVersionNumberText = "It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer"; private static readonly int nextReleaseFileNameLength = nextReleaseFileName.Length; } diff --git a/src/develop/DryGen.UTests/Features/Development/GenerateReleaseNotes.feature b/src/develop/DryGen.UTests/Features/Development/GenerateReleaseNotes.feature index 2102ddcb..8670b7a9 100644 --- a/src/develop/DryGen.UTests/Features/Development/GenerateReleaseNotes.feature +++ b/src/develop/DryGen.UTests/Features/Development/GenerateReleaseNotes.feature @@ -10,11 +10,14 @@ Scenario: Should generate table of context for release notes | 2022-09-03-v-0.7.1.md | | 2023-02-22-v-1.0.0.md | | 2024-04-07-v-1.6.2.md | + | 2024-11-03-v-2.0.0-prerelease0002.md | When I generate the release notes TOC Then I should not get an exception And console out should contain the text """ # Autogenerated by the Docs build step. Do not edit this file by hand, as your edits will be overwritten by the next Docs build. + - name: Version 2.0.0-prerelease0002 + href: v-2.0.0-prerelease0002.md - name: Version 1.6.2 href: v-1.6.2.md - name: Version 1.0.0 @@ -60,9 +63,13 @@ Examples: | 2024-04-28-v_x.y.z.md | '2024-04-28-v_x.y.z.md': The file name must be 'yyyy-MM-dd-v-x.y.z.md' or on the format '-v-.md', where is a date (NB! Not in the future) and is a valid version number! | | 2024-31-01-v-1.2.3.md | '2024-31-01-v-1.2.3.md': The file name must be 'yyyy-MM-dd-v-x.y.z.md' or on the format '-v-.md', where is a date (NB! Not in the future) and is a valid version number! | | 2024-04-29-v-1.2.3.md | '2024-04-29-v-1.2.3.md': '2024-04-29' is in the future | - | 2024-04-28-v-1.2.z.md | '2024-04-28-v-1.2.z.md': '1.2.z' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | - | 2024-04-28-v-1.y.3.md | '2024-04-28-v-1.y.3.md': '1.y.3' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | - | 2024-04-28-v-x.2.3.md | '2024-04-28-v-x.2.3.md': 'x.2.3' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | - | 2024-04-28-v-1.2.3.4.md | '2024-04-28-v-1.2.3.4.md': '1.2.3.4' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | - | 2024-04-28-v-1.2.a-3.4.md | '2024-04-28-v-1.2.a-3.4.md': '1.2.a-3.4' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | - | 2024-04-28-v-1.2.3.4.5.md | '2024-04-28-v-1.2.3.4.5.md': '1.2.3.4.5' is not a valid version number. It must be on the format a[.b[.c[-.d]]], where a, b, c and d are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease' | + | 2024-04-28-v-1.2.z.md | '2024-04-28-v-1.2.z.md': '1.2.z' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.y.3.md | '2024-04-28-v-1.y.3.md': '1.y.3' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-x.2.3.md | '2024-04-28-v-x.2.3.md': 'x.2.3' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3.4.md | '2024-04-28-v-1.2.3.4.md': '1.2.3.4' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.a-3.4.md | '2024-04-28-v-1.2.a-3.4.md': '1.2.a-3.4' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3.4.5.md | '2024-04-28-v-1.2.3.4.5.md': '1.2.3.4.5' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3-alpha007.md | '2024-04-28-v-1.2.3-alpha007.md': '1.2.3-alpha007' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3-alpha00007.md | '2024-04-28-v-1.2.3-alpha00007.md': '1.2.3-alpha00007' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3-alpha.0007.md | '2024-04-28-v-1.2.3-alpha.0007.md': '1.2.3-alpha.0007' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer | + | 2024-04-28-v-1.2.3-alpha-0007.md | '2024-04-28-v-1.2.3-alpha-0007.md': '1.2.3-alpha-0007' is not a valid version number. It must be on the format a[.b[.c[-dddd]]], where a, b and c are integers and describes the prerelease, e.g. 'alpha', 'beta' or 'prerelease', and dddd is a four digit integer |